构建 N 个可分配数组
Building up N allocatable arrays
我想建立一个(N)个可分配数组,但这些数组的总数和每个数组的大小事先并不知道。这些信息只能从文件中读取。
有没有办法从文件中读取每个数组的N和大小;然后,在 Fortran 代码中自动构建这样的 N 个可分配数组?
任何 suggestion/hint 不胜感激。
您需要一个“锯齿状二维数组”,这是 Fortran 本身不支持的。相反,您可以使用包含数组的 user-defined 类型自己构建一个。例如,
module arrays
implicit none
type :: Array1D
integer, allocatable :: contents(:)
end type
type :: Array2D
type(Array1D), allocatable :: contents(:)
end type
end module
那么你的程序应该是这样的
type(Array2D) :: foo
integer :: N,M
integer :: i
! Read `N` from the file.
N = ...
allocate(foo%contents(N))
do i=1,N
! Read the size of the i'th array from the file.
M = ...
allocate(foo%contents(i)%contents(M))
! Read the i'th array from the file.
foo%contents(i)%contents = ...
enddo
我想建立一个(N)个可分配数组,但这些数组的总数和每个数组的大小事先并不知道。这些信息只能从文件中读取。
有没有办法从文件中读取每个数组的N和大小;然后,在 Fortran 代码中自动构建这样的 N 个可分配数组?
任何 suggestion/hint 不胜感激。
您需要一个“锯齿状二维数组”,这是 Fortran 本身不支持的。相反,您可以使用包含数组的 user-defined 类型自己构建一个。例如,
module arrays
implicit none
type :: Array1D
integer, allocatable :: contents(:)
end type
type :: Array2D
type(Array1D), allocatable :: contents(:)
end type
end module
那么你的程序应该是这样的
type(Array2D) :: foo
integer :: N,M
integer :: i
! Read `N` from the file.
N = ...
allocate(foo%contents(N))
do i=1,N
! Read the size of the i'th array from the file.
M = ...
allocate(foo%contents(i)%contents(M))
! Read the i'th array from the file.
foo%contents(i)%contents = ...
enddo