我想以附加方式将数据写入fortran中的hdf5文件中,但我无法将数据保存在大型内存数组中。
使用 ascii 写作时,我可以这样做:
program example1
implicit none
integer :: nu, i
open(filename="someFile.txt", newunit=nu)
do i = 1, 10
write(nu, *) i
end do
close(nu)
end program example1
我会得到一个包含从 1 到 10 的所有整数的文件,但没有声明大小为 10 的一维数组。
如何在 fortran 中编写一个 hdf5 文件来实现这一点,即在同一数据集名称下的同一文件中保存数字,但不保存保存这些数字的数组?
您需要创建一个可扩展的数据集,然后借助超板或点选择来填充它(否则,之前写入的数据将被覆盖)。使用 HDFql,您的用例可以在 Fortran 中按以下方式解决:
PROGRAM Example
USE HDFql
CHARACTER :: variable_number
INTEGER :: state
INTEGER :: i
state = hdfql_execute("CREATE AND USE FILE test.h5")
state = hdfql_execute("CREATE DATASET dset AS INT(0 TO UNLIMITED)")
WRITE(variable_number, "(I0)") hdfql_variable_register(i)
DO i = 1, 10
state = hdfql_execute("ALTER DIMENSION dset TO +1")
state = hdfql_execute("INSERT INTO dset[-1] VALUES FROM MEMORY " // variable_number)
END DO
state = hdfql_variable_unregister(i)
state = hdfql_execute("CLOSE FILE")
END PROGRAM