Это не работает
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?