Sui's Blog

Sui's Blog

我还是用了SnappyHexMesh
发表于2026-07-18
我是汪汪汪。。就是这个壁面,用cfmesh怎么搞都不能完整的识别壁面和交界处。然后SnappyHexMesh 就完美的识别了,当然也是经历了一番波折的。 我遇到过下面的情况 在cfMesh 和 SnappyHexMesh上都有。但是SHM上的设置更加明确,还有网上也有更多教程,在我不生成太夸张的网格的情况下,SHM生出。表面完整识别出来,网格尺寸也都还行。 现在还是有问题的,addLayers并没有完全成功,不知道怎么回事,不过大体上问题解决了,先跑起来,然后再细调 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221...
C++ 中派生类引用与基类引用的隐式转换
发表于2026-07-16
C++ 中派生类引用与基类引用的隐式转换转自:https://xiaopingqiu.github.io/,侵删 仅仅觉得都挺有用的,所以转发一下。仅仅是想做个备份,希望不要某天淹没在互联网的长河里在读 OpenFOAM 代码过程中,有一类应用初看之下觉得很费解,比如 OpenFOAM-2.3.x 的 twoPhaseEulerFoam,createFields.H 有这么一段: 12345phaseModel& phase1 = fluid.phase1();phaseModel& phase2 = fluid.phase2();volScalarField& alpha1 = phase1;volScalarField& alpha2 = phase2; 乍看之下,感觉有点奇怪:怎么能将 phaseModel 类的引用直接赋值给 volScalarField 类的引用呢?后来查看了一下 phaseModel 类的定义,发现原来 phaseModel 类是 volScalarField 类的派生,由此上面代码就好理解了,无非是将派生类引用赋...
OpenFOAM 不可压缩湍流模型的 divDevReff 函数
发表于2026-07-16
OpenFOAM 不可压缩湍流模型的 divDevReff 函数转自:https://xiaopingqiu.github.io/,侵删 仅仅觉得都挺有用的,所以转发一下。仅仅是想做个备份,希望不要某天淹没在互联网的长河里 3.0 版本之前,OpenFOAM 的单相流求解器如 pisoFoam 的动量方程中调用的是湍流模型的 divDevReff 函数来考虑雷诺应力项的作用。只是,细究起来,这个函数似乎有点小问题,本篇来探讨一下这些小问题。 OpenFOAM 中单相不可压缩求解器中,雷诺应力项调用的是湍流模型中的 divDevReff 函数。这个函数的返回值为$$\nabla \cdot(\nu_{eff}\nabla U)+\nabla \cdot\left [\nu_{eff}\nabla U^\mathrm{T}-\frac{1}{3} \nu_{eff} (\nabla \cdot U) \mathbf{I} \right ]$$这里有两个疑问,第一是为什么是 $\frac{1}{3}$ 而不是 $\frac{2}{3}$,对应到代码,即为什么用 dev 函数而不是 de...
OpenFOAM 中求解 ODE 一例
发表于2026-07-16
OpenFOAM 中求解 ODE 一例转自:https://xiaopingqiu.github.io/,侵删 仅仅觉得都挺有用的,所以转发一下。仅仅是想做个备份,希望不要某天淹没在互联网的长河里 本篇介绍如何编写一个小程序来调用 OpenFOAM 的 ODE 求解器来求解任意常微分方程的初值问题。 1. 数学背景首先简要看一下涉及的数学背景。对于一阶的常微分方程,$$y’=f(x,y), \quad x\in[a,b] \y(a)=y_0$$常微分方程,如果存在解析解的话,其解应该是一个函数 $y=f(x)$。然而,大多数常微分方程是没有解析解的,只能数值求解。数值方法得到的,是一系列的 $x_0, x_1, \cdots x_n$ 对应的函数值 $y_0, y_1, \cdots y_n$。 常用的数值解法有: 显式欧拉法这种方法最简单,将区间 $[a,b]$ 分成 n 份,则得到步长 $h=(b-a)/n$。以 $y(a)=y_0$ 为起点,通过下述迭代,$$y_{m+1} = y_m+hf(x_m,y...
OpenFOAM 中的 Run Time Selection 机制
发表于2026-07-16
OpenFOAM 中的 Run Time Selection 机制转自:https://xiaopingqiu.github.io/,侵删 仅仅觉得都挺有用的,所以转发一下。仅仅是想做个备份,希望不要某天淹没在互联网的长河里source flux 博客 曾经出过一个解释 Run Time Selection(RTS) 机制的系列博文,推荐想理解 RTS 的读者去仔细读读。本篇算是我在读完以后做的一个笔记,以及一些总结,供读者参考。 OpenFOAM 中包含各个 CFD 相关的模块,每个模块,从 C++ 的角度来看,其实都是一个类的框架。基类用作接口,一个派生类则是一个具体的模型。OpenFOAM 中的模块广泛使用 RTS 机制,因此 OpenFOAM 的求解器中,只需要设定模型的调用接口。算例具体使用的是那个模型,则是在运行时才确定的,而且可以在算例运行过程中修改选中的模型。下面通过一个 source flux 博客 提供的代码,来解读 RTS 机制的实现原理。为了方便解读,这里将代码摘录如下,代码所有权归 source flux 博客 所有: 12345678910111213...
OpenFOAM 中的单相流湍流模型之SpalartAllmaras
发表于2026-07-16
OpenFOAM 中的单相流湍流模型之SpalartAllmaras转自:https://xiaopingqiu.github.io/,侵删 仅仅觉得都挺有用的,所以转发一下。仅仅是想做个备份,希望不要某天淹没在互联网的长河里本篇简要分析不可压缩的 SpalartAllmaras 模型的代码。主要内容包括模型输运方程的代码说明,以及一些使用方面的细节。 湍流模型代码实例这一部分分析几个 OpenFOAM 里自带的湍流模型, 并探讨修改或者添加新湍流模型的方法。 1 SpalartAllmaras 模型1.1. 模型分析SpalartAllmaras 模型是一方程模型,它只需要求解一个输运方程。OpenFOAM 中的 SpalartAllmaras 模型是在原始论文[1] 的基础上,引入了 Ashford [2] 对这个模型的修正。下面来看这个模型在 OpenFOAM 中的实现,代码位于 src/turbulenceModels/incompressible/RAS/SpalartAllmaras首先是头文件, SpalartAllmaras.H头文件开始,声明了一个类:Spala...
OpenFOAM 中的壁面函数(一)
发表于2026-07-16
OpenFOAM中的壁面函数(一)转自:https://xiaopingqiu.github.io/,侵删 仅仅觉得都挺有用的,所以转发一下。仅仅是想做个备份,希望不要某天淹没在互联网的长河里 本系列来看看 OpenFOAM 中的壁面函数。壁面函数的本质,是边界条件。这里主要来看看壁面函数的基本原理,OpenFOAM 中实现了的壁面函数,以及选择壁面函数的一些参考依据。 1. 壁面函数的基本原理湍流模拟中,需要对近壁区域进行处理。一般来讲,壁面处理方法包含两类,一类是使用很细的网格,使靠近壁面的第一层网格在粘性层内($y^+ <1$),然后里可以直接解析到粘性层的低雷诺湍流模型;另一类,不直接解析粘性层,而是将第一层网格设置在对数区($y^+> 30$),然后用经验公式来将粘性层和对数区关联起来。下图是一个典型的壁面附近的 $U^+ \text{-} y^+$ 关系图。壁面律图片来自 Wikipedia:Law of the wall 。在粘性层,满足如下关系$$u^+ = y^+$$而在对数区,则满足$$U^+ = \frac{1}{\kappa...
OpenFOAM 中的壁面函数(三)
发表于2026-07-16
OpenFOAM 中的壁面函数(三)转自:https://xiaopingqiu.github.io/,侵删 仅仅觉得都挺有用的,所以转发一下。仅仅是想做个备份,希望不要某天淹没在互联网的长河里 这篇来看看计算湍动能 $\varepsilon$ 和 $\omega$ 的壁面函数。 3. 湍动能耗散 $\varepsilon$ 的壁面函数本篇来看看 OpenFOAM 中的 epsilonWallFunction,共有两个: epsilonWallFunction 和 epsilonLowReWallFunction。 (1). epsilonWallFunction epsilonWallFunction 代码比前面的 kqRWallFunction 复杂多了,主要原因在于这里需要得到的是 epsilon 在临近网格的值,而且,需要考虑包含两个边界面的网格。这里先来梳理代码的脉络,然后再看具体的计算细节。外部调用的主要是 updateCoeffs() 函数,所以,从这个函数看起。 1234567891011121314151617181920212223242526272829...
OpenFOAM 中的壁面函数(二)
发表于2026-07-16
OpenFOAM 中的壁面函数(二)转自:https://xiaopingqiu.github.io/,侵删 仅仅觉得都挺有用的,所以转发一下。仅仅是想做个备份,希望不要某天淹没在互联网的长河里 这篇来看看计算湍动能 $k$ 的壁面函数。 2. 湍流动能 $k$ 的壁面函数OpenFOAM 中提供了两种 $k$ 的壁面函数, kqRWallFunction 和 kLowReWallFunction 。 kqRWallFunction其实就是 zeroGradient ,无需多言。除非使用 $v^2\text{-}f$ 模型,一般情况下 $k$ 应该使用这个边界条件。 kLowReWallFunction这个壁面函数应该是可以用于低雷诺数模型的。该壁面函数继承自 fixedValue : 123456789101112131415161718192021222324252627282930313233343536373839class kLowReWallFunctionFvPatchScalarField: public fixedValueFvPatchField&l...
OpenFOAM 中的壁面函数(四)
发表于2026-07-16
OpenFOAM 中的壁面函数(四)转自:https://xiaopingqiu.github.io/,侵删 仅仅觉得都挺有用的,所以转发一下。仅仅是想做个备份,希望不要某天淹没在互联网的长河里 这篇来看看可能是最关键的 $\nu_t$ 的壁面函数。 5. 湍流粘度 $\nu_t$ 的壁面函数这个类型的壁面函数,结构比较简单,计算的是每一个壁面边界面上的湍流粘度 $\nu_t$。nutWallFunction 是虚基类,其中定义了一个纯虚函数 calcNut 1virtual tmp<scalarField> calcNut() const = 0; 并且在 updateCoeffs 函数中,将 calcNut 的返回值赋值给边界面 1234567891011void nutWallFunctionFvPatchScalarField::updateCoeffs(){ if (updated()) { return; } operator==(calcNut()); fixedValueF...
OpenFOAM 中的边界条件(三)
发表于2026-07-16
OpenFOAM 中的边界条件(三)转自:https://xiaopingqiu.github.io/,侵删 仅仅觉得都挺有用的,所以转发一下。仅仅是想做个备份,希望不要某天淹没在互联网的长河里OpenFOAM 中有很多复杂的边界都是继承自上篇中提到的三个基础边界条件,这些边界条件的代码在上一篇的基础上就很容易看懂了。只不过,还有一些边界条件,不是继承自这三个基础边界条件的,其中有一些都直接或间接继承自另一个重要的边界条件: transformFvPatchField。本篇来看看这个 transformFvPatchField 以及几个继承自它的边界条件。 5. transform这是一个抽象基类,主要注意一下四个函数的定义: 12345678910111213141516171819202122232425262728293031323334353637template<class Type>tmp<Field<Type> > transformFvPatchField<Type>::valueInternalCoeffs( ...
OpenFOAM 中的边界条件(一)
发表于2026-07-16
OpenFOAM 中的边界条件(一)转自:https://xiaopingqiu.github.io/,侵删 仅仅觉得都挺有用的,所以转发一下。仅仅是想做个备份,希望不要某天淹没在互联网的长河里本系列解读 OpenFOAM 中边界条件的实现。主要关心一些几个问题: OpenFOAM 中边界条件是怎样与有限体积离散部分交互的? 怎么从代码看懂一个边界条件具体是怎么计算边界上的值的? 怎么定制一个边界条件? 本篇先阐述第一个问题。 从有限体积离散的角度来看,离散过程中,可能要用到的边界信息包括两类:一是某个场在边界上的值,另一是某个场在边界上的梯度。前者在对流项的离散中需要用到,举例说$$\int_v \nabla \cdot (\rho \mathbf{U} \phi) dV = \sum_f m_f \phi_f$$当组成体积元的面中有边界面时,需要用到这些边界面上的值 $\phi_f$。而在扩散项的离散过程中$$\int_v \nabla \cdot (\Gamma \nabla \phi) dV = \sum_f (\Gamma \nabla \phi...
OpenFOAM 中的边界条件(四)
发表于2026-07-16
OpenFOAM 中的边界条件(四)转自:https://xiaopingqiu.github.io/,侵删 仅仅觉得都挺有用的,所以转发一下。仅仅是想做个备份,希望不要某天淹没在互联网的长河里 JohnsonJackson 边界条件本篇来看用于气固两相流模拟的 JohnsonJackson 边界条件。这组边界条件用于设定双流体模型中固相在壁面的速度和颗粒温度。根据 N. Reuge 2008, CES,壁面上的固相速度和颗粒温度可以表示为:JohnsonJackson boundary conditions其中,$u_m$ 指的是 m 相在壁面切向上的滑移速度。下面来看 OpenFOAM 中对这两个边界条件的实现 在看 JohnsonJackson 边界条件之前,先要看一下 partialSlip 边界。 partialSlippartialSlipFvPatchField 继承自 transformFvPatchField 1234567891011template<class Type>class partialSlipFvPatchField: publ...
OpenFOAM 中的单相流湍流模型之一
发表于2026-07-16
OpenFOAM中的单相流湍流模型之一转自:https://xiaopingqiu.github.io/,侵删 仅仅觉得都挺有用的,所以转发一下。仅仅是想做个备份,希望不要某天淹没在互联网的长河里相信有不少 OpenFOAM 用户有添加湍流模型的需求,我自己最早用 OpenFOAM 完成的一项工作就是在其中添加了一些单相流的湍流模型,并进行了一些计算。这里将我对单相湍流模型代码框架的理解记录下来,供大家参考。本系列将包含三篇,第一篇介绍湍流模型类的继承派生关系,第二篇具体分析几个 OpenFOAM 中带的湍流模型,并给出修改或增加新模型的方法,第三篇分析湍流模型的运行时选择机制(Run Time Selection)的原理。 1. 湍流模型类的继承派生关系这一部分是最简单的,只要有一点C++的知识,看一下湍流模型的代码头文件的类声明部分,就能理解。OpenFOAM 里的单相湍流模型包含两大类,RAS 和 LES,下面将分别分析。 OpenFOAM 单相流湍流模型的代码在 src/turbulenceModels 目录下,目录结构如下: 1Allwmake compressibl...
OpenFOAM-2.3.x 中的 twoPhaseEulerFoam 解析之 TurbulenceModel
发表于2026-07-16
OpenFOAM-2.3.x 中的 twoPhaseEulerFoam 解析之 TurbulenceModel转自:https://xiaopingqiu.github.io/,侵删 仅仅觉得都挺有用的,所以转发一下。仅仅是想做个备份,希望不要某天淹没在互联网的长河里在 kineticTheoryModel 类的解读时前面提到过, kineticTheoryModel 使用了跟湍流模型一样的接口。这一篇,就来看一下 twoPhaseEulerFoam 中的湍流模型。 OpenFOAM-2.3.x 中的twoPhaseEulerFoam 流体相可以调用 RAS 和 LES 湍流模型,固相可以使用两种计算固相应力的“湍流模型”。湍流模型的调用是通过 phaseModel 来进行的,具体的过程放到最后来讲,这里先说一下最重要的 divDevRhoReff 函数的形式,主要有三种类型:用于固相的 phasePressure 和 kineticTheoryModel 以及用于流体相的 RAS 模型或 LES 模型,以 kEpsilon 模型为例。此外,在”pEqn.H”里,还需要用到 pP...
OpenFOAM-2.3.x 中的 twoPhaseEulerFoam 解析之 kineticTheoryModel
发表于2026-07-16
OpenFOAM-2.3.x 中的 twoPhaseEulerFoam 解析之 kineticTheoryModel转自:https://xiaopingqiu.github.io/,侵删 仅仅觉得都挺有用的,所以转发一下。仅仅是想做个备份,希望不要某天淹没在互联网的长河里OpenFOAM 中双流体模型的 kineticTheoryModel 是以 “ Derivation, implementation, and validation of computer simulation models for gas-solid fluidized beds, B.G.M. van Wachem, Ph.D. Thesis, Delft University of Technology, Amsterdam, 2000. “ 为蓝本来设计的,下面分析这个类的代码。需要注意的是,这个类需要调用一些别的类(如 viscosityModel 等,后面会一一分析)来完成其功能。 1. 头文件 kineticTheoryModel.H头文件中要注意的是 kineticTheoryModel 类的...
OpenFOAM 中的边界条件(二)
发表于2026-07-16
OpenFOAM 中的边界条件(二)转自:https://xiaopingqiu.github.io/,侵删 仅仅觉得都挺有用的,所以转发一下。仅仅是想做个备份,希望不要某天淹没在互联网的长河里本篇在上一篇的基础上来解读 OpenFOAM 中的基础边界条件。基础边界条件一般包括三类,一是Dirichlet 边界,二是 Neumann 边界,三是混合 Dirichlet 和 Neumann 的边界。 1. fixedValue这个是 OpenFOAM 中的 Dirichlet 边界条件。 构造函数 12345678910template<class Type>fixedValueFvPatchField<Type>::fixedValueFvPatchField( const fvPatch& p, const DimensionedField<Type, volMesh>& iF, const dictionary& dict): fvPatchField<Type>(p, iF, ...
OpenFOAM-2.3.x 中的 twoPhaseEulerFoam 解析之 kineticTheoryModel 的子模型
发表于2026-07-16
OpenFOAM-2.3.x 中的 twoPhaseEulerFoam 解析之 kineticTheoryModel 的子模型转自:https://xiaopingqiu.github.io/,侵删 仅仅觉得都挺有用的,所以转发一下。仅仅是想做个备份,希望不要某天淹没在互联网的长河里上一篇博文解读了 kineticTheoryModel 其中提到需要调用子模型来完成其功能,这里将 OpenFOAM 中 kineticTheoryModel 模型的子模型罗列如下。 1. viscosityModelviscosityModel 的作用是根据颗粒温度 Theta 来计算固相粘度。基类代码如下,核心是那个返回固相粘度的 nu 函数。 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071namespace Foam{namespace kineticTheoryMod...
OpenFOAM-3.0 的湍流模型(一)
发表于2026-07-16
OpenFOAM-3.0的湍流模型(一)转自:https://xiaopingqiu.github.io/,侵删 仅仅觉得都挺有用的,所以转发一下。仅仅是想做个备份,希望不要某天淹没在互联网的长河里本系列分析 OpenFOAM-3.0 版本的湍流模型。从 3.0 版开始,OpenFOAM 中的湍流模型架构发生了较大的变化,其实这种变化在 2.3 版开始已经初露端倪,在 2.3 版里,多相流的湍流模型已经开始跟单相流湍流模型分开。从 3.0 开始,单相流湍流模型和多相流湍流模型统一到了一个架构下。本系列将对 3.0 版的湍流模型进行详细的分析,分为四部分:结构概览,RTS 机制分析,编译新模型的方法,以及一些补充说明。 1. 结构概览这部分主要是概括一下湍流模型的框架的结构,如下图(请点击右键查看大图): 湍流模型的架构 图片中,蓝色字体的是类名,绿框中的类是调用 declareRunTimeSeclectionTable 的类(如果对这个的含义感兴趣,建议参考这篇或者这篇),四种不同颜色的箭头,代表的是四种不同的湍流模型:单相不可压缩湍流模型,单相可压缩湍流模型,多相不可压缩模型...
OpenFOAM-2.3.x 中的 twoPhaseEulerFoam 解析之曳力模型的调用过程
发表于2026-07-16
OpenFOAM-2.3.x 中的 twoPhaseEulerFoam 解析之曳力模型的调用过程转自:https://xiaopingqiu.github.io/,侵删 仅仅觉得都挺有用的,所以转发一下。仅仅是想做个备份,希望不要某天淹没在互联网的长河里前面有三篇博文对 OpenFOAM-2.1.x 中的 twoPhaseEulerFoam 求解器进行了解读,然而 OpenFOAM-2.3.x 中,这个求解器的代码有了很大的变化。本文将以一个曳力模型的调用过程为例,介绍 OpenFOAM-2.3.x 中 twoPhaseEulerFoam 是如何调用相间作用力模型的。后续还将对 OpenFOAM-2.3.x 中的 twoPhaseEulerFoam 的其他方面进行解读。 主程序中(“ UEqn.H “),dragCoeff 定义为: 1volScalarField dragCoeff(fluid.dragCoeff()); 其中,fluid 为 twoPhaseSystem 类的对象,所以,要去找 twoPhaseSystem 类的成员函数 dragCoeff()。在源文件...
123
avatar
M Sui
文章
53
标签
12
分类
0
Follow Me
最新文章
我还是用了SnappyHexMesh2026-07-18
C++ 中派生类引用与基类引用的隐式转换2026-07-16
OpenFOAM 不可压缩湍流模型的 divDevReff 函数2026-07-16
OpenFOAM 中求解 ODE 一例2026-07-16
OpenFOAM 中的 Run Time Selection 机制2026-07-16
标签
SnappyHexMesh OpenFOAM 13 其他 LES OpenFOAM4 OpenFOAM macOS技巧 LaTeX, Mac OpenFOAM4, 涡的可视化 OF4 snappyHexMesh, cartesianMesh OpenFOAM 4
归档
  • 七月 2026 38
  • 六月 2026 1
  • 四月 2026 2
  • 三月 2026 6
  • 二月 2026 1
  • 一月 2026 5
网站信息
文章数目 :
53
本站访客数 :
本站总浏览量 :
最后更新时间 :
© 2025 - 2026 By M Sui框架 Hexo 8.1.1|主题 Butterfly 5.5.3