Массив входных данных формируется основной программой, назавем его input, передавать его нужно в subroutine(input, output). Подпрограмма выдает данные и делаем input=output, дальше основная программа что то делает с input и размер input может измениться. В этом и трудность, как согласовать размеры.
-- Пт мар 18, 2011 07:45:55 --Вот еще тест этой же проблемы,
Код:
program test
 implicit none
 real, dimension(:), allocatable :: a
 integer :: k=10, j
 
 do j=1,4,1
   allocate(a(k))
   a=0.0
   write(*,*) a
   deallocate(a)
   k=k-1
 end do
end program test
Здесь все работает, размер a меняется, проблем нет. Если добавить subroutine как ниже. То ошибка будет:
D is a dummy argument and so cannot be ALLOCATABLE
А обидно, что не может. Вот я и пытаюсь узнать как можно это сделать.
Код:
program test
 implicit none
 real, dimension(:), allocatable :: a, b, c, d
 integer :: k=10, j
 
 do j=1,4,1
   allocate(a(k))
   allocate (b(k))
   call check(a,b)
   write(*,*) a
   deallocate(a)
   deallocate(b)
   k=k-1
 end do
contains
subroutine check(c , d)
  implicit none
  real, dimension(:), allocatable :: c , d
  d=c
end subroutine
end program test