我有一个Fortran代码,该代码生成未格式化的文件(.checkpoint)。在相同的代码中,如果未格式化的文件存在,我尝试在代码后面创建它之前为变量分配一个值。这是代码的一部分:
integer :: nt, irec1
logical OK
nt = 1
a = 0
inquire (file='.checkpoint', exist=OK)
if (OK) then
a = 1
end if
if(a .eq. 1) then
inquire (iolength = irec1) nt
open(unit=255, file='.checkpoint', status='unknown', form='unformatted', access='direct', recl=irec1)
read(255,rec=1) nt
go to 315
end if
!do something here
315 nt = 2
!Saving checkpoint file
inquire (iolength = irec1) nt
open(unit=255, file='.checkpoint', status='unknown', form='unformatted', access='direct', recl=irec1)
write(255,rec=1) nt
stop
end
对于第一次运行,由于没有.checkpoint文件,因此 OK 应该为false,且a = 0。如果使用ifort编译器运行代码,则会收到错误消息:
forrtl: severe (36): attempt to access non-existent record, unit 255 ~/directory/.checkpoint
我的问题是如何首先查询是否存在未格式化的文件。如果存在,则分配a =1。如果文件已格式化,则上述代码可以正常工作。该代码的主要目的是重新开始分子动力学模拟的计算。