这不起作用
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) 一样分配,并且在不显式分配 B 的情况下保持 A 的边界?