检查在 FORTRAN 中生成的巨大未格式化文件
Checking the gigantic unformatted file generated in FORTRAN
我的 Fortran 程序的输出是一个巨大的 (300GB) 未格式化文件。 (事实上,这个文件包含了很多粒子的xyz坐标的时间演化。所以,数据类型是real*8,如果有关系的话)
问题是我不确定是否所有这些数据都已正确写入,因为计算服务器中存在暂时性问题。现在,我留下了这个巨大的文件,正在寻找一种方法来检查它的所有内容是否健康!
有没有办法检查所有 xyz 是否都正确写入且没有损坏(比如 NaN)?
除了 dwwork 检查 NaN 的方法外,您还可以检查无穷大。之后,读取文件并循环遍历每个值就是一件简单的事情。既然你写了这个文件,我想你可以阅读它。
program testinfnan
implicit none
real*8 :: x, y, z
logical :: xnan, ynan, znan, xinf, yinf, zinf
z = 1.
x = z / 0.
y = x / x
print *, ''
print *, 'x = ', x
print *, 'y = ', y
print *, 'z = ', z
xnan = x /= x
ynan = y /= y
znan = z /= z
print *, ''
print *, 'xnan = ', xnan
print *, 'ynan = ', ynan
print *, 'znan = ', znan
xinf = x == 1./0
yinf = y == 1./0
zinf = z == 1./0
print *, ''
print *, 'xinf = ', xinf
print *, 'yinf = ', yinf
print *, 'zinf = ', zinf
end program testinfnan
输出:
x = Infinity
y = NaN
z = 1.00000000000000
xnan = F
ynan = T
znan = F
xinf = T
yinf = F
zinf = F
我的 Fortran 程序的输出是一个巨大的 (300GB) 未格式化文件。 (事实上,这个文件包含了很多粒子的xyz坐标的时间演化。所以,数据类型是real*8,如果有关系的话)
问题是我不确定是否所有这些数据都已正确写入,因为计算服务器中存在暂时性问题。现在,我留下了这个巨大的文件,正在寻找一种方法来检查它的所有内容是否健康!
有没有办法检查所有 xyz 是否都正确写入且没有损坏(比如 NaN)?
除了 dwwork 检查 NaN 的方法外,您还可以检查无穷大。之后,读取文件并循环遍历每个值就是一件简单的事情。既然你写了这个文件,我想你可以阅读它。
program testinfnan
implicit none
real*8 :: x, y, z
logical :: xnan, ynan, znan, xinf, yinf, zinf
z = 1.
x = z / 0.
y = x / x
print *, ''
print *, 'x = ', x
print *, 'y = ', y
print *, 'z = ', z
xnan = x /= x
ynan = y /= y
znan = z /= z
print *, ''
print *, 'xnan = ', xnan
print *, 'ynan = ', ynan
print *, 'znan = ', znan
xinf = x == 1./0
yinf = y == 1./0
zinf = z == 1./0
print *, ''
print *, 'xinf = ', xinf
print *, 'yinf = ', yinf
print *, 'zinf = ', zinf
end program testinfnan
输出:
x = Infinity
y = NaN
z = 1.00000000000000
xnan = F
ynan = T
znan = F
xinf = T
yinf = F
zinf = F