Created time
Jul 10, 2025 11:12 AM
type
status
date
slug
summary
tags
category
icon
password
Last edited time
Jul 10, 2025 11:14 AM
前言:
Preface:
参考:感谢原作者们的无私引路和宝贵工作。
前置: OpenFOAM基础算法 SIMPLE & PISO & PIMPLE | 𝓐𝓮𝓻𝓸𝓼𝓪𝓷𝓭 (aerosand.cn)
前面已经讨论了定常标量输运方程的求解、非定常波动方程的求解。如果我们想进一步学习,可能在网上很多教程都推荐从 icoFoam 开始学习,但是当我们打开 icoFoam 求解器的源代码,会发现手足无措,陌生的代码和算法把我们蒙在了窗户纸后面,阻碍我们前进。
事实上,初学者在看 OpenFOAM 标准求解器之前应该有两件事要做
- 理解算法 OpenFOAM算法 SIMPLE & PISO & PIMPLE | 𝓐𝓮𝓻𝓸𝓼𝓪𝓷𝓭 (aerosand.cn)
- 这篇算法讨论其实已经写了不少代码的实现部分
- 直观的 SIMPLE 算法实现
- 没有任何 SIMPLE 以外功能的代码
所以我们仍然不急于看
icoFoam
求解器或者其他标准求解器。下面我们不考虑任何的优化、也不考虑收敛检查等等额外的功能,单从 SIMPLE 算法出发,直观地在 OpenFOAM 中实现该算法的求解器。控制方程如下
$$ \nabla\cdot U = 0 \tag{1}$$
$$
\frac{\partial U}{\partial t} + \nabla\cdot UU - \nabla\cdot(\mu\nabla U) = -\nabla p \tag{2}
$$
建立本文项目文件夹
应用准备
脚本和说明
略。
求解器
createFields.H
文件
/userApp/createFields.H
内容如下主源码
主源码中应用 SIMPLE 算法,实现如下
参考压力解释可见 关于fluent中的压力(一) - 希望先生 - 博客园 (cnblogs.com)
编译
调试算例
system/blockMeshDict
无需修改,我们仍然使用原几何模型和几何网格
system/controlDict
无需修改,我们仍然使用求解控制的设置(步长步数等)
decomposedParDict
和PDRblockMeshDict
不用管,本文用不到
constant/transportProperties.H
无需修改,我们沿用粘度参数
debug_case/0/
初始条件无需修改
fvSchemes
注意各个格式需要至少提供默认值,例如
fvSolution
最后添加语句
controlDict
自行尝试更改计算参数
计算
可以看到计算结果。
整理代码
我们可以把代码整理为如下文件结构
主源码
readfvSolution.H
UEqn.H
pEqn.H
编译计算
仍然使用上面的调试算例,结果是相同的。
小结
我们通过百分百还原数学方程,没有加入其他任何功能,最后我们得到了一个单纯基于
SIMPLE
算法的求解器。欢迎留言讨论,反馈建议和意见,赞助打赏。
Feel free to leave comments, feedback, suggestions, opinions, and donations..

Loading...