通常,使用过程规划方法(PP)通过有限差分法(FDM)求解偏微分方程是很自然的。也就是说,一 (1) 定义矩阵来存储节点处的属性和节点之间的通量,(2) 基于对控制方程的离散化组装线性系统,(3) 求解线性方程,并且 (4) 进入下一次步。由于每个控制方程在整个域中求解一个属性,因此定义一个属性的矩阵非常方便。
但到目前为止,我意识到使用这种方法的一些(可能)缺点,即用于过程(2)的模块(或子例程)不容易移植到解决另一个基本方程的另一个程序。基本上,如果要解决另一个问题,则需要从头开始(当然矩阵求解器除外)。
有人建议我使用面向对象的编程方法(OOP)来处理这个问题,这种方法对代码进行模块化非常方便,并且模块的可重用性很高。
据我了解,通过 OOP 方法,可能不会定义存储整个域的属性的矩阵,而是定义具有许多属性的每个节点(使用对象)。这种方法在光滑粒子流体动力学和格子玻尔兹曼方法等一些拉格朗日方法中是相当稳健的。但是由于矩阵已经被分解,这种方法可能不太方便求解线性系统。
相比之下,现在很多编程开始支持OOP,甚至fortran也开始支持对象。另外,目前有很多使用OOP概念的FDM、有限元法(FEM)、有限体积法(FVM)包(例如openfoam),只需要定义基本方程,然后脱敏似乎使用相同的代码完成. 我认为使用 PP 处理可能并不容易。我必须对 OOP 的想法有所遗漏。
当然这个问题可能不限于使用有限差分方法,还可以使用 FVM 和 FEM,在我看来,用 OOP 概念来构建似乎更难。
有任何想法吗?提前致谢!
Ps:我一般使用fortran,matlab,R,python来处理CFD和使用PP的多孔介质中的多相流问题。