我正在尝试运行需要特别长时间的代码。为了完成它,我将时间步循环分开,这样就可以转储数据,然后重新读取下一个循环:
do 10 n1 = 1, 10
OPEN(unit=11,file='Temperature', status='replace')
if (n1.eq.1) then
(set initial conditions)
elseif (n1.gt.1) then
READ(11,*) (reads the T values from 11)
endif
do 20 n = 1, 10000
(all the calculations for new T values)
WRITE(11,*) (overwrites the T values in 11 - the file isn't empty to begin with)
20 continue
10 continue
我的问题是,这只适用于n1时间步骤的2次 - 在它替换文件11一次后,它不再替换,只重复那里的值。
open语句有问题吗?有没有办法能够在同一代码中多次替换文件11?
答案 0 :(得分:4)
您的程序将执行open
语句10次,每次都使用status = 'replace'
。在第一轮可能该文件不存在,因此open
语句导致创建一个新的空文件。在第二轮中,文件确实存在,因此open
语句导致文件被删除,并且要创建一个新的,同名的文件。任何从该文件中读取的尝试都可能导致问题。
我会将初始文件打开,从循环中重新构建代码:
open(unit=11,file='Temperature', status='replace')
(set initial conditions)
(write first data set into file)
do n1 = 2, 10
rewind(11)
read(11,*) (reads the T values from 11)
! do stuff
close(11) ! Not strictly necessary but aids comprehension of intent
! Now re-open the file and replace it
open(unit=11,file='Temperature', status='replace')
do n = 1, 10000
(all the calculations for new T values)
write(11,*) (overwrites the T values in 11 - the file isn't empty to begin with)
end do
end do
但是有很多其他方法可以重构代码;选择一个适合你的。
顺便说一下,通过写/读文件将数据从一次迭代传递到下一次迭代可能会非常慢,我只会将其用于检查点以支持重新启动失败的执行。