Выделить массив из массива размеров
Допустим, у меня есть массив измерений, объявленных так:
integer, dimension(5) :: dims
dims = (/ 5, 6, 7, 8, 9 /)
Как я могу наиболее просто использовать этот массив для выделения другого массива, используя элементы dims
указать размер соответствующих размеров? Скажем, второй массив объявлен так:
real, dimension(:,:,:,:,:), allocatable :: dset
Почему я не могу сделать следующее?
allocate (dset(dims(:)))
я получил Error: Rank mismatch in array reference
когда я пытаюсь скомпилировать.
Я понимаю, что могу сделать это:
allocate (dset(dims(1), dims(2), dims(3), dims(4), dims(5)))
Но я ищу что-то более легко расширяемое.
1 ответ
Вы не можете написать allocate(dset(dims(:)))
именно по этой причине компилятор дает: они имеют разные ранги. Если бы вы должны были напечатать shape(dims)
вы бы увидели 5
на экране; если бы вы должны были напечатать shape(dset)
вы бы увидели либо 0 0 0 0 0
или же 5 6 7 8 9
(зависит, выделил ли ты это или нет); dims
является массивом ранга 1, dset
является массивом ранга 5
В общем, единственный способ выделить выделяемое - это явный метод, который, по вашему мнению, не может быть расширен.