Sui's Blog

Sui's Blog

LES 中的 commutation error
发表于2026-07-16
LES 中的 commutation error转自:https://xiaopingqiu.github.io/,侵删 仅仅觉得都挺有用的,所以转发一下。仅仅是想做个备份,希望不要某天淹没在互联网的长河里 大涡模拟不仅对网格的解析度有要求,而且对网格质量也有更高的要求。本文介绍一种由网格带来的误差,commutation error,并简单分析其对结果的影响。 在 LES 模拟的程序中,常用的一种过滤方法是隐式过滤,即,用当地网格的尺度作为该处的过滤尺度。这种方法在各种类型的网格上实现起来都相对简单。只是,稍微复杂一点的几何构体,生成的网格的尺度总是不可能一样,这也就意味着过滤尺度是变化的。如果相邻网格的尺度变化很大,这也将引起相邻网格的过滤尺度相差很大,这时就会带来严重的 commutation error。 Commutation error 产生的根本原因是,当相邻网格过滤尺度不一样时,,$\overline{\tfrac{\partial \phi}{\partial x}} \neq \tfrac{\partial \overline{\phi}}{\partial ...
OpenFOAM-3.0 的湍流模型(三)
发表于2026-07-16
OpenFOAM-3.0 的湍流模型(三)转自:https://xiaopingqiu.github.io/,侵删 仅仅觉得都挺有用的,所以转发一下。仅仅是想做个备份,希望不要某天淹没在互联网的长河里有了上一篇的基础,就很容易做到添加新的湍流模型了,这里分别给出对四类湍流模型增加新模型的方法。探索过程不详述了,仅给出结果。 3. 添加新模型的方法。添加湍流模型,关键的有两个,一是如果将新湍流模型添加到合适的 hashTable,以便能被求解器调用,另一个是 Make/files 和 Make/options 的写法以使湍流模型能被编译。 这里不给出具体湍流模型的代码,仅给出 Make 的写法,以及一个 .C 文件。编译湍流模型的时候,新建一个目录,将需要编译的湍流模型代码、这里给出的对应类型的 .C 文件和 Make 文件夹都拷贝到新建的目录,然后运行 wmake libso 即可。 3.1 单相不可压缩湍流模型 makeTuebulenceModels.C 12345678910111213141516171819202122232425262728293...
OpenFOAM-3.0 的湍流模型(四)
发表于2026-07-16
OpenFOAM-3.0 的湍流模型(四)转自:https://xiaopingqiu.github.io/,侵删 仅仅觉得都挺有用的,所以转发一下。仅仅是想做个备份,希望不要某天淹没在互联网的长河里 最后来看一个小问题:OpenFOAM-3.0 中的湍流模型是怎么编译的。在这之前,湍流模型的编译很直观,将需要编译的湍流模型的代码的 .C 文件写到 Make/files 里就好了。可是,在 OpenFOAM-3.0 里,很多湍流模型代码的 .C 文件并没有写到 Make/files 里,而是在 makeTurbulenceModels.C里类似这样写 12#include "mykEpsilon.H"makeRASModel(mykEpsilon); 然后在 Make/files 里写的是这个 makeTurbulenceModels.C 文件。为什么呢? 这里来分析一下这个问题。 这个问题,说起来也简单,不过我经过很多摸索从想明白。其实,这个问题用一个概念就可以解释清楚:条件编译。 条件编译常用于头文件,格式如下 1234567//filename: ...
OpenFOAM 中的 div 与 snGrad 操作符
发表于2026-07-16
OpenFOAM 中的 div 与 snGrad 操作符转自:https://xiaopingqiu.github.io/,侵删 仅仅觉得都挺有用的,所以转发一下。仅仅是想做个备份,希望不要某天淹没在互联网的长河里OpenFOAM 的方便之处之一是利用C++的类模板和函数重载等技术定义了很多各种离散操作符,如div,laplacian,grad 等等。利用这些操作符,很容易就能对偏微分方程进行离散,并构建起线性方程组。但是,这些操作符真正执行的运算,却需要结合有限体积方法的本质来理解一番才能真正掌握。下面尝试着对 OpenFOAM 中的 div 和 snGrad 操作符进行一点解读。 1. div 操作符的本质div操作符表面看,是计算散度的,实际上,在OpenFAOM中,div 操作符的作用是加和,比如说 $ \nabla \cdot (UU)$,在OpenFOAM中表示为fvm::div(phi,U),这段代码真正执行的是$\sum_f U_f \phi_f$运算,即将每个网格包含的面上的流率与速度乘积,然后再加起来。再比如,twoPhaseEulerFoam的UaEqn方程...
OpenFOAM-3.0 的湍流模型(二)
发表于2026-07-16
OpenFOAM-3.0 的湍流模型(二)转自:https://xiaopingqiu.github.io/,侵删 仅仅觉得都挺有用的,所以转发一下。仅仅是想做个备份,希望不要某天淹没在互联网的长河里本篇分析 OpenFOAM-3.0 中湍流模型的 RTS 机制。RTS 机制主要是通过调用几个相关的宏函数来实现的,所以,分析 RTS 机制需要将相关的宏函数展开。四类湍流模型,机制是类似的,这里以单相不可压缩湍流模型为例,后文会给出所有其他湍流模型相关的宏函数的展开结果,供读者参考。RTS 机制的基础这里不再重复了,读者若对这里涉及到 RTS 机制的名称感兴趣,可以参考我以前对 RTS 机制的解读。 2. RTS 机制单相不可压缩湍流模型类,在 Make/files 文件里包含的其中一个是 src/TurbulenceModels/incompressible/turbulentTransportModels/turbulentTransportModels.C turbulentTransportModels.C,这个文件里包含了一些通用的湍流模型模板类,并调用了一些宏函数来实现...
foamTimeAverage
发表于2026-07-16
foamTimeAverage转自:https://xiaopingqiu.github.io/,侵删 仅仅觉得都挺有用的,所以转发一下。仅仅是想做个备份,希望不要某天淹没在互联网的长河里在前面的一篇博文中,我介绍了fieldAverage这个functionObject的用法,其中提到, 可以用window这个参数来控制所计算的时均值的时间范围。如果 base = time且window = 10,那从第10s以后,每个时刻 t 输出的时均值其实相当于从 t-10 到 t 这个时间段内的时均值。但是,根据分析可以发现,这个时均值并不严格等价于从 t-10 时刻到 t 时刻某个场的时均值。有时候,需要从某个时刻才开始计算时均值,而fieldAverage没有参数可以控制从某个时刻才开始计算时间平均。于是我参照OpenFOAM的patchAverage.C的代码写了一个后处理程序,用来计算指定时间段内的某个场的时均值。 foamTimeAverage 简介foamTimeAverage 是一段简单的后处理程序,其功能是在算例运行结束以后,根据指定的时间段,从数据文件夹里循环读入指定...
fieldAverage 使用说明
发表于2026-07-16
fieldAverage 使用说明转自:https://xiaopingqiu.github.io/,侵删 仅仅觉得都挺有用的,所以转发一下。仅仅是想做个备份,希望不要某天淹没在互联网的长河里fieldAverage是 OpenFOAM 中的一种 functionObject,用来计算时均值。其基本用法是作为一个 function object 放在 controlDict 文件中,运行 solver 的同时计算指定场的时均值,以下是一个示例: 123456789101112131415161718192021222324functions{ fieldAverage1 { type fieldAverage; functionObjectLibs ( "libfieldFunctionObjects.so" ); outputControl outputTime; fields ( Ua ...
fvOptions 浅析
发表于2026-07-16
fvOptions 浅析 转自:https://xiaopingqiu.github.io/,侵删 仅仅觉得都挺有用的,所以转发一下。仅仅是想做个备份,希望不要某天淹没在互联网的长河里 本篇简单介绍 OpenFOAM 中的 fvOptions。按照官方的介绍,fvOptions 是一个可以在指定区域内添加源项或者其他约束(比如固定温度,或者多孔介质等)的框架。本篇对 fvOptions 框架的源码做一个浅析。 先来了解一下 fvOptions 框架的结构,以及,在求解器中是怎么调用 fvOptions 的。为了避免问题复杂化,先从一个简单的求解器开始:scalarTransportFoam。OpenFOAM-2.3.1 中的 scalarTransportFoam 中已经引入了 fvOptions ,而更早的 OpenFOAM-2.1.1 中,则没有使用 fvOptions 。对比之下,很容易发现引入 fvOptions 其实就只涉及到两处代码修改:1. 增加了一个头文件 createFvOptions.H;2. 在 T 方程中增加了一项 fvOptions(T) ...
fvOptions 之 semiImplicitSource
发表于2026-07-16
fvOptions 之 semiImplicitSource转自:https://xiaopingqiu.github.io/,侵删 仅仅觉得都挺有用的,所以转发一下。仅仅是想做个备份,希望不要某天淹没在互联网的长河里上篇浅析了 fvOptions 框架的结构,这篇来看一个具体的源项类: semiImplicitSource 。 先来看看这个源项代码中的关键部分。 SemiImplicitSource.C 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133...
twoPhaseEulerFoam 全解读之三
发表于2026-07-16
twoPhaseEulerFoam 全解读之三转自:https://xiaopingqiu.github.io/,侵删 仅仅觉得都挺有用的,所以转发一下。仅仅是想做个备份,希望不要某天淹没在互联网的长河里本系列将对OpenFOAM-2.1.1 中的 twoPhaseEulerFoam 求解器进行完全解读,共分三部分:方程推导,代码解读,补充说明。本篇对 twoPhaseEulerFoam 中的 alphaEqn.H 进行详细地的解读,并作一些补充说明。 2.3. alphaEqn前文提到,经过求解 pEqn,并修正速度Ua和Ub以后,总体的连续性便得到了保证。为了得到分散相的体积分率alpha,还需要利用得到的速度场来求解分散相的连续性方程,即alphaEqn。分散相连续性方程可以表达如下:$$\frac{\partial \alpha_a}{\partial t}+\nabla \cdot (\alpha_a U_a)=0$$ 为了让每一项都写成守恒形式,并且保证$\alpha_a$的有界性,Weller 将分散相连续性方程写成如下形式$$\frac{\partial...
两个简单的随时间变化的边界条件
发表于2026-07-16
两个简单的随时间变化的边界条件转自:https://xiaopingqiu.github.io/,侵删 仅仅觉得都挺有用的,所以转发一下。仅仅是想做个备份,希望不要某天淹没在互联网的长河里这一篇里介绍OpenFOAM自带的两个简单的随时间变化的边界条件: uniformFixedValue 和 flowRateInletVelocity 。 1. uniformFixedValue这个边界属于第一类边界,即直接指定边界上某个量的值。跟 fixedValue 的不同之处在于,这个边界条件允许边界上的值随着时间变化。一般的用法如下: 12345678type uniformFixedValue;uniformValue table( (0.000 (0 0 0.002)) (0.010 (0 0 0.002)) (0.011 (0.011 0 0.011)) (0.100 (0.10 0 0.100))); 上面这一段指定的是速度 U (也可以是其他矢量,或者标量)的边界条件,通过一个 table 来定义边界随时间的变化行为,具...
twoPhaseEulerFoam 全解读之二
发表于2026-07-16
twoPhaseEulerFoam 全解读之二转自:https://xiaopingqiu.github.io/,侵删 仅仅觉得都挺有用的,所以转发一下。仅仅是想做个备份,希望不要某天淹没在互联网的长河里本系列将对OpenFOAM-2.1.1 中的 twoPhaseEulerFoam 求解器进行完全解读,共分三部分:方程推导,代码解读,补充说明。本篇对 twoPhaseEulerFoam 中的 UEqn.H 和 pEqn.H 中的代码进行详细地的解读。 2. 代码解读2.1. UEqn前一篇导出了分散相的动量守恒方程$$\begin{aligned}&(1+\frac{\alpha_b \rho_b}{\rho_a} C_{vm})(\frac{\partial U_a}{\partial t} + U_a\cdot \nabla U_a ) -\nabla \cdot \left[ \nu_{eff} \nabla U_a \right ] + \nabla \cdot \left[ R_{c,a}\right] + \frac{\nabla(\alpha_a)}{\a...
为什么要将声明和定义分离
发表于2026-07-16
为什么要将声明和定义分离转自:https://xiaopingqiu.github.io/,侵删 仅仅觉得都挺有用的,所以转发一下。仅仅是想做个备份,希望不要某天淹没在互联网的长河里OpenFOAM 中的类基本都遵循类的声明和定义分开在不同文件的规则。具体来说,一般是类的声明放在 “xxx.H”,类的成员函数的具体定义 “xxx.C”,如果有内联函数(inline),则还有 “xxxI.H”,并且,”xxx.H” 文件的最后会有 #include "xxxI.H"。这么做不仅是一种代码规范,真正的目的应该是为了防止重复定义的问题。本篇博文用一个简单的例子来说明这个问题。 为了防止混淆,先说明一下概念: 函数声明:即只声明函数的返回类型,函数名以及参数列表,没有函数体,不具体定义函数的功能,比如 1int max(int a, int b); 函数定义:包含函数体,具体定义函数的功能。比如 1234567int max(int a, int b){ if (a<b) return b; else ...
twoPhaseEulerFoam 全解读之一
发表于2026-07-16
twoPhaseEulerFoam 全解读之一转自:https://xiaopingqiu.github.io/,侵删 仅仅觉得都挺有用的,所以转发一下。仅仅是想做个备份,希望不要某天淹没在互联网的长河里本系列将对OpenFOAM-2.1.1 中的 twoPhaseEulerFoam 求解器进行完全解读,共分三部分:方程推导,代码解读,补充说明。本篇进行方程推导,详细介绍如果从双流体模型出发得到 twoPhaseEulerFoam 中的 UEqn.H 对应的模型方程形式。 1. 方程推导双流体模型方程可以表达成如下形式: 连续性方程:$$\frac{\partial(\alpha_\phi\rho_\phi)}{\partial t}+\nabla\cdot(\alpha_\phi\rho_\phi U_\phi)=0$$动量守恒方程:$$\frac{\partial(\alpha_\phi\rho_\phi U_\phi)}{\partial t}+\nabla\cdot(\alpha_\phi\rho_\phi U_\phi U_\phi)+\nabla\cdot(...
利用functionObjects对指定区域内进行后处理
发表于2026-07-16
利用functionObjects对指定区域内进行后处理转自:https://xiaopingqiu.github.io/,侵删 仅仅觉得都挺有用的,所以转发一下。仅仅是想做个备份,希望不要某天淹没在互联网的长河里CFD中很重要的一个环节是模拟结果的后处理。而后处理过程中,常常涉及到对某个指定区域的某个物理量进行操作,比如,求指定截面上的流率,或者求某个区域内的平均空隙率,等等。这里介绍一种利用 OpenFOAM 中的 functionObjects 来对指定区域进行后处理的方法。本方法一共分三步:1). 将指定区域内的网格(或者面)提取到 cellZone(或faceZone); 2). 在 controlDict 里写后处理 functions;3). 运行后处理。 1. 将指定区域的网格(或面)提取到 cellZone (或faceZone)这一步有很多方法可以实现,这里介绍用setSet结合setsToZones的方法。 1.1 setSet的基本用法setSet是 OpenFOAM 提供的一个用于生成网格集合(cellSet)、面集合(faceSet)以及点集合(poi...
湍流模型中的 RTS 机制分析
发表于2026-07-16
湍流模型中的 RTS 机制分析转自:https://xiaopingqiu.github.io/,侵删 仅仅觉得都挺有用的,所以转发一下。仅仅是想做个备份,希望不要某天淹没在互联网的长河里有了上一篇博文的基础,就可以来填一个坑了,即分析 OpenFOAM 中湍流模型框架中的 RTS 。上一篇博文,使用的程序比较简单,这里通过一个实际使用 RTS 机制的例子来加深对 RTS 的理解。 经过前面对那段简单代码的分析,可以知道, declareRunTimeSelectionTable 宏函数的主要功能是声明了一个 hashTable,并定义了一个指向这个hashTable 的指针, 然后还声明了几个辅助的类。 defineRunTimeSelectionTable 这个宏函数的主要作用是对 declareRunTimeSelectionTable 中的 hashTable 指针进行了初始化。 addToRunTimeSelectionTable 的主要作用是将当前类的类名以及返回当前类的对象的一个函数分别作为 hashTable 的 key 和 value 插入到 hashTable...
OpenFOAM4 中涡的可视化
发表于2026-07-15
在 OpenFOAM4.1 中显示三维涡结构,核心方法是结合使用软件自带的 Q-criterion(Q准则)或 Lambda2(λ₂准则)等旋涡识别方法,并在后处理软件 ParaView 中进行可视化。 以下是具体的操作步骤与实现方法: 1. 在 OpenFOAM 中提取涡旋数据您可以在计算过程中或计算后通过添加函数对象(Function Objects)来提取涡量、Q准则或 Lambda2。 https://www.topcfd.cn/12128/ 打开算例目录下的 system/controlDict 文件。 在文件末尾添加以下 functions 字典: 1234567891011121314151617181920functions{ Q1 { type Q; libs ("libfieldFunctionObjects.so"); writeControl writeTime; log true; writeFields true; ...
谁在用snappyHexMesh谁是狗
发表于2026-07-10
如题。cartestainMesh 太强大了,又快设置又简单。谁在用snappyHexMesh谁是狗
OF4中颗粒碰撞内部面的处理
发表于2026-06-29
原始问题我老板做模拟,使用 maxCo=1.5 虽然这部分已经是错了,但是神奇的一点是,他的模拟作出来的颗粒的位置就是不对的。然后我运行 maxCo=0.5 跑出来的颗粒的位置看起来就没有什么问题。 然后我早期的印象中是颗粒会卡在碰到的界面上,然后等下一个Euler时间步。然后我查了一下源代码,问了一下AI, 因为还是没有看懂。。最后得到的解释是下面的一坨。 OpenFOAM parcel 碰撞处理Usertemplatetemplatevoid Foam::KinematicParcel::hitFace(TrackData& td){ typename TrackData::cloudType::parcelType& p = static_cast<typename TrackData::cloudType::parcelType&>(*this); td.cloud().functions().postFace(p, p.face(), td.keepParticle); } templatevoid F...
Mac下VSCode+LaTeX的解决方案
发表于2026-04-11
安装VSCodeVisual Studio Code - Code Editing. Redefinedcode.visualstudio.com/ 在visual studio code官网下载电脑对应版本的安装包并安装 安装VSCode插件 LaTeX Workshop为必装,其他插件可自行选择安装 安装MacTex在Mac上使用LaTeX的话,除非只使用最基本的语法可以安装轻量化的BasicTex(甚至连公式都不需要输入的情况,应该很少人这样),MacTex是唯一选择。官网解释如下 https://tug.org/mactex/tug.org/mactex/ MacTeX - TeX Users Group MacTeX - TeX Users Grouptug.org/mactex/ 在这里下载安装MacTex.pkg即可,一共会安装5个软件,除了MacTex以外, TeXShop LaTeXiT TeX Live Utility BibDesk hintview 更简单的安装方式 Homebrew。用mac不用homebrew就相当于没...
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