Массив входных данных формируется основной программой, назавем его 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