gpt4 book ai didi

fortran - 如何获得通用的 Fortran 输入值

转载 作者:行者123 更新时间:2023-12-02 20:52:54 27 4
gpt4 key购买 nike

我只是捡起并尝试清理一些使用 HDF5 库的 Fortran 代码。在该库中有一个定义如下的函数:

SUBROUTINE h5dwrite_f(dset_id, mem_type_id, buf, dims, hdferr, & 
mem_space_id, file_space_id, xfer_prp)
IMPLICIT NONE
INTEGER(HID_T), INTENT(IN) :: dset_id ! Dataset identifier
INTEGER(HID_T), INTENT(IN) :: mem_type_id ! Memory datatype identifier
TYPE, INTENT(IN) :: buf ! Data buffer; may be a scalar
! or an array
...

这里的关键输入是buf。我的代码中有一堆不同的部分使用这个子例程,并且包装子例程仅一行和输入类型不同,所以我想对代码进行一些泛化。我所有调用此函数的子例程中唯一的区别是 mem_type_id 和传递给 buf 的值的实际类型。例如,在一个调用中,mem_type_idH5T_NATIVE_CHARACTERbuf 是一个字符串,而在另一个调用中 mem_type_id >H5T_NATIVE_REALbuf 是一个 real

我尝试复制其子例程声明中的内容,因此我有一个“类型”输入,但它无法编译。

  subroutine StoreDataIntoH5File (vname, vval, mem_type_id)
character, intent (in) :: vname*(*)
type, intent (in) :: vval ! use generic type statement
integer(HID_T), intent(in) :: mem_type_id ! Memory datatype identifier
...
call h5dwrite_f (dset_id, mem_type_id, vval, (/1_HSIZE_T/), hdf5_error)

有办法做我正在寻找的事情吗?在任何其他语言中,我会将其描述为想要有 object 类型的输入,或者在 C 中,我可能会使用 void*。基本上,这个 API 似乎能够采用通用输入类型,并且我正在尝试复制它,因为我的子例程正在包装它。

我很高兴采用指针路线,基本上我只是希望能够为各种输入变量类型共享此子例程,就像它调用子例程一样 (h5dwrite_f)确实如此。

最佳答案

在 HDF5 中,所有参数组合的 Fortran 绑定(bind)都会重载。您可以执行相同的操作(通过重载重复代码)或自行处理对 C HDF5 库的调用。我建议使用前一种解决方案! (可以通过循环参数组合来实现大部分自动化)。

关于fortran - 如何获得通用的 Fortran 输入值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56466893/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com