构建 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