1

私はFortranが初めてです。ポインターの配列に関する問題に直面しています。Fortran90 でコードを書いています。データのサイズが大きいため、ポインターの配列を使用する必要があります。擬似コードはこんな感じ

type  ::a
   integer   ::Id
   real       ::Coords(3)
end type a
type ::b
    type(a),pointer   ::Member 
end type b
type(b),allocatable   ::data(:)
integer               ::i
!allocation and assigning
allocate(data(n))
do i=1,n
    allocate(d(i)%member)
    d(i)%member%Id = i
    d(i)%member%Coordinates(:) = i*2.0
end do

!Some stuff using data

!De allocation
do i=1,n
    deallocate(d(i)%member)
end do
deallocate(data)

この方法でポインターの配列の割り当てを解除すると、非常に時間がかかることがわかりました。数百万のデータセットを扱う場合、これを行うにはかなりの時間がかかります。これをしないと、メモリが解放されません。プログラムを終了せずに、新しいサイズ (疑似コードの新しい n 値) を割り当ててデータを再利用したい。したがって、配列の割り当てを解除せずに逃げることはできません。そうしないと、次の作業を行うための十分なメモリが利用できなくなります。

Fortranでポインターの配列の割り当てを解除する他の方法があるかどうか、誰かが私に提案できますか? または、Fortran プログラムで大きなデータセットを処理できますか?

ありがとう

4

0 に答える 0