周末休息。简单聊聊OpenFOAM编程。
这里只是谈谈个人的一些感受,毕竟好久没有再真正意义上的编过OpenFOAM程序了,近些年主要用商业软件去了,OpenFOAM的程序代码几乎都快要忘记光了。
不过话说回来,如果想要深入了解CFD的工作套路,还是很有必要手工撸一撸程序代码。不过我不是很建议撸学校里CFD课程中所讲的那些作业代码,说实话那些只是让我们了解局部算法,实际工业应用中压根就用不上。一个简单的例子,CFD课上多半都会讲到交错网格,然而这玩意儿在成熟的CFD代码中基本上是找不到的。OpenFOAM毕竟是可以工业应用的CFD代码,拿来学习CFD代码是非常不错的选择。有人推荐SU2,但我个人觉得SU2的底层代码没有OpenFOAM优雅,SU2的代码读起来太掉头发,虽然明确是C++,但看起来像是纯C,大量没经过包装的指针指过来指过去,看久了头晕。
下面只聊OpenFOAM编程。
OpenFOAM编程大体上分成两个层级:
-
高层编程。高层编程主要包括求解器开发、工具程序开发等。主要利用OpenFOAM提供的底层代码实现一些特定的功能,总体上属于应用范畴。OpenFOAM本身已经预置了大量的求解器及各种应用程序,多数情况下可以在这些预置程序上进行改造即可。
-
底层编程。主要是涉及到程序底层运行逻辑,如各种插值算法、离散方法、网格计算算法、方程组求解算法等。底层编程的层级要比高层编程更低一些,也要更难一些。底层代码与计算流体力学理论联系较为紧密,需要有比较深厚的理论背景,当然这里讲的底层编程指的是自推算法,仅仅只是植入现有的算法不在此列。
两种编程都有其应用场合,没有谁鄙视谁的说法。一般工程应用的话,高层编程基本够用了,毕竟虽然目前有大量宣称高级的算法,但实际上工程上使用的还是那么几种传统算法。工程应用最多的是针对自己的特定物理问题,开发专用的求解器,专用的边界条件或专用的数据处理算法。话说大多数的工业应用问题,利用OpenFOAM预置的求解器及应用程序基本够用了,要修改也是小幅修改。总体上来说,高层编程难度不是很大。
底层编程主要用于学术界试验算法。开发了个新的算法,需要将其转化为程序并在求解器中验证算法效果,此时需要进行底层编程。其实底层编程难的地方并不是程序,而是算法开发。
如何进入编程状态?个人经验是多撸代码,多调试代码,多总结。注意一定要动手敲代码,而不是拷贝网络上各种示例,只有自己敲代码并编译运行,中间可能会出现各种各样的错误,然后排查错误并解决各种问题,只有这样做才能有进步。光看代码而不动手练习多半是不会有收获的。
(完)
本篇文章来源于微信公众号: CFD之道
评论前必须登录!
注册