gpt4 book ai didi

fortran - 分配具有单一形状的多个数组

转载 作者:行者123 更新时间:2023-12-02 08:06:49 25 4
gpt4 key购买 nike

我正在将几个 rank-3 数组分配为完全相同的形状,我想知道是否可以只指定一次形状。例如,我目前正在做:

program main
implicit none
integer :: long_name_dimension_1 = 3
integer :: long_name_dimension_2 = 5
integer :: long_name_dimension_3 = 8

real, allocatable, dimension(:,:,:) :: A, B, C

allocate(A(long_name_dimension_1,long_name_dimension_2,long_name_dimension_3), &
B(long_name_dimension_1,long_name_dimension_2,long_name_dimension_3), &
C(long_name_dimension_1,long_name_dimension_2,long_name_dimension_3))

end program main

输入起来很烦人,而且很难立即看出这些数组具有相同的形状。在分配第一个数组后,我可以使用 mold 或 source,例如:

allocate(A(long_name_dimension_1,long_name_dimension_2,long_name_dimension_3))
allocate(B, source=A)
allocate(C, mold=A)

但我也不太喜欢这个 - 也许是因为在我看来,它应该是一个 allocate 语句。

我正在寻找如下语法:

allocate( SHAPE :: (long_name_dimension_1,long_name_dimension_2,long_name_dimension_3), &
A, B, C)

我一直找不到。是否存在这样的语法(或类似语法)?

最佳答案

好吧,在最新的(2015 年)Fortran 标准中有分配语句的语法:

allocate statement in Fortran 2015

形状必须跟在分配列表中的每个分配项之后,因此没有任何语法结构可以为所有变量声明一个公共(public)形状,除了SOURCEMOLD 选项。

I could use mold or source, after allocating the first array, but I don't really like this either - perhaps because, in my mind, it should be one allocate statement.

实际上,您不能定义数组的形状并在同一语句中引用它。在同一章的后面,它说:

source-expr shall not be allocated within the ALLOCATE statement in which it appears; nor shall it depend on the value, bounds, deferred type parameters, allocation status, or association status of any allocate-object in that statement.

所以,总而言之,最接近你想要的东西正是你不喜欢的东西:

allocate(A(long_name_dimension_1,long_name_dimension_2,long_name_dimension_3))
allocate(B, C, mold=A)

或者source=A,如果要复制A的内容。


编辑:

这个怎么样:

allocate(A, B, C, mold=reshape([integer ::], &
[long_name_dimension_1,long_name_dimension_2,long_name_dimension_3])

我刚刚检查了 Intel Fortran 并确认它可以工作。一个零大小的数组可以有任何形状似乎很奇怪。不过,我坚信这不是标准的。

关于fortran - 分配具有单一形状的多个数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50710073/

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