Précédent   Forum du club des développeurs et IT Pro > Autres langages > Autres langages > Fortran
Fortran Forum d'entraide sur la programmation en Fortran. Avant de poster -> FAQ Fortran
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 17/11/2012, 17h08   #1
Allius
Invité de passage
 
Homme R D
Étudiant
Inscription : 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
Allius est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2012, 19h38   #2
Sylvain Bergeron
Modérateur
 
Inscription : août 2006
Messages : 781
Détails du profil
Informations personnelles :
Localisation : Canada

Informations forums :
Inscription : août 2006
Messages : 781
Points : 1 028
Points : 1 028
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...
Sylvain Bergeron est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 17/11/2012, 20h57   #3
Allius
Invité de passage
 
Homme R D
Étudiant
Inscription : 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
En effet, c'était bien le problème, ceci est désormais résolu merci beaucoup!!!
Allius est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 00h46.


 
 
 
 
Partenaires

Hébergement Web