это не работает
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?
=
. - person John Alexiou   schedule 11.04.2020