最近有道友在后台提到OpenFOAM编程的问题,抱怨说OpenFOAM编程很难,询问如何快速入坑。这问题其实挺难回答的,OpenFOAM是一个规模庞大的C++类库,快速入坑似乎难度挺大。
想要快速地进入状态,下面是我个人的一些经验。
1 C++学习
这个是基本功,有C语言基础的话,大概需要个把月的时间。啥编程基础都没有的话,会需要更多的时间。但也说不准,也有天赋异禀之人,个把星期搞定也说不准。学习C++的目的是为了能读懂OpenFOAM代码。然而C++实在太过于复杂,想要精通C++语言,没有个三五年的时间基本不可能。但是若只是为了能够读懂OpenFOAM代码,似乎并不需要掌握全部的C++特性。
个人觉得下面的一些C++基础内容必须了解:
-
基础语法。最基础的语法,有C语言基础可以略过。随便找本C++教材看前面三四章基本就可以了。包括变量定义、控制结构、函数等。 -
指针与引用。尤其是引用,在OpenFOAM代码中随地可见,尤其是带有const的引用,简直会把人迷惑死。反而指针用得不多,不过需要了解指针的使用方法,不至于搞晕。 -
类与对象。了解类的定义与对象的创建方法。 -
类继承与多态。了解类继承的定义方法,以及虚函数的概念。 -
函数重载。了解函数重载的定义方法与使用方法。 -
函数模板与类模板。这个在OpenFOAM中遍地都是,泛化与特化搞得新手死去活来。
另外一个问题,OpenFOAM持续的时间很长,在其持续期间,C++制定了好多个版本,建议看看新标准的C++,如C++11、C++14、C++17等。有一些奇奇怪怪的语法,很有可能是新标准中添加的。
C++还好,市面上的教材很多,随便找一本就可以了。OpenFOAM就麻烦了,目前尚未发现有专门讲OpenFOAM编程的教材。
2 OpenFOAM文档
这里的文档不是UserGuide,而是API文档。想要使用OpenFOAM编程,首先必备API文档。
-
org版的在线文档:https://cpp.openfoam.org/v9/ -
com版的在线文档:https://www.openfoam.com/documentation/guides/v2112/api/index.html
也可以从安装文件夹中利用doxygen
生成本地文档。
采用下面的步骤生成本地文档:
-
修改doc文件夹的权限,简单起见可以使用下面的命令 sudo chmod 777 /doc -R
。若没有doc文件夹,可以去官方仓库下载 -
利用命令 sudo apt install doxygen
安装doxygen -
进入 doc/Doxygen
文件夹,运行命令./Allmake
即可生成帮助文件,存放在html文件夹下 -
若无法生成图片,可以使用下面的命令 sudo apt-get install graphviz
安装graphiviz,再重新执行第3步
3 环境搭建
这个倒不是必须的,不过弄好的话可以帮助查看代码。
这里推荐使用vs code插件OFextension
,该插件能实现编程时代码智能提示,以及查看代码的原始定义与声明,非常方便。
如下图所示,鼠标放到特定字符上会有其定义方式,还支持自动跳转到原始定义位置,查看代码非常方便。
4 撸代码
想要熟练掌握程序设计,撸代码是必不可少的过程。一开始不知道怎么撸,那就抄代码,比如抄求解器代码,从简单的抄起,如icoFoam,抄上五遍八遍自然会有新的。当然也可以上网找一些OpenFOAM例程照着撸,github中有很多此类例程。
等到能够默写代码了,就开始着手读代码,挨句挨句的解读,这时候不用管程序背后的数学问题,只是从程序设计的角度去理解代码结构就行,搞清楚求解器的结构,顺便熟悉各种数据调用方式。看不懂的地方就查文档,正常人坚持一两个月基本上就差不多了。其实OpenFOAM的求解器程序结构还是很简单的,无非就是一个读取数据、数据处理、数据输出的过程。
当能够顺利读懂求解器代码后,就可以开始了解物理数学上的问题了。主要是控制方程和各种离散算法,这个其实已经和编程没有多大关系了。当然如果走到这一步,可以试着找一些涉及到算法的文献,并尝试着将文献中的算法植入到求解器中去。没事儿找本计算流体力学的书看看,可能会有帮助。
撸代码要坚持不懈,一天不写手会生疏。OpenFOAM的类库太庞大太杂了,长时间不用会忘记。
(本文完)
本篇文章来源于微信公众号: CFD之道
评论前必须登录!
注册