Bonjour à vous,
Je débute en Fortran et j'ai un problème qui peut se résumer ainsi. Je dispose de deux programmes utilisant exactement les mêmes datas et qui doivent être inclus dans une procédure récursive. J'aimerais pouvoir charger une fois pour toute ces datas, au lieu de les recharger à chaque fois que je re rentre dans la boucle.
Dans un premier programme, j'ai les déclarations suivantes :
Les six derniers arguments sont en fait les data communes aux programmes. La taille de ces data est annoncée en gras plus haut.
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 program main implicit none integer, parameter :: nbniv=220 integer, parameter :: nfreq=3000 real, dimension(nbniv) :: ener,g integer, dimension(nbniv) :: n,charge,nlast,llast,nel_eq integer, dimension(3) :: i0_ion integer, dimension(10) :: aa, bb real, dimension(10) :: corr_ener real, dimension(nbniv,nbniv) :: a,c,s,rrad,t real, dimension(nbniv-1,nbniv-1) :: q real, dimension(nbniv-1) :: y real, dimension(nbniv) :: pop,boltz ... ... open(10,file='donnes_LIBS_clair',form='formatted',status='unknown') read(10,'(a14,a15,a14)') tex6,tex7,tex8 do Z=1,val read(10,'(e16.7,e16.7,e16.7)',iostat=ios) tps,densi,temp if (Z==1) then call modstat(temp,densi,choix,pop,poptot0,ener,g,nlast,llast,nel_eq,charge,a) !pause else call modnonstat(temp,densi,choix,pop,poptot0,ener,g,nlast,llast,nel_eq,charge,a) !pause endif enddo close(10)
Donc dans les procédures modstat et modnonstat, j'utilise la syntaxe suivante :
Cette déclaration (dimension (*)) marche bien pour les vecteurs, mais pas pour la matrice a(nbniv, nbniv). En effet, quand on compile avec g95 le code :
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 SUBROUTINE modnonstat(telec,dens,choix,pop,poptot0,ener,g,nlast,llast,nel_eq,charge,a) implicit none integer, parameter :: nbniv=220 integer, parameter :: nfreq=3000 integer, dimension(nbniv) :: n integer, dimension(3) :: i0_ion integer, dimension(10) :: aa, bb real, dimension(10) :: corr_ener real, dimension(nbniv,nbniv) :: c,s,rrad,t,q real, dimension(nbniv) :: y real, dimension(nbniv) :: boltz real, dimension(*) :: pop,ener,g real, dimension(*,*) :: a integer, dimension (*) :: charge,nlast,llast,nel_eq
Auriez vous des conseils à me donner concernant cette erreur ? La syntaxe de déclaration en dimension(*) est elle correcte, ou y'a t'il une méthode alternative ?In file modnonstat.f90:14
real, dimension(*,*) :: a
1
Error: Bad specification for assumed size array at (1)
Merci d'avance pour vos réponses !
Partager