
[英]How to write a large array (1D or 2D) to hdf5 file at each time step for a simulation in Fortran
[英]How to write string array to a HDF5 dataset with Fortran API?
字符串数组是使用fortran语言定义的:
character(len = 20), dimension(5) :: strings = (/"hello", "world", "Hello", "HDF5", "fortran"/)
现在,我想使用HDF5 API参考文档说明的h5ltmake_dataset_string_f()
接口将此数组保存到数据集中
Fortran90介面: h5ltmake_dataset_string_f
子程序h5ltmake_dataset_string_f(loc_id,dset_name,buf,errcode)
implicit none
整数(HID_T),意图(IN):: loc_id ! 文件或组标识符
字符(LEN = *),意图(IN):: dset_name ! 数据集名称
字符(LEN = *),意图(IN),尺寸(:) :: buf! 数据缓冲区
整数:: errcode ! 错误代码
结束子程序h5ltmake_dataset_string_f
我的通话代码如下
h5ltmake_dataset_string_f(group_id, dset_name, strings, error)
子例程调用之前已定义了group_id,dset_name和错误。
但是当我编译并构建此代码时,会出现编译错误
h5ltmake_dataset_string_f():违反了实际参数和伪参数!
那么如何将字符串写入一个数据集呢?
使用API h5dwrite_f(...)而不是h5ltmake_dataset_f()来写入字符串数组。
尽管此问题是几年前提出的,但这里提供了一种解决方案,该解决方案是使用HDFql( http://support.microsoft.com/kb/ ://www.hdfql.com )。 如果执行此类型的操作时其他人发现自己在HDF5低级详细信息中苦苦挣扎,请发布此信息:
PROGRAM Example
! use HDFql module (make sure it can be found by the Fortran compiler)
USE HDFql
! declare variables
CHARACTER(LEN = 20), DIMENSION(5) :: strings = [CHARACTER(LEN = 20) :: "hello", "world", "Hello", "HDF5", "fortran"]
CHARACTER :: variable_number
INTEGER :: state
! create an HDF file named "example.h5" and use (i.e. open) it
state = hdfql_execute("CREATE FILE example.h5")
state = hdfql_execute("USE FILE example.h5")
! create a dataset named "my_dataset" of type char (size 20) of one dimension (size 5)
state = hdfql_execute("CREATE DATASET my_dataset AS CHAR(5, 20)");
! register variable "strings" for subsequent use (by HDFql)
state = hdfql_variable_register(strings)
WRITE(variable_number, "(I0)") state
! insert (i.e. write) content of variable "strings" into dataset "my_dataset"
state = hdfql_execute("INSERT INTO my_dataset VALUES FROM MEMORY " // variable_number)
! unregister variable "strings" as it is no longer used/needed (by HDFql)
state = hdfql_variable_unregister(strings)
END PROGRAM
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.