私は現在、グリッドの境界内で追跡する一連の粒子を含む離散数値グリッドを持つ大規模な Fortran プログラムに取り組んでいます。これを行うために、次の 3 つの派生型を定義しました。
type :: particle
real(pr), dimension(3) :: r = 0.0_pr ! position
real(pr), dimension(3) :: p = 0.0_pr ! momentum
end type particle
type :: rcell ! position cell
integer, dimension(6) :: bpoints = 0 ! cell grid points
integer :: np = 0 ! number of particles in cell
type(particle), dimension(50) :: parts ! particles in cell
end type rcell
type :: pcell ! momentum cell
integer, dimension(6) :: bpoints = 0 ! cell grid points
integer :: np = 0 ! number of particles in cell
end type pcell
...
type(rcell), dimension(:), allocatable :: rbin ! position space bins
type(pcell), dimension(:), allocatable :: pbin ! momentum space bins
...
allocate(rbin(100))
allocate(pbin(100))
まず第一に、これは派生型の許容可能な使用法ですか (つまり、派生型の配列を含む派生型の割り当て可能な配列を持つこと)? コードは、gfortran 4.8.3 を使用して正常にコンパイルされます。
ただし、Fedora で gdb 7.7.1 を使用してコードをデバッグしようとすると、奇妙な問題が発生します。rbin
配列の要素のデータを調べようとすると(たとえばを使用して)、データを(たとえばに)割り当てたにもかかわらず、print rbin(10)%bpoints
gdb は常に出力されます。たとえば、配列の要素のデータを見ると、期待どおりの結果が得られます。誰かがこの問題について洞察を持っていますか?(0, 0, 0, 0, 0, 0)
bpoints
rbin(10)%bpoints = (/1,2,1,2,1,2/)
pbin
print pbin(10)%bpoints