제 문제는 계산을하고 이전에 크기를 모르는 배열을 생성하는 서브 루틴이 있다는 것입니다. I 알았을 최상의 솔루션이 type(ragged)
다양한 분리 된 할당 배열 작업 (station%trac
)을 사용 하였다 : 그러나1 차원 배열에 비정형 배열 만들기
module ragged_module
type ragged
real,allocatable,dimension(:)::trac
end type ragged
end module ragged_module
program chrag
use ragged_module
implicit none
type (ragged), allocatable, dimension (:) :: station
(...)
call calculation(station, othervariables)
call calculus(station1D,othervariables) !station need to be seen as an 1D array here
end program chrag
를, I는 일차원 배열과 같은 가변 station
을해야 (다른 루틴에 전달할) . 2D 배열로 작업하는 경우 메모리 액세스가 어떻게되는지 알 수 있기 때문에 쉽습니다. 그러나 유형의 경우에는 찾지 못했습니다.
쉬운 방법이 있나요? 또는 1D 할당 배열을 선언하고 필요한 길이를 할당 한 후 station
의 각 구성 요소 값을이 새로운 1D 배열에 전달해야합니까? 내 관심사는 거대한 배열로 작업하고 있기 때문에 나의 오래된 해결책은 move_alloc
을 사용하여 내 코드를 매우 느리게 만들었 기 때문이다.