21_simpleSol
Important
访问 https://aerosand.cn 以获取最近更新。
0. 前言
在上一篇讨论中,我们详细讨论了 SIMPLE 算法,也粗略看了 OpenFOAM 中 SIMPLE 算法的一部分代码片段。
这里,我们将基于对算法的讨论,进行代码实现,理解一些代码的使用。
本文主要讨论
- SIMPLE算法实现
- 计算 cavity 算例
1. 控制方程
控制方程如下
连续方程(质量方程)
动量方程为
依然有如下处理
- 稳态
- 粘性项已经简化
- 不考虑重力
- 密度已经处理
2. 项目准备
终端输入命令,建立项目
ofsp
foamNewApp ofsp_21_simpleSol
cd ofsp_21_simpleSol
cp -r $FOAM_TUTORIALS/incompressible/icoFoam/cavity/cavity debug_case
code .2.1. 说明文件
为项目提供说明文件
## About
简单复现 SIMPLE 算法的求解器。
## Bio
aerosand @ aerosand
## Caution
注意 OpenFOAM 版本。
## Deploy
保证求解器文件完整,并包括 debug_case 文件夹
终端输入命令
./Allclean
./Allrun
## Event
@20260312
- 增加脚本 #done2.2. 脚本文件
我们精简之前的脚本。
终端输入命令,新建脚本
code {Allclean,Allrun}清理脚本 Allclean 如下
| |
运行脚本 Allrun 如下
| |
不同担心脚本,随着讨论深入,我们会不断扩充脚本的内容,尝试和熟悉不同的写法。
Note
使用 chmod +x {Allclean,Allrun} 提升脚本权限。
以后继续使用此脚本即可,除非强调,不再赘述。
3. 项目实现
我们用最简单的代码去实现 SIMPLE 算法。
3.1. 主源码
考虑 20_simple 中的讨论,在主源码中实现 SIMPLE 算法主要框架
| |
可以看到算法主框架和上一篇的讨论一样。
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.7. 运行
求解器项目编译没有问题,直接通过脚本运行即可。
运行项目
./Allclean
./Allrun后处理可视化
paraFoam -case debug_case可以在 paraview 中查看计算结果。
读者可以修改部分代码,探索不同语句的作用。
4. 小结
通过求解器项目的实现和讨论,相信我们现在应该对 PISO 算法和求解器实现有了较为全面的理解。
下一篇,我们将讨论 PISO 算法。
本文完成讨论
- SIMPLE算法实现
- 计算 cavity 算例
支持我们
Tip
希望这里的分享可以对坚持、热爱又勇敢的您有所帮助。
如果这里的分享对您有帮助,您的评论、转发和赞助将对本系列以及后续其他系列的更新、勘误、迭代和完善都有很大的意义,这些行动也会为后来的新同学的学习有很大的助益。
赞助打赏时的信息和留言将用于展示和感谢。
