首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >派生数据类型内的Fortran、参数和静态表

派生数据类型内的Fortran、参数和静态表
EN

Stack Overflow用户
提问于 2013-11-06 19:09:59
回答 1查看 181关注 0票数 4

我想创建一个派生数据类型,其中包含一个表和这个表的长度。理想情况下,我想将其声明如下

代码语言:javascript
复制
type mydata
    integer                :: ndata
    real, dimension(ndata) :: x
end type mydata

但在一开始,ndata是未知的,因此x是一个动态表。

我必须为x使用allocatable并在已知ndata的情况下分配它吗?

代码语言:javascript
复制
type mydata
    integer                         :: ndata
    real, dimension(:), allocatable :: x
end type mydata

....

type(mydata) :: var
var % ndata = 10
allocate(var % x(10))

管理此类案例的最佳方法是什么?

EN

回答 1

Stack Overflow用户

发布于 2013-11-06 19:16:27

解决问题的最佳方法是使用最新的兼容Fortran 2003的编译器,并使用参数化的派生类型。如果我没记错的话,目前只有Cray和IBM编译器支持这个特性。它将允许您定义这样的类型

代码语言:javascript
复制
type mydata(sz)
    integer, len :: sz
    real, dimension(sz) :: x
end type mydata

这似乎正是你想要的。如果你没有这两个编译器中的任何一个,那么变通方法,比如你提议的那个,将不得不暂时满足你的要求。当然,您可以将首选的变通方法捆绑到非默认类型构造函数中。

如果你没有参数化的派生类型,那么我会从下面这样的类型定义开始:

代码语言:javascript
复制
type mydata
    real, dimension(:), allocatable :: x
  contains
    procedure :: setSize
    procedure :: getSize
end type mydata

并在显而易见的(?)中定义这些类型绑定过程道路。这将防止ndatax的大小不同。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19810506

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档