【问题标题】:Allocating array components of derived types分配派生类型的数组组件
【发布时间】:2014-03-08 15:38:21
【问题描述】:

我有一种类似下面的东西

 type BOPinfo

     double precision, allocatable :: realQ4(:,:), realQ6(:,:)

  end type BOPinfo

当元素是实数或整数标量时,我已经能够确定如何初始化派生类型中的元素。

但是,我不知道如何告诉BOPinfo 类型的变量数组realQ4 和realQ6 的大小是多少,以及如何将它们初始化为零。有什么建议吗?

【问题讨论】:

  • 实际使用 Fortran 2003 时请不要只使用标签fortran90。Fortran 90 中没有可分配的结构组件。

标签: fortran


【解决方案1】:

也可以使用structure constructor 来创建派生类型值表达式。构造函数是一个与类型同名的函数。

variable = BOPinfo(array1, array2)

其中array1 和array2 是具有适当等级的数组。如果您希望组件为not allocated,也可以传递null()。

在 Fortran 2008 中,您甚至可以省略可分配组件,它们的状态将为 not allocated。

【讨论】:

    【解决方案2】:

    可分配(或指针)类型组件不能有默认初始化。这适用于延迟形状数组和可分配/指针标量。可分配组件始终具有“未分配”的初始状态。取而代之的是,将各个组件与对象的声明分开分配和归零:

    type(BOPinfo) test
    integer n1, n2, m1, m2
    
    allocate (test%realQ4(n1,m1), test%realQ6(n2,m2))
    test%realQ4 = 0
    test%realQ6 = 0
    

    这与默认(或显式)初始化不同,也可以在结构构造函数中设置值(如another answer)。

    在 Fortran 2003 下,还有其他用于动态大小的方法,包括参数化派生类型(现在在最近的编译器版本中得到广泛支持)。

    【讨论】:

      猜你喜欢
      • 2014-10-18
      • 1970-01-01
      • 2020-03-17
      • 2012-04-26
      • 2018-11-22
      • 2010-10-20
      • 2017-04-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多