gpt4 book ai didi

arrays - 使用假定秩 Fortran 数组作为派生类型组件

转载 作者:行者123 更新时间:2023-12-04 16:09:49 24 4
gpt4 key购买 nike

我正在寻找一些关于创建派生类型的最佳方法的一般建议,该派生类型存储具有任意等级的任意数据。

假设我有一个派生类型 Result 和一个 data 组件(以及其他组件):

type, public :: Result
private
class(*), allocatable :: data
...
end type

由一些过程初始化(从接口(interface) Result 调用):

function init(data) result(this)
type(Result) :: this
class(*), intent(in) :: data

allocate(this%data, source=data)
end function

这适用于标量数据,但我不确定如何为任意等级数据设置它。我知道程序可以接受假设秩参数,所以 init(data) 函数中的 data 可以是 data(..),但我我不确定是否可以将派生类型属性 this%data 指定为假定等级?

我想到的另一种方法是将任意排名数据存储为标量,如果这样的事情在 Fortran 中可行的话?这相当于使用 serialize()和 PHP 中的 unserialize() 函数。如果有人对类似方法有任何指导,我将不胜感激。

最终我希望能够做这样的事情:

type(Result) :: scalarResult
type(Result) :: 2DResult

scalarResult = Result(data=1.234)
2DResult = Result(data=[[1,2,3],[4,5,6]])

最佳答案

不可能有假定的排名派生类型组件。您需要找到其他解决方案,例如 Vladimir 建议的解决方案。另一个想法,有点像 kluge,是存储数据的 C_LOC 和等级,调出构造适当 C 描述符的 C 例程,然后使用假定等级参数回调 Fortran 例程。

请记住,您不能对 Fortran 中的假定等级做很多事情 - SELECT RANK 直到 F2015 才存在。

关于arrays - 使用假定秩 Fortran 数组作为派生类型组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44564872/

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