gpt4 book ai didi

multidimensional-array - 复制到另一个可分配数组后,Fortran 不会保留数组的下界/上界

转载 作者:行者123 更新时间:2023-12-04 15:35:12 24 4
gpt4 key购买 nike

这行不通

program main
implicit none
integer :: nx = 3
integer :: ny = 5
integer :: nz = 8

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

allocate(A(nx,0:ny,nz) )
! ...do something with array A and at some point cope a slice of A to B:
B = A(:,:,1)
! in this case B is (1:nx, 1: ny+1)
end program main

上面的代码自动分配B并将A(:,:,1)复制到B。然而,它不保持 0/ny 的下限/上限,而是 B 的下限为 1,上限为 ny+1。

我发现保持 A 2dn-dim 下限/上限的唯一方法是显式分配 B 为:

   allocate(B(nx, 0:ny))
B = A(:,:,1)
! in this case B is (1:nx, 0:ny)

考虑到我有比这个简单示例更多的变量,有没有办法像 B=A(:,:,1) 一样赋值,同时保持 A 的边界 没有显式分配 B

最佳答案

A(:,:,1) 是一个表达式。它有边界(1:nx, 1:ny),两个等级都从1开始。它不是原来的数组,它是一个新的表达式。

然而,即使它是一个有其他下界的数组,自动分配总是从 1 开始分配索引。基本上,右边又是一个表达式。

对于您的情况,您必须明确分配。

关于multidimensional-array - 复制到另一个可分配数组后,Fortran 不会保留数组的下界/上界,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60013236/

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