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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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