我有一些可分配的数组,我需要在一些子例程之间共享。我通常会将它们作为参数传递,或者将所有内容都写在一个模块中,但恐怕这在我的情况下是不可能的。
我只编写一些自己的子程序并使用 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
需要,将计算的值写入节点解决方案数据库:
Subroutine nodeval(NodeID,valueID,Value,ar3,...,arN)
*called for each NodeID and valueID*
value=noderslArr(NodeID,valueID)
end subroutine nodeval