本篇简单介绍 OpenFOAM 中的 fvOptions。按照官方的介绍,fvOptions 是一个可以在指定区域内添加源项或者其他约束(比如固定温度,或者多孔介质等)的框架。本篇对 fvOptions 框架的源码做一个浅析。
OpenFOAM 中的 Run Time Selection 机制
source flux 博客 曾经出过一个解释 Run Time Selection(RTS) 机制的系列博文,推荐想理解 RTS 的读者去仔细读读。本篇算是我在读完以后做的一个笔记,以及一些总结,供读者参考。
为什么要将声明和定义分离
OpenFOAM 中的类基本都遵循类的声明和定义分开在不同文件的规则。具体来说,一般是类的声明放在 “xxx.H”,类的成员函数的具体定义 “xxx.C”,如果有内联函数(inline),则还有 “xxxI.H”,并且,”xxx.H” 文件的最后会有 #include "xxxI.H"
。这么做不仅是一种代码规范,真正的目的应该是为了防止重复定义的问题。本篇博文用一个简单的例子来说明这个问题。
OpenFOAM 中的单相流湍流模型之SpalartAllmaras
本篇简要分析不可压缩的 SpalartAllmaras 模型的代码。主要内容包括模型输运方程的代码说明,以及一些使用方面的细节。
两个简单的随时间变化的边界条件
这一篇里介绍OpenFOAM自带的两个简单的随时间变化的边界条件: uniformFixedValue
和 flowRateInletVelocity
。
swak4Foam 如何用于名字形如 alpha.water 的场?
swak4Foam 的 groovyBC
边界条件提供了一种很灵活的用表达式定义边界条件的方法。但是,从 OpenFOAM-2.3 开始,两相流求解器如 interFoam
和 twoPhaseEulerFoam
开始采用类似于 alpha.water
的场,这种场名默认情况下 groovyBC
是无法正确识别的,因为 .
在 swak4Foam 表达式中有特殊的作用。
所幸的是,开发人员也早就意识到这个问题了,并给出了解决方案,那就是用 aliases
。这个东西真是不知道就很难,知道了就很简单,下面举一个我实际用过的例子:
1 | solid_inlet_left |
我想我应该不用再解释什么。
主要参考这个网页。
OpenFOAM 中的单相流湍流模型之一
相信有不少 OpenFOAM 用户有添加湍流模型的需求,我自己最早用 OpenFOAM 完成的一项工作就是在其中添加了一些单相流的湍流模型,并进行了一些计算。这里将我对单相湍流模型代码框架的理解记录下来,供大家参考。本系列将包含三篇,第一篇介绍湍流模型类的继承派生关系,第二篇具体分析几个 OpenFOAM 中带的湍流模型,并给出修改或增加新模型的方法,第三篇分析湍流模型的运行时选择机制(Run Time Selection)的原理。
blockMesh 的新功能:multi/sectional grading in a block
从 OpenFOAM-2.3.x 的 “commit cf370883644ec59782be375041b2434eb3e2c4ed“ 开始,blockMesh
有了一项新功能:multi/sectional grading in a block。这项功能说起来很简单即可以在同一个block里面设置多个方向的大小渐变网格。举个例子,假设你想画一个简单的二维槽道流网格,你希望两边靠近壁面处的网格更密一点,而中心的网格稀疏一点。以前版本的 blockMesh
由于只支持让网格大小在某一个方向上渐变(通过设置 simpleGrading),要实现上述网格,你需要将整个槽道分成两个block,然后分别设置 simpleGrading。现在有了 “multi/sectional grading”以后,只需要一个block,并设置好simpleGrading便可实现了。下面解释一下新版 blockMesh
具体设置,并以一个二维方腔流例子来说明。
OpenFOAM-2.3.x 中的 twoPhaseEulerFoam 解析之 TurbulenceModel
在 kineticTheoryModel
类的解读时前面提到过, kineticTheoryModel
使用了跟湍流模型一样的接口。这一篇,就来看一下 twoPhaseEulerFoam
中的湍流模型。