gpt4 book ai didi

fortran - 用户定义类型作为基本子例程的参数?

转载 作者:行者123 更新时间:2023-12-02 18:24:58 25 4
gpt4 key购买 nike

在我的代码中,我有一个基本子例程,基本上如下所示:

elemental subroutine calc_stuff (x, a, b, c)
real, intent(in) :: a, b, c
real, intent(out) :: x

x = a/b + c

end subroutine calc_stuff

我改成这样:

elemental subroutine calc_stuff (x, a, t)
real, intent(in) :: a
type(mytype), intent(in) :: t
real, intent(out) :: x

x = a/t%b + t%c

end subroutine calc_stuff

其中mytype是包含一些标量实数整数的类型,以及实数,可分配大批。成员bc实数,使得第二个版本与第一个版本基本相同。

第二个版本可以在各种编译器(Cray、Intel、NEC、GFortran)上正常编译,但现在我读到基本子例程的标准状态:

All dummy arguments must be scalar, and must not have the ALLOCATABLE or POINTER attribute.

因此,在将用户定义类型传递给基本子例程时,我的代码是否不符合标准,但所有编译器“知道”我想要什么,因为我只使用类型中的标量而不是可分配数组?或者我是否误解了标准的措辞,而第二个版本一切都很好?

最佳答案

虚拟参数 t 是标量1,没有指针属性,也没有可分配属性。它不违反条件。

类型组件的属性与类型本身的属性无关。

<小时/>

1 属于派生类型并不一定会使对象成为非标量。即使有多个组件或数组组件,对象本身可能仍然是标量。派生类型数组是包含该类型元素的数组。还可以考虑像 character(len=3) name 这样的字符对象:它是标量,但由多个子字符串组成。

关于fortran - 用户定义类型作为基本子例程的参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51278694/

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