Fortran 90: Alternative to flush() for f90 Compiler

  • Context: Fortran 
  • Thread starter Thread starter natski
  • Start date Start date
  • Tags Tags
    Fortran
Join the discussion
Registration is free. Ask a follow-up in this thread, or start your own.
6 replies · 10K views
natski
Messages
262
Reaction score
2
Hi all,

I've recently obtained some code in Fortran 90 that was compiled with gfortran. I am compiling with f90 and one of the called statements is not recognised.

I have call flush(1) where 1 is the filename that the code is flushing.

Since flush is not a part of f90, is there an alternative statement which will do the same job in f90?

Thanks,

Natski
 
Physics news on Phys.org
Without looking too deeply into whether there is a direct replacement, one method that should achieve the same result would be to close the file and then immediately re-open it.
 
Hmm, the open command has position='append', so presumably this is why one cannot simply close then open?
 
natski said:
Hmm, the open command has position='append', so presumably this is why one cannot simply close then open?

Yes close and re-open will definitely have the effect of flushing any buffers but as you point out it will be necessary to be able to get back to the same point in the file somehow.
 
Flush is a C command really, but it seems that there must be a Fortran version of this command, without opening and closing?
 
Can you determine (by reading the code) exactly where the current file position is when it's flushed? I mean if it's somewhere convenient like right at the beginning or end then it would be easy enough to just "close/re-open/reposition", but if it's some arbitraty position then yes it would be much better to try and find a replacement for flush.
 
If the file was opened with the append attribute, closing and reopening it with the same append attribute should get the file pointer to point to the same place, as long as we are dealing with a sequential text file and there are no concurrent processes.
Do a little test to confirm it.

Also, some f90 dialects support flush without the unit number, as in flush().