gpt4 book ai didi

fortran - 使用 SOURCE= 一次分配多个变量

转载 作者:行者123 更新时间:2023-12-05 04:13:32 25 4
gpt4 key购买 nike

我现在正在尝试更新我的旧 Fortran 代码,其中包括像 (*) 这样的行

allocate( a(2), b(2) )
a(:) = 0.0
b(:) = 0.0

最初,我将它们更改为

allocate( a(2), source=0.0 )
allocate( b(2), source=0.0 )

但这显然没那么简单。所以我试着把它们结合起来,这样

allocate( a(2), b(2), source=0.0 )    !! (1)

我没想到它会起作用,但它实际上适用于 gfortran >=4.8 和 Sun fortran 8.7(而不适用于 ifort-14)。所以我浏览了 F2003 的分配部分和 F2008文档,并且似乎在 F2008 中删除了“如果出现 SOURCE=,分配列表 应仅包含一个分配对象”的限制。这是否意味着上面的第 1 行在 F2008 中没有问题,而不同的行为仅仅是由于 F2008 支持的程度不同?

(*) 在实际代码中,我试图分配派生类型的几个数组组件,allocate( conf% crd(3,N), conf% vel(3,N), conf% frc( 3,N), blah, blah,... ) 同时为它们中的每一个分配零。所以我想知道是否可以稍微简化这些行。

最佳答案

在高层,是的,Fortran 2003 中的限制(源分配中只有一个对象)在 Fortran 2008 中被删除。

现在,谈谈其他事情。首先,您不显示 ab 的声明。在源分配中,要分配的对象必须与源类型兼容。简单的例子

real, allocatable, dimension(:) :: a, b
allocate( a(2), b(2) )
a(:) = 0.0
b(:) = 0.0

具有与 Fortran 2008 相同的效果

real, allocatable, dimension(:) :: a, b
allocate( a(2), b(2), source=0.0 )

但是呢

double precision, allocatable, dimension(:) :: a, b
allocate( a(2), b(2), source=0.0 )

?

之前的第二点是:Fortran 2008 是一个相对较新的东西。我不相信所有编译器都能在源分配中正确实现多个对象的规则。

关于fortran - 使用 SOURCE= 一次分配多个变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37352760/

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