我试图将一系列时间值(实际值)写入FORTRAN的dat文件中 . 这是MPI代码的一部分,代码运行了很长时间 . 所以我想在每个时间步骤提取数据并将其打印到文件中,并在程序执行期间随时读取文件 . 目前,我面临的问题是,在程序结束之前,时间值不会写入文件 . 我在do循环之前放置了open语句,在do循环结束之后放置了close语句 .
我的代码部分看起来像:
open(unit=57,file='inst.dat')
do loop starts
.
.
.
write(57,*) time
.
.
.
end do
close(57)
3 回答
试试
call flush(unit)
. 检查您的编译器文档,因为这是我认为的扩展 .你提到MPI:对于并行代码,我认为你需要给每个线程自己的文件/单元,或者采取其他措施来避免冲突 .
如何在每个时间步之后关闭文件(假设时间步之间经过了合理的时间)?
或者,如果时间步长之间的时间很短,则在10,100,...迭代的块之后写入数据可能更有效 .
来自Gfortran manual:
从Fortran 2003标准开始,有一个
FLUSH
语句应优先于FLUSH
内在语句 .该
FLUSH
内在和Fortran 2003的FLUSH
声明具有相同的作用:他们冲洗运行时库的I / O缓冲,从而使数据变得对其他进程可见 . 这并不能保证数据已提交到磁盘 .在POSIX系统,可以请求所有的数据是通过调用FSYNC函数传送到存储装置,与所述I / O单元的POSIX文件描述符作为参数(与GNU固有FNUM检索) . 以下示例显示了如何: