通过前面 10 篇讨论,理想的状态是,虽然读者还有一些小困惑(大部分已经提到会在以后的分享中继续讨论),但是已经扫除了大障碍,对 OpenFOAM 和求解器有了整体概念,做好了去学习 OpenFOAM 标准求解器(ofss 系列)的准备,之后可以在标准求解器基础上修改得到能解决自己专业问题的求解器。

在这里仍然有几个问题想和读者讨论

有没有必要学习 OpenFOAM?

如果没有修改求解器的需求,其实不一定要学 OpenFOAM,商业软件也可以做到很多计算。学习 OpenFOAM 的时间久、难度大、前期收益低,需要综合考虑做个取舍。

有没有必要深挖 OpenFOAM 源代码?

OpenFOAM 的学习和使用大概可以分成以下几种:

第一层就是,直接使用 OpenFOAM 自带的标准求解器,用来求解自己专业的较为复杂的问题,可能是更真实的几何,可能是更复杂的网格,也可能是使用 OpenFOAM 更专业的物理模型等等。

然而有时候会发现自己的专业问题耦合的物理场过于复杂,或者涉及到的运动形式很独特,亦或是边界条件的特殊,所以不得不考虑对 OpenFOAM 标准求解器做一些修改以达成我们的目的。这算是第二层的使用。

还有一些人的专业偏向算法开发和求解器开发,可能就需要更加深入 C++ 代码技巧和算法原理,而不是在具体的问题上。高级开发算是第三层的使用

我想对于大部分奔着既想解决复杂问题、又想尽可能掌控这些问题细节的人来说,OpenFOAM 是比较好的解决方案之一。对于我们来说,更多的可能是第二层的使用,偶尔涉及第三层使用,过度深挖代码是很容易迷失方向的。

OpenFOAM 的代码更新这么多年,专家学者们投入时间编写、实现和开发算法,已经相当的抽象、深入和复杂。使用代码中 C++ 声明中的成员数据和成员方法,接受 C++ 实现中细节的未知,这些都是十分必要的,不要追求完美,不要追求一挖到底,否则很容易迷失在代码中,从而耽误自己的主要任务和宝贵时间。

线性化学习?

说实话,这其实是相关系列的初衷,希望能指一条线性路径从而尽可能节约时间使新手尽快上手。但是必须要说,越后期的学习越难以线性。太多的知识点互相关联,互相帮助理解。对于普通人来说,一本书看两三遍是很正常的。在同一个大问题上找了好几本书交叉来看也是很正常的事情。所以,要允许困惑存在,在前进的同时不断回顾,一点一点解决自己的困惑,夯实自己对前前后后知识点的理解。

更新和勘误

本系列讨论还有不少表达需要更加严谨,可能还有一些未纠正的错误需要修正。在不停勘误的过程中,还有很多的细节可以在后续补充。

后面会在目前讨论的基础上维护更新。公共平台勘误限制很多,比如微信公众号每篇文章只能修改一次,而且只能在原文字基础上修改 20 个字,所以更新和勘误会在第一时间给到个人网站 aerosand.cn 。此外,配套的上手视频也将上传 bilibili 视频网站。

由衷希望系列讨论能对大家有一些帮助。