我是面向对象编程的新手,但这种设计技术对我来说似乎很有趣。我有一个 Fortran 90 CFD 包,不是很复杂,但是已经很难维护和添加新的物理特性或其他特性。正如我现在了解到的那样,它可以降低程序的复杂性,但从我的角度来看,最重要的是 - 数学抽象的内在面向对象。现在,我试图在 CFD 数学和 Fortran 2003 标准中引入的面向对象概念之间进行一些比较。CFD 从引入字段抽象开始。大多数情况下是三维张量场,可以描述为五维数组tensor_field(:,:,:,:,:)。该数组存储张量场的节点值。同样,标量场scalar_field(:,:,:)和vector_field(:,:,:,:)。现在一切都清楚明了。但是当人们开始尝试为这种字段类型开发类时,它就变得棘手了。有一些问题出现:
- 如果该数组是相应类的一部分,那么如何实现grad和div操作?以优雅的数学方式,grad应该是scalar_field类中的过程,它给出vector_field作为其结果。但类似地,div应该在vector_field类中并且应该产生scalar_field。如何在面向对象范式中实现对象之间的这种交互?
- 从数学的角度来看,tensor_field应该是向量和标量类的父类。但是只使用五维数组似乎有点不知所措。我考虑过使用标量类作为父类,但它似乎更像是向量类的元素,而不是父类。
总而言之,我的问题的主要思想是:是否有任何面向对象的 CFD 编程设计模式,可以被广泛接受和测试?也许你可以在这里用伪代码、Fortran 或 C++ 分享你的实现来讨论它们?
最好的问候,伊万 Y。