Fortran 77, variable

Fermé
altopic - 2 juil. 2009 à 13:47
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 3 juil. 2009 à 15:18
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_E­MMANUEL_CIRCU/select_point.txt',status='old',iostat=ok)
open(20,file='/data/ctsiim/augee/SIMULATEUR_V_1_0/SORTIES_E­MMANUEL_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_E­MMANUEL_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.

4 réponses

Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
2 juil. 2009 à 14:02
Salut.
En thèorie, en FORTRAN, il faut que le compilateur connaisse la taille du tableau avant l'exécution, c'est à dire que tu ne peux pas faire ce que tu souhaites.
par contre, tu peux utiliser un
#define A 14
si tu as un préprocesseur
Ou, peut être, un PARAMETER pourrait te déterminer la taille.
0
Le problème est que cette taille varie à chaque fois que je lance cette routine. L'objectif est donc de réussir à récupérer la valeur du pas et de la mettre en entrée du programme dans mes déclarations de variables.

Un parameter défini une constante il me semble?
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
2 juil. 2009 à 16:17
Comme je te dit, ce que tu cherches à faire est impossible en FORTRAN 77, c'est pour ça que le CEA avait conçu l'ESOPE.
Après, si tu fait du fortran 90 ou plus, ça doit être possible, mais je ne sais pas comment.
0
Merci quand même pour la réponse, je vais essayer de contourner le problème, d'ailleur f77, j'ai l'impression de faire que ça...
enfin bref, à plus et merci
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
3 juil. 2009 à 08:24
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 :
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.
0
Merci pour la réponse, CChristian m'a répondu sur un autre post et solutionner le problème.
Si ça t' intéresse, c'est le post "problème compteur fortran".
A plus
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
3 juil. 2009 à 15:18
http://www.commentcamarche.net/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.
0