gpt4 book ai didi

Fortran - 变量赋值和声明

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

我试图在声明时为变量赋值,并使用该变量声明一些数组的维度,如下所示,

  type (typ_A), intent (in) :: str_A          

integer, parameter ::
x val_4 = (str_A%val_1 + str_A%val_2),
x val_5 = str_A%val_3

integer :: array_1(str_A%val_1, str_A%val_2), array_2(val_4, val_5)

在此代码中,array_1 以预期大小正确声明,但未声明 array_2。此外,我还收到类似 “此符号必须是定义的参数、枚举器或计算为编译时常量的查询函数的参数。”的错误。

注意 - 我可以直接使用 val_4 的表达式来声明 array_2,但有时,表达式 (str_A% val_1 + str_A%val_2 + ....) 非常大,必须用它来定义多个数组。因此,为了更好的可读性和更少的行数,我想把它放在一个变量中(在这种情况下为 val_4)

最佳答案

Fortran parameter 必须在编译时可计算,因为错误消息提示,str_A%val_1 等在编译时未知。你不能为此直接使用变量,但你可以创建一个嵌套的参数:

subroutine x (str_A)
type(whatever),intent(in)::str_A
call x_2 (str_A, str_A%val_1 + str_A%val_2)
contains
subroutine x_2 (str_A, mydim)
type(whatever),intent(in)::str_A
integer::mydim
integer:: ary1(mydim), ary2(mydim), ary3(mydim)
...
end subroutine x_2
end subroutine x

或者如果您至少可以将类型和辅助函数放入包含模块中,您可以执行以下操作:

module t
type whatever ...
contains
pure function mydim(str_A)
integer::mydim
type(whatever),intent(in)::str_A
mydim = str_A%val_1 + str_A%val_2
end function mydim
subroutine y (str_A)
type(whatever),intent(in)::str_A
integer:: ary1(mydim(str_A)), ary2(mydim(str_A)), ary3(mydim(str_A))
...
end subroutine y
end module t

添加是因为您可能没有考虑/意识到它:

或者您可以简单地使用 ALLOCATABLE 数组;这些可以使用任何运行时表达式(包括局部变量)计算的边界进行分配(未声明)。

关于Fortran - 变量赋值和声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69081875/

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