Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1
    Invité de passage
    Homme Profil pro R D
    Étudiant
    Inscrit en
    novembre 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Nom : Homme R D
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : novembre 2012
    Messages : 2
    Points : 1
    Points
    1

    Par défaut Problème lors de la compilation

    Bonjour à tous,
    Je vous écris parce que j'ai un problème lors de la compilation de mon programme et je ne vois pas du tout comment le résoudre...
    Je l'insère ci-dessous, je suis sous linux et utilise gfortran comme compilateur, lorsque je tape gfortran -o blablabla blablabla.f90, il me renvoie l'erreur :
    Code :
    1
    2
    3
    do i=1,nx
               1
    Error: Name 'nx' at (1) is an ambiguous reference to 'nx' from current program unit
    Et ceci dès que j'utilise nx,ny,u,v...
    Donc avez-vous une idée? Je vous remercie par avance.
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    MODULE parametres
      INTEGER,PARAMETER :: nx=900,ny=300,nt=1000 !Déclaration des entiers
      REAL,PARAMETER :: dx=1/nx,dy=1/ny,dt=1/nt,h=2.0,k=0.3,m=0.8,e1=0.0000002,e2=0.00003,e3=0.00012          !Déclaration des réels
    END MODULE parametres
    
    MODULE my_variables
      USE parametres
      REAL, DIMENSION(0:nx+1,0:ny+1) :: u,v,u2,v2 !Déclaration des abondances (u =proie, v=prédateur) comme une matrice à deux dimensions
    END MODULE my_variables
    
    SUBROUTINE initiale(u,v,dx,dy,dt,h,k,m,nx,ny,e1,e2,e3,nt) !sous programme créant les tableaux initiaux u et v à l'instant t=0
      USE parametres
      USE my_variables
      do i=1,nx
         do j=1,ny
            u(i,j)=m/k*h/(1-m/k)-e1*(i-0.1*j-225)*(i-0.1*j-675) !conditions initiales sur u
            v(i,j)=(1-(m/k*h/(1-m/k)))*(h+(m/k*h/(1-m/k)))-e2*(i-450)-e3*(j-150)!conditions initiales sur v
         end do
      end do
    
    END SUBROUTINE initiale
    
    SUBROUTINE stockage(u,v,u2,v2,nx,ny) !sous programme qui stock les matrices u et v de l'instant n dans les matrices u2 et v2 et qui impose les conditions aux bords (absence de flux aux bords)
      USE parametres, ONLY:nx,ny
      USE my_variables
      do i=0,nx+1               !première et dernière ligne égale à 3e et avant avant dernière
         u(i,0)=u(i,2)
         u(i,nx+1)=u(i,nx-1)
         v(i,0)=v(i,2)
         v(i,nx+1)=v(i,nx-1)
      end do
    
      do j=0,ny+1               !première et dernière colonne égale à 3e et avant avant dernière
         u(0,j)=u(2,j)
         u(ny+1,j)=u(ny-1,j)
         v(0,j)=v(2,j)
         v(ny+1,j)=v(ny-1,j)
      end do
    
      u2=u                       !on stock les valeurs de u à l'instant n dans u2
      v2=v                       !on stock les valeurs de v à l'instant n dans v2
    END SUBROUTINE stockage
    
    
    
    SUBROUTINE espace(u,v,dx,dy,dt,h,k,m,u2,v2,nx,ny,nt)
      USE parametres
      USE my_variables
      CALL stockage(u,v,u2,v2,nx,ny)
    
      do i=1,nx
         do j=1,ny
    
    
            u(i,j)=u2(i,j) + dt*((u2(i+1,j)-2*u2(i,j)+u2(i-1,j))/dx**2 + & 
                 (u2(i,j+1)-2*u2(i,j)+u2(i,j-1))/dy**2 + &
                 u2(i,j)*(1-u2(i,j)) - u2(i,j)*v2(i,j)/(u2(i,j)+h)) !calcul de u(n+1) en fonction de u(n) et v(n)
    
            v(i,j)=v2(i,j) + dt*((v2(i+1,j)-2*v2(i,j)+v2(i-1,j))/dx**2 + &
                 (v2(i,j+1)-2*v2(i,j)+v2(i,j+1))/dy**2 + &
                 k*u2(i,j)*v2(i,j)/(u2(i,j)+h) - m*v2(i,j))        !calcule de v(n+1) en fonction de u(n) et v(n)
    
         end do
      end do
    END SUBROUTINE espace
    
    PROGRAM proie_predateur
    
      USE parametres
      USE my_variables
      IMPLICIT NONE
    
      CALL initiale(u,v,dx,dy,dt,h,k,m,nx,ny,e1,e2,e3)
    
      do t=1,nt
         CALL espace(u,v,dx,dy,dt,h,k,m,u2,v2)
      end do
    
    END PROGRAM proie_predateur

  2. #2
    Modérateur

    Profil pro
    Inscrit en
    août 2006
    Messages
    840
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : août 2006
    Messages : 840
    Points : 1 079
    Points
    1 079

    Par défaut

    Le problème vient du fait que nx, ... apparaissent comme arguments de la routine Initiale et qu'ils sont aussi accessibles via le use parametres. Le compilateur voit donc 2 identificateurs distincts ayant le même nom et ne sait pas auquel tu fais référence.

    La solution : tu n'as pas à passer en argument des éléments accessibles via les uses, surtout quand ce sont des constants.

    Je suis quand même surpris qu'il indique une erreur car je croyais que les arguments avaient préséance et masquaient les identificateurs accessibles via les uses...

  3. #3
    Invité de passage
    Homme Profil pro R D
    Étudiant
    Inscrit en
    novembre 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Nom : Homme R D
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : novembre 2012
    Messages : 2
    Points : 1
    Points
    1

    Par défaut

    En effet, c'était bien le problème, ceci est désormais résolu merci beaucoup!!!

+ Répondre à la discussion
Cette discussion est résolue.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •