Écriture itérative dans un fichier à l'aide d'une subroutine FORTRAN - Divers - Programmation
Marsh Posté le 03-07-2014 à 11:39:35
Ça doit être du fortran 77 voire pre-77, car le fortran 90 a la notion de append (et certaines versions propriétaires du 77 aussi).
Lis le sujet suivant: http://computer-programming-forum. [...] 3b1df6.htm
Il y est dit entre autres:
Citation : The methods are different depending on which version of Fortran you are |
(d'après les posts suivants, c'est backspacing once plutôt que twice) et le dernier post de la page a un lien http://ftp.cac.psu.edu/pub/ger/fortran/hdk/append.for qui contient du code fonctionnel que tu peux peut être adapter à ton cas.
A+,
Marsh Posté le 03-07-2014 à 16:18:58
Salut,
Merci pour cette réponse, en effet cela devrait marcher. Entre temps j'ai testé l'option ACCESS="append" et il semblerait que ça marche également. Il semble aussi que ça ne soit pas dû au compilateur mais aux fonctionnalités compatibles avec ABAQUS.
Merci pour ton aide et pour le temps consacré à répondre à ma question
Bonne après-midi
Marsh Posté le 02-07-2014 à 20:05:03
Bonjour,
J'utilise un logiciel de simulation éléments finis (ABAQUS si cela peut être pertinent) sous Linux et je rencontre un problème quand à l'utilisation de subroutines écrites en FORTRAN.
Pour essayer de rendre les choses aussi claires que possible, le logiciel en question effectue une simulation itérative dans le temps (càd que je lui demande de simuler un phénomène physique sur 100 secondes en calculant un état intermédiaire toutes les secondes).
À chaque itération de la simulation, ma subroutine relève une certaine variable d'état (par exemple une température) et s'en sert pour calculer une donnée d'entrée de l'itération suivante (par exemple la pression à appliquer à une certaine surface). Sur cette partie là pas de problème, la subroutine fait son travail.
Le hic c'est que je souhaiterais stocker cette donnée d'entrée dans un fichier texte à chaque incrément de manière à obtenir en fin de simulation l'évolution temporelle de cette donnée d'entrée sur les 100 secondes (et non, elle n'est pas disponible par défaut dans les outputs de la simulation elle-même).
Jusqu'ici j'ai réussi à écrire une instruction qui me permet d'écrire la donnée d'entrée dans un fichier texte, mais je me retrouve avec un fichier texte ne contenant que la donnée d'entrée à l'incrément en cours (donc en fin de simulation, la seule donnée d'entrée à l'état final).
J'ai essayé d'utiliser l'option de contrôle position="append" lorsque j'utilise la commande open mais il semblerait que soit le logiciel (ABAQUS) soit le compilateur FORTRAN (qui est apparemment un peu exotique mais dont je n'arrive pas à trouver la référence) ne supporte pas cette option de contrôle.
Mon problème est d'autant plus épineux que la boucle de calcul (l'incrémentation de 1 seconde jusqu'à 100 secondes) n'est pas contrôlée par ma subroutine (auquel cas j'aurais pu créer un vecteur de 100 lignes vide et demander à la subroutine de remplir la n-ième ligne avec la donnée d'entrée au n-ième incrément). Je précise toutefois que j'ai accès par différentes variables au numéro d'incrément courant et au temps de simulation courant (ce qui dans mon cas revient au même)
Histoire d'être un peu moins flou, voici l'instruction que j'utilise mais qui écrase mes données d'entrée précédentes pour ne arder que la donnée de l'incrément courant/finale :
OPEN(11, file="Fc.txt", ACCESS="sequential", status="old" )
DO
write(11,*) Fc, TIME(2) !TIME est un vecteur de dimension 2 et sa 2ème composante contient le temps courant
ENDDO
CLOSE(11)
Et quand j'ouvre Fc.txt à la fin j'ai une ligne :
85,6 100
(85,6 étant la valeur de Fc au 100ème incrément et 100 le temps en secondes)
Alors que je voudrais quelque chose comme :
0 0
0.25 1
1.5 2
0.6 3
.
.
.
85.6 100
Donc ma question est la suivante : avez vous une méthode à me proposer, autre que l'option position="append" dans la commande open, qui me permettrait de stocker l'évolution temporelle de Fc au cours de ma simulation?
Précisions : il semblerait que les options suivantes ne soient pas disponibles non plus :
Action=
Associatevariable=
Blocksize=
Buffercount=
Carriagecontrol=
Defaultfile=
Delim=
Dispose=
Extendsize=
Initialsize=
Key=
Maxrec=
Nospanblocks
Organization=
Pad=
Position=
Readonly=
Recordtype=
Shared=
Useropen=
Merci d'avance pour vos éventuelles réponses, et bonne soirée