Я хочу передать часть выделяемого массива в подпрограмму.Исходный массив имеет три индекса.Подпрограмма ожидает массив с двумя индексами.Допустим, я хочу оперировать пятым индексом исходного массива.Я делаю что-то вроде этого, но попадаюсь на последнюю строку:
module lots_of_stuff
...
contains
subroutine process_points(points)
integer, allocatable, intent(inout) :: points(:,:)
! do stuff
end subroutine
end module
program foo
use lots_of_stuff
integer, allocatable :: inpoints(:,:,:)
integer :: lim1, lim2, lim3
! figure out how big inpoints should be (i.e. set lim1, lim2, lim3) then ...
allocate(inpoints(lim1,lim2,lim3)
! populate inpoints then ...
call process_points(????)
Допустим, я хочу обработать элементы в пятом разделе точек.Если я попытаюсь
call process_points(inpoints(:,:,5))
GNU Fortran скажет мне
Error: Actual argument for ‘badpts’ must be ALLOCATABLE at (1)
Если я попытаюсь
call process_points(inpoints(1,1,5))
GNU Fortran скажет мне
Error: Rank mismatch in argument ‘badpts’ at (1) (rank-2 and scalar)
Я думаю, я мог бы скопировать inpoints(:,:,5)
в массив с двумя индексами и отправить его в process_points
, но это выглядит не элегантно.Есть ли способ сделать то, что я пытаюсь сделать?