我目前正在开发一个大型 Fortran 程序,其中我有一个离散的数值网格,其中包含我在网格范围内跟踪的一系列粒子。为此,我定义了以下三种派生类型:
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