Поделиться выделяемыми массивами
У меня есть несколько размещаемых массивов, которые мне нужно разделить между некоторыми подпрограммами. Обычно я просто передаю их в качестве аргументов или, возможно, пишу все в модуле, но боюсь, что это невозможно в моей ситуации.
Я пишу только некоторые собственные подпрограммы и использую подпрограммы, предоставленные и описанные FEM-Solver. Поэтому я не могу изменить аргументы этих подпрограмм или обернуть их в модуль.
Насколько я знаю, также невозможно собрать общие блоки с массивом неизвестного размера во время компиляции.
Есть ли что-то еще, чтобы передать мои массивы?
Обновить:
На данный момент моя программная среда выглядит так:
У меня есть подпрограмма, предоставляемая FEM-программой, которая вызывается после каждого приращения, это вызывает несколько моих подпрограмм, где я вычисляю некоторые значения для каждого узла или для их подмножества.
Чтобы отобразить эти значения в пост-симуляции, я должен передать их другой подпрограмме. Эта подпрограмма вызывается FEM-решателем для каждого узла в конце приращения. Поэтому перенос моего кода на эту подпрограмму приведет к большим накладным расходам.
Моя идея состоит в том, чтобы вычислить значения один раз, сохранить значения в массиве и передать этот массив во вторую подпрограмму, где они будут записаны в базу данных вычислений.
Обновить
Некоторый псевдокод:
Предполагается из поведения программы:
Program FEM-solver
*magic*
call ENDINC(ar1,ar2)
*something*
do NodeID=1,Sum_Of_Nodes
do valueID=1,Sum_Of_User_Computed_Values !(defined in preprocessing)
call nodeval(NodeID,valueID,Value,ar3,...,arN)
end do
end do
*voodoo*
end program FEM-solver
Написано и работает:
Subroutine ENDINC(ar1,ar2)
*Computation of some node values*
*Calling of own Subroutines, which compute more values*
*Writing an array with results values for some/each node(s)*
nodersltArr(NodeID,rslt)=*some Value*
end Subroutine ENDINC
Необходимо записать вычисленные значения в базу данных решений Node:
Subroutine nodeval(NodeID,valueID,Value,ar3,...,arN)
*called for each NodeID and valueID*
value=noderslArr(NodeID,valueID)
end subroutine nodeval