2009-10-07 2 views
8

Je cours une boucle dans un programme Fortran 90 qui fournit des valeurs numériques à un fichier de sortie pour chaque itération de la boucle. Le problème est que la sortie n'est pas enregistrée dans le fichier mais à chaque étape. Comment puis-je l'obtenir pour vider chaque étape?Comment vidanger la sortie dans un fichier après chaque écriture avec un programme Fortran 90 de gfortran?

code Exemple:

open(unit=1,file='output') 

do i = 1, 1000 
write(1,*) i 
end do 

close(unit=1) 

Merci à l'avance.

Répondre

6

L'autre manière, si gfortran l'implémente, est d'appeler le vidage de sous-routine non standard. Tous les compilateurs ne l'implémentent pas.

+4

'FLUSH' comme un sous-programme (comme dans' appel flush() ') est non standard, mais la' déclaration FLUSH' est valide Fortran 2003: FLUSH (10) ' –

+0

Depuis le site Web GNU, il est dit: L'instruction FLUSH intrinsèque et l'instruction Fortran 2003 FLUSH ont un effet identique: elles vident la mémoire tampon d'E/S de la bibliothèque d'exécution afin que les données deviennent visibles pour les autres processus. Cela ne garantit pas que les données sont validées sur le disque. –

12

Vous devez rendre la sortie non tamponnée. Essayez de définir la variable d'environnement GFORTRAN_UNBUFFERED_ALL sur 'y', 'Y' ou 1.

+0

Est-ce que je peux faire cela de bash comme suit: GFORTRAN_UNBUFFERED_ALL = 'y' $ export GFORTRAN_UNBUFFERED_ALL ? Juste curieux? – banDedo

+0

Oui, bien que vous n'ayez pas besoin du '$' dans la ligne d'export. Cela fonctionnera jusqu'à ce que vous quittiez le shell actuel. Si vous voulez ce comportement de manière permanente, vous pouvez ajouter ces lignes à votre fichier '.bashrc'. –

+0

J'ai essayé la prescription suivante et je l'ai tapé: GFORTRAN_UNBUFFERED_ALL = 'y' export GFORTRAN_UNBUFFERED_ALL écho GFORTRAN_UNBUFFERED_ALL $ Echo imprimé la valeur appropriée. J'ai essayé ceci avec 'y', 'Y', et 1. Aucun de ceux-ci n'a résolu le problème. Merci pour la suggestion, cependant. – banDedo

0

Lorsque j'ai besoin de vider, je ferme le fichier et je le rouvre. C'est maladroit et lent, mais je ne connais pas de meilleure façon de fortran 90 qui fonctionnera avec tous les compilateurs.

Questions connexes