Created time
Jul 10, 2025 11:11 AM
type
status
date
slug
summary
tags
category
icon
password
Last edited time
Jul 10, 2025 11:14 AM
前言:
Preface:
参考:感谢原作者们的无私引路和宝贵工作。
前置: OpenFOAM开发编程基础07 第一个求解器 | 𝓐𝓮𝓻𝓸𝓼𝓪𝓷𝓭 (aerosand.cn)
计算流体力学的通用基本方程为
$$\frac{\partial}{\partial t}(\rho \phi) + \nabla \cdot (\rho U\phi) = \nabla\cdot(\Gamma\nabla\phi) + S_{\phi}$$
求解的波动方程如下
$$\frac{\partial^2 A}{\partial t^2} = \nabla \cdot (c^2 \nabla A)$$
我们依然用
A
表示待求的物理场。新建本文的项目文件夹
应用准备
脚本和说明
略。
求解器
createFields.H
场文件
/userApp/createFields.H
接入 方程所需要的场 A
和参数 c
。以后在开发大型求解器的时候,
createFields.H
文件会有相当多行代码,创建的场的功能各不相同,读取的字典参数的功能也是各不相同。建议可以在文件开头写一个简单的“目录”。这样子可以通过搜索直达内容分区。主源码
文件
/userApp/08_01_waveSol.C
其实很简单,就是构建一个时间推进,迭代内,每个时间步求解方程即可。编译
调试算例
system/blockMeshDict
无需修改,我们仍然使用原几何模型和几何网格
system/controlDict
无需修改,我们仍然使用求解控制的设置(步长步数等)
decomposedParDict
和PDRblockMeshDict
不用管,本文用不到
transportProperties
文件
debug_case/constant/transportProperties
内容修改如下初始条件
基于初始条件
p
修改得到 A
,内容如下setFieldsDict
使用命令创建一个模板到调试算例下
修改文件
/debug_case/system/setFieldsDict
,内容如下- 注意调试算例的
blockMeshDict
中设置了scalar 0.1;
,几何尺寸有了缩放,所以在设置box
的时候要注意坐标点
- 设置
boxToCell
中box
的两个角点坐标
- 注意,
setFields
只重设了初始场,区别于场里的源
。
fvSchemes
增加时间项二阶偏导的数值计算离散格式,其他不变
fvSolution
也可以写成 A|AFinal ,然后一起设置
controlDict
随意设置计算时间长短等。
脚本
因为额外使用了
setFields
命令,且该命令会更改初始条件,所以需要修改脚本。caserun
内容如下caseclean
内容如下计算
使用
paraview
可以看到中心点场随着时间的波动变化。小结
本文讨论求解了一个非定常波动问题。我们通过注释和代码拆出,尝试把求解器结构写的更加清晰易读。首次使用了 OpenFOAM 自带的工具
setFields
(本质上也是一种 应用
)。需要注意的是,因为待求的波动方程简单,所以本文求解器对偏微分方程的求解并没有使用任何的算法,只是简单的在每个时间步求解。实际开发中,更多的问题是多个物理场耦合,所以我们需要一些数值算法来求解偏微分方程组,而不是单个偏微分方程。
虽然本系列是开发编程系列,但是在正式进入 OpenFOAM 标准求解器开发前,我们在下一次讨论中不得不讲一下 OpenFOAM 的基础求解算法,主要是
SIMPLE, PISO, PIMPLE
。虽然系列讨论追求给初学者带来“连续”“逐深”“有方向”“不间断”的学习体验,但这是避不开的一环。
欢迎留言讨论,反馈建议和意见,赞助打赏。
Feel free to leave comments, feedback, suggestions, opinions, and donations..

Loading...