Если вы объявляете массив размещаемым, вы используете отложенную форму в реальной форме,
allocatable :: labelArray(:,:)
или
real,dimension(:,:),allocatable :: labelArray
с числом двойных двоеточий, означающих ранг (количество ваших индексов) вашего массива.
Если массив нераспределенный, вы используете
allocate(labelarray(shapeyouwant))
с правильным количеством индексов.Например, allocate(labelarray(2:3,-1:5))
для массива с индексами от 2 до 3 в измерении 1 и от -1 до 5 в измерении 2.
Для изменения измерения сначала необходимо освободить массив, используя
deallocate(labelArray)
Чтобы перераспределить выделенный массив в новую форму, вам сначала нужно выделить новый массив с новой формой, скопировать существующий массив в новый массив и переместить ссылку на старый массив в новый массив, используя move_alloc()
.
call allocate(tmp(size_old+n_enlarge))
tmp(1:size_old) = array(1:size_old)
call move_alloc(tmp, array)
Старый массив освобождается автоматически при перемещении новой ссылки на массив на move_alloc()
.
Fortran 95 освобождает массивы автоматически, если они выпадают из области видимости (конец их подпрограммы, например).
Fortran 2008 имеет приятную функцию автоматического распределения при назначении.Если вы говорите array1=array2
и массив1 не выделен, он автоматически выделяется, чтобы иметь правильную форму.