Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Aide | Shop Recherche
1244 connectés 

  FORUM HardWare.fr
  Programmation
  Divers

  Écriture itérative dans un fichier à l'aide d'une subroutine FORTRAN

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Écriture itérative dans un fichier à l'aide d'une subroutine FORTRAN

n°2232517
coyst
Posté le 02-07-2014 à 20:05:03  profilanswer
 

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

mood
Publicité
Posté le 02-07-2014 à 20:05:03  profilanswer
 

n°2232549
gilou
Modérateur
Modzilla
Posté le 03-07-2014 à 11:39:35  profilanswer
 

Ç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  
using.  Standard Fortran 77 requires opening the file, reading until end  
of file is encountered, backspacing twice, then writing the new records.

(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+,


Message édité par gilou le 03-07-2014 à 14:22:06

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --    In umbra igitur pugnabimus. --
n°2232578
coyst
Posté le 03-07-2014 à 16:18:58  profilanswer
 

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


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Divers

  Écriture itérative dans un fichier à l'aide d'une subroutine FORTRAN

 

Sujets relatifs
(vb) Ajout d'un préfixe dans la signature d'un fichier XMLCommand en batch pour copier -> renommer -> coller un fichier...
extraction contenu fichiers txt sur un fichier ExcelPB de lecture fichier comportant des " "
[Résolu] Lecture dans un fichier TXT[RESOLU][PERL] Extraire chaines multiples dans une fichier
C/C et fermer un fichierstring dans un fichier netcdf
Plus de sujets relatifs à : Écriture itérative dans un fichier à l'aide d'une subroutine FORTRAN


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite) / Groupe LDLC / Shop HFR