2009-10-07 8 views
8

Uruchomiłem pętlę w programie Fortran 90, która podaje wartości numeryczne do pliku wyjściowego dla każdej iteracji pętli. Problem polega na tym, że dane wyjściowe nie są zapisywane do pliku, ale co tylu kroków. Jak mogę to zmusić do przepłukania każdego kroku?Jak wypłukać dane wyjściowe do pliku po każdym zapisie w programie gfortran Fortran 90?

Przykładowy kod:

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

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

close(unit=1) 

góry dzięki.

Odpowiedz

6

Innym sposobem, jeśli gfortran ją wdroży, jest wywołanie niestandardowego spłukiwania podprogramu. Nie wszystkie kompilatory implementują to.

+4

'FLUSH' jako podprogram (jak w' przemywać call() ') jest nietypowa, ale' FLUSH' oświadczenie jest ważne Fortran 2003: 'FLUSH (10)' –

+0

Od strony GNU, to mówi: Instrukcja FLUSH wewnętrzna i Fortran 2003 FLUSH mają identyczny efekt: przepłukują bufor we/wy biblioteki środowiska wykonawczego, aby dane były widoczne dla innych procesów. Nie gwarantuje to, że dane są zatwierdzone na dysku. –

12

Musisz wykonać wyjście niebuforowane. Spróbuj ustawić zmienną środowiskową GFORTRAN_UNBUFFERED_ALL na "y", "Y" lub 1.

+0

zrobiłbym to z bash następująco: GFORTRAN_UNBUFFERED_ALL = 'y' eksportowej $ GFORTRAN_UNBUFFERED_ALL ? Po prostu ciekawy? – banDedo

+0

Tak, chociaż nie potrzebujesz "$" w wierszu eksportu. To zadziała, dopóki nie wyjdziesz z bieżącej powłoki. Jeśli chcesz zachować to zachowanie na stałe, możesz dodać te linie do pliku '.bashrc'. –

+0

Próbowałem następującą receptę i mam wpisane: GFORTRAN_UNBUFFERED_ALL = 'y' eksport GFORTRAN_UNBUFFERED_ALL echo $ GFORTRAN_UNBUFFERED_ALL Echo drukowane właściwą wartość. Próbowałem tego z "y", "Y" i 1. Żaden z rozwiązany problemu. Dziękuję za sugestię. – banDedo

0

Gdy trzeba się opróżnić, po prostu zamykam plik i ponownie go otwieram. Jest to niezgrabne i powolne, ale nie znam lepszego sposobu na fortran 90, który będzie działał ze wszystkimi kompilatorami.

Powiązane problemy