Fortran 77, variable
altopic
-
Char Snipeur Messages postés 10112 Date d'inscription Statut Contributeur Dernière intervention -
Char Snipeur Messages postés 10112 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour à tous,
Je voulais savoir si dans l'instruction:
real lon,lat,sla_free(14),sla_assim(14),sla_moy(14),
S sla_moy_ass(14)
DATA (sla_moy (i), i = 1,14, 1) /14 * 0 /
DATA (sla_moy_ass (i), i = 1,14, 1) /14 * 0 /
il est possible de mettre une variable à la place du pas 14. Ce pas varie en faite à chaque fois en fonction de l'étude.
J'ai essayé de faire un programme qui enregistre ce pas dans un fichier txt pour le réutiliser dans mon programme, mais sans succès. Voici le script:
--------------------------------------------------------------------------------------------------------------------------------
program interval_sla
integer ok,ligne,A
open(10,file='/data/ctsiim/augee/SIMULATEUR_V_1_0/SORTIES_EMMANUEL_CIRCU/select_point.txt',status='old',iostat=ok)
open(20,file='/data/ctsiim/augee/SIMULATEUR_V_1_0/SORTIES_EMMANUEL_CIRCU/A.txt',status='old',iostat=ok)
if(ok /= 0) then
write(*,*) 'erreur 1 fichier xko.dat'
stop
end if
ligne = 0
do while(ok == 0) !boucle pour compter le nb.de ligne du fichier
read(10,*,iostat = ok)
if (ok == 0) ligne = ligne + 1
end do
rewind(unit=10,iostat=ok)
A=ligne/14
write(20,*)A
close(20)
call yo
END
subroutine yo
integer ok,ligne,i,j,count,A
open(20,file='/data/ctsiim/augee/SIMULATEUR_V_1_0/SORTIES_EMMANUEL_CIRCU/A.txt',status='old',iostat=ok)
read(20,*)A
close(20)
lon,lat,sla_free(A),sla_assim(A),sla_moy(A),
S sla_moy_ass(A)
DATA (sla_moy (i), i = 1,A, 1) /A * 0 /
DATA (sla_moy_ass (i), i = 1,A, 1) /A * 0 /
--------------------------------------------------------------------------------------------------------------------------
Il me semble pas très logique d'effectuer un read avant d'avoir fini les déclarations.
De plus j'ai essayé avec un common entre le programme principal et la subroutine mais sans succès.
Je voulais savoir si dans l'instruction:
real lon,lat,sla_free(14),sla_assim(14),sla_moy(14),
S sla_moy_ass(14)
DATA (sla_moy (i), i = 1,14, 1) /14 * 0 /
DATA (sla_moy_ass (i), i = 1,14, 1) /14 * 0 /
il est possible de mettre une variable à la place du pas 14. Ce pas varie en faite à chaque fois en fonction de l'étude.
J'ai essayé de faire un programme qui enregistre ce pas dans un fichier txt pour le réutiliser dans mon programme, mais sans succès. Voici le script:
--------------------------------------------------------------------------------------------------------------------------------
program interval_sla
integer ok,ligne,A
open(10,file='/data/ctsiim/augee/SIMULATEUR_V_1_0/SORTIES_EMMANUEL_CIRCU/select_point.txt',status='old',iostat=ok)
open(20,file='/data/ctsiim/augee/SIMULATEUR_V_1_0/SORTIES_EMMANUEL_CIRCU/A.txt',status='old',iostat=ok)
if(ok /= 0) then
write(*,*) 'erreur 1 fichier xko.dat'
stop
end if
ligne = 0
do while(ok == 0) !boucle pour compter le nb.de ligne du fichier
read(10,*,iostat = ok)
if (ok == 0) ligne = ligne + 1
end do
rewind(unit=10,iostat=ok)
A=ligne/14
write(20,*)A
close(20)
call yo
END
subroutine yo
integer ok,ligne,i,j,count,A
open(20,file='/data/ctsiim/augee/SIMULATEUR_V_1_0/SORTIES_EMMANUEL_CIRCU/A.txt',status='old',iostat=ok)
read(20,*)A
close(20)
lon,lat,sla_free(A),sla_assim(A),sla_moy(A),
S sla_moy_ass(A)
DATA (sla_moy (i), i = 1,A, 1) /A * 0 /
DATA (sla_moy_ass (i), i = 1,A, 1) /A * 0 /
--------------------------------------------------------------------------------------------------------------------------
Il me semble pas très logique d'effectuer un read avant d'avoir fini les déclarations.
De plus j'ai essayé avec un common entre le programme principal et la subroutine mais sans succès.
Configuration: Windows 2000 Firefox 3.0.11
4 réponses
Au boulot, nous contournons le problème par l'intermédiaire du C/C++.
Les tableaux sont dimensionnés dans des fonctions C ou C++ avant d'être passer en paramètre à la fonction fortran.
Pour être plus concret, imagine le programme suivant :
Les tableaux sont dimensionnés dans des fonctions C ou C++ avant d'être passer en paramètre à la fonction fortran.
Pour être plus concret, imagine le programme suivant :
subroutine fsub(p1,p2)
REAL P3(N)Ce code est faut si N n'est pas un parameter. Par contre le code suivant :
subroutine fsub(p1,p2,P3)
REAL P3(N)est juste car p3 est passé en argument, il n'y a donc pas de restriction sur sa dimension.
http://abonnement.xiptv.shop/forum/affich 12936005 probleme compteur fortran
En effet, il dit la même chose que moi.
Je n'aime pas la solution de taille maximal car on risque toujours de la dépasser, à moins de mettre un garde qui vérifie que l'on ne dépasse pas. Et en plus tu prends de l'espace mémoire inutilement.
Mais si ça te va comme ça. Pas de souci.
En effet, il dit la même chose que moi.
Je n'aime pas la solution de taille maximal car on risque toujours de la dépasser, à moins de mettre un garde qui vérifie que l'on ne dépasse pas. Et en plus tu prends de l'espace mémoire inutilement.
Mais si ça te va comme ça. Pas de souci.
Un parameter défini une constante il me semble?