Я создал производный тип для доступа к многомерным массивам. С каждым массивом я связываю имя в массиве nm.Заполнение многомерных массивов
Моя проблема заключается в том, как заполнить значения массива, как только я выделил память.
Первоначальная идея заключалась в использовании в качестве входного сигнала многомерного массива. Однако я могу столкнуться с проблемами памяти, если я храню две копии, поскольку массивы могут быть большими. Лучшей идеей может быть передача одномерного массива с данными по первому измерению и спецификация положения второго и третьего измерений, где должны храниться данные.
Я бы оценил некоторые предложения относительно возможных способов заполнения массивов производными типами, если есть люди, у которых есть опыт работы с большими наборами данных.
Type :: Multia
Character (Len=65) :: nm(3)
Real, Allocatable :: ma(:,:,:)
Real, Allocatable :: mb(:,:,:)
Real, Allocatable :: mc(:,:,:)
Contains
Procedure :: set
End Type Multia
Subroutine set (m, nm, u, i, j)
Class (Multia), Intent (InOut) :: m
Character (Len=65) :: nm
Real, Intent (In) :: u(:)
Integer, Intent (In) :: i, j
If (nm .e. (m% nm(1))) Then
m% ma(:,i,j) = u
Else If (nm .e. (m% nm(2))) Then
m% mb(:,i,j) = u
Else If (nm .e. (m% nm(3))) Then
m% mc(:,i,j) = u
End If
End Subroutine set
Вы не указываете, как распределяются компоненты, но вы считаете 'move_alloc'? – francescalus
Я использую обычный Allocate (m% ma (la, lb, lc)). Не знал о move_alloc. Интересно, как выполняется освобождение. – Charles