Ответ 1
Да и нет. Сначала нет:
Соответствующие массивы в Fortran, такие как объявленные следующим образом:
integer, dimension(3,3,4) :: an_array
или как это
integer, dimension(:,:,:,:), allocatable :: an_array
являются регулярными; для каждого измерения существует только одна степень.
Но, если вы хотите определить свой собственный тип для оборванного массива, вы можете, и это относительно легко:
type :: vector
integer, dimension(:), allocatable :: elements
end type vector
type :: ragged_array
type(vector), dimension(:), allocatable :: vectors
end type ragged_array
При таком подходе вы можете выделить elements
каждого из vectors
на другой размер. Например:
type(ragged_array) :: ragarr
...
allocate(ragarr%vectors(5))
...
allocate(ragarr%vectors(1)%elements(3))
allocate(ragarr%vectors(2)%elements(4))
allocate(ragarr%vectors(3)%elements(6))