gpt4 book ai didi

Fortran 派生类型赋值

转载 作者:行者123 更新时间:2023-12-03 22:20:24 24 4
gpt4 key购买 nike

假设我有一个 Fortran 派生类型

type :: atype
integer :: n
integer :: a(10)
integer, allocatable :: b(:)
end type

我有两个这种类型的实例
type(atype) :: t1, t2

当我做以下任务时到底会发生什么?
t2 = t1

我对此感兴趣,因为我想正确地制作派生类型变量的副本,这意味着标量组件应该相等,数组组件的每个元素应该相等,可分配数组应该具有相同的分配大小并且元素应该相等。目前我只想编写一个子程序来正确复制和分配组件。
subroutine copy_atype(from, to)
type(atype) :: from, to
to%n = from%n
to%a = from%a
if (allocated(to%b)) deallocate(to%b)
if (allocated(from%b) then
allocate(to%b(size(from%b)))
to%b = from%b
end if
end subroutine

我将不胜感激有关标准中适当部分的指示。

我正在使用 gfortran 4.7。

最佳答案

缺席一个合适的定义的赋值过程可用于将一个类型分配给另一个,内部派生类型分配发生。这在 F2008 7.2.1.3 中进行了描述。对于您的类型定义,内部派生类型分配基本上完成了您的过程所做的事情:

  • 不可分配的组件(它们本身没有类型绑定(bind)定义的赋值)是使用内部赋值进行分配的。如果他们确实有类型绑定(bind)分配,则使用它。
  • 被分配对象中的可分配组件如果已经分配则被释放,使用相同类型、类型参数和被分配表达式的边界重新分配,然后使用类型绑定(bind)定义的赋值(如果适用)或内在赋值来传递值。

  • 还:
  • 指针组件是指针分配的;
  • coarray 组件必须在变量和表达式之间的分配状态上匹配,并使用内部赋值进行传输。
  • 关于Fortran 派生类型赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19111471/

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