25_pimpleSol
Important
访问 https://aerosand.cn 以获取最近更新。
0. 前言
在上一篇讨论中,我们详细讨论了 PIMPLE 算法,也粗略看了 OpenFOAM 中 PIMPLE 算法主框架的代码片段。
这里,我们将基于对算法的讨论,进行代码实现,理解一些代码的使用。
本文主要讨论
- PIMPLE算法实现
- 计算 cavity 算例
1. 控制方程
控制方程如下
连续方程(质量方程)
动量方程为
依然有如下处理
- 粘性项已经简化
- 不考虑重力
- 密度已经处理
注意,动量方程存在瞬态项。
2. 项目准备
终端输入命令,建立项目
ofsp
foamNewApp ofsp_25_pimpleSol
cd ofsp_25_pimpleSol
cp -r $FOAM_TUTORIALS/incompressible/icoFoam/cavity/cavity debug_case
code .2.1. 说明文件
为项目提供说明文件
## About
简单复现 PIMPLE 算法的求解器。
## Bio
aerosand @ aerosand
## Caution
注意 OpenFOAM 版本。
## Deploy
保证求解器文件完整,并包括 debug_case 文件夹
终端输入命令
./Allclean
./Allrun
## Event
@20260313
- 增加脚本 #done2.2. 脚本文件
我们依然使用之前的脚本。以后除非改动,不再赘述。
终端输入命令,新建脚本
code {Allclean,Allrun}清理脚本 Allclean 如下
| |
运行脚本 Allrun 如下
| |
不同担心脚本,随着讨论深入,我们会不断扩充脚本的内容,尝试和熟悉不同的写法。
3. 项目实现
我们用最简单的代码去实现 PISO 算法。
3.1. 主源码
考虑 24_pimple 中的讨论,在主源码中实现 PIMPLE 算法主要框架
| |
可以看到算法主框架和上一篇的讨论一样。
3.2. 场的接入
场的接入 createFields.H 和之前的求解器一样,具体如下
| |
3.3. 动量预测
动量预测在 UEq.H 中,代码如下
| |
3.4. 压力动量修正
压力动量修正在 pEqn.H 中,代码如下
| |
Tip
注意,为了方便理解,这里同样没有进行非正交修正。因为后面使用的 cavity 算例网格简单,所以也没有什么影响。
3.5. 项目Make
如上面讨论的那样,该求解器并没有使用更多的库,所以项目 Make 文件无需额外增加链接的指定。
其中的 Make/files 内容如下
| |
其中的 Make/options 内容如下
| |
3.6. 编译
终端输入命令,编译整个项目
wclean
wmake编译成功,没有问题。
3.7. 测试算例
我们调整拷贝的测试算例,用来测试上述求解器。
控制字典 controlDict 中修改如下
| |
求解字典 fvSolution 中修改如下
| |
其他文件保持不变。
3.6. 编译运行
编译项目
wclean
wmake运行项目
./Allclean
./Allrun后处理可视化
paraFoam -case debug_case可以在 paraview 中查看计算结果。
4. 小结
通过求解器项目的实现和讨论,相信我们现在应该对 PIMPLE 算法和求解器实现有了较为全面的理解。
回顾这几篇算法讨论,我们大概讨论清楚了各种算法的主要思路和简单版本的代码实现。压力速度耦合的思想几乎贯穿了OpenFOAM中各种类型的计算流体动力学求解器。很多情况都是基于这些主要算法进行拓展的。
读者在自动调整代码的时候,比对原生求解器,探索原生求解器其他代码语句,会发现很多被我们讨论所精简掉的内容。
一方面,为了方便理解算法主要思路,我们避免对其他内容的涉及。不用担心,以后我们都会一一讨论解释。另一方面,我们使用 cavity 算例作为调试算例,较为简单,即使没有“边界条件约束”、“一致性检查”等等,也可以计算得到可用的结果。
本文完成讨论
- PIMPLE算法实现
- 计算 cavity 算例
支持我们
Tip
希望这里的分享可以对坚持、热爱又勇敢的您有所帮助。
如果这里的分享对您有帮助,您的评论、转发和赞助将对本系列以及后续其他系列的更新、勘误、迭代和完善都有很大的意义,这些行动也会为后来的新同学的学习有很大的助益。
赞助打赏时的信息和留言将用于展示和感谢。
