Why is My Fortran Program Only Showing Output Data After Completion?

  • Context: Fortran 
  • Thread starter Thread starter xxh418
  • Start date Start date
  • Tags Tags
    Delay File Fortran
Join the discussion
Ask a follow-up here, or get your own question answered by working scientists, mathematicians and engineers — people, not an autocomplete.
Real named experts · corrections over time · the nuance an AI answer skips
3 replies · 6K views
xxh418
Messages
9
Reaction score
0
Hi all,
I encounted a write file problem for Fortran 90. I appreciate it a lot if you can help me.

I open a file at the beginning of the program. Then everytime I rewind the unit number and write one new line to the first line of the file (the previous data on the first line is replaced).
So the total size of the file is very small ~1kb. However, I found the written file does not show the data I wrote during the simulation and only show the data when the program is finished. I do not know what is the problem. The following is the stream of the program.

program test

open(unit=10, file ='output.dat' ...)

loop i = 1, 100
rewind(10)
write(10,*)data
end loop

end program test

So during loop, the size of output.dat is always zero and no output until the end of the program. However, I want to check the output during the loop. Does anyone have any idea about this?

Thanks in advance.
 
Physics news on Phys.org
xxh418 said:
Hi all,
I encounted a write file problem for Fortran 90. I appreciate it a lot if you can help me.

I open a file at the beginning of the program. Then everytime I rewind the unit number and write one new line to the first line of the file (the previous data on the first line is replaced).
So the total size of the file is very small ~1kb. However, I found the written file does not show the data I wrote during the simulation and only show the data when the program is finished. I do not know what is the problem. The following is the stream of the program.

program test

open(unit=10, file ='output.dat' ...)

loop i = 1, 100
rewind(10)
write(10,*)data
end loop

end program test

So during loop, the size of output.dat is always zero and no output until the end of the program. However, I want to check the output during the loop. Does anyone have any idea about this?

Thanks in advance.
When you write to a file from a program, the data gets stored in a buffer in memory and doesn't get copied to disk until some time later, usually when the buffer is full or the program closes the file.

Look up the FLUSH command. That should solve your problem. (If you have an old version of Fortran with no flush, you can close and reopen the file instead.)
 
Alternatively and given that a program runs way too fast for you to monitor the open file with overwriting write statements, it is best to write without overwriting or simply write to standard output or to standard error.
 
DrGreg said:
When you write to a file from a program, the data gets stored in a buffer in memory and doesn't get copied to disk until some time later, usually when the buffer is full or the program closes the file.

Look up the FLUSH command. That should solve your problem. (If you have an old version of Fortran with no flush, you can close and reopen the file instead.)

Hi Drgreg,
Thank you very much for your answer. I setup the opinion buffer="no" in "write", then the problem is solved. Thanks again.

Xu