OpenFOAM 中的正则表达式
OpenFOAM中的正则表达式在 OpenFOAM 的开发和工程应用中,正则表达式(Regular Expressions)是实现配置文件简洁化和批量处理的核心利器。OpenFOAM 内部通过 `regExp` 类封装了 POSIX 扩展正则表达式,允许我们在字典文件中使用通配符和模式匹配。 以下我为你整理了 OpenFOAM 官方案例(ESI 和 Foundation 版本)中正则表达式应用的几个经典维度: 1. 求解器控制与容差设置 (`fvSolution`)这是工程中最常见的应用。为了避免给 等每个场单独写一遍设置,我们通常使用括号和 `|`(逻辑或)进行分组。 官方案例参考: `tutorials/incompressible/simpleFoam/motorBike/system/fvSolution` 123456789101112131415161718192021solvers{ // 使用正则表达式匹配所有以 p 开头的压力相关场(如 p, p_rgh) "p.*" { solver ...
OpenFOAM 跑测试的工具链设计
AI+ProductManQ:我想基于我日常使用OpenFOAM的习惯定制一个Python+shell+conda安装,可以直接在终端运行命令的runTest工具。我需要怎么样prompt,得到一个完整的项目。给我一个模版 这是一个非常实用且典型的开发辅助工具需求。要得到一个完整、可用、结构清晰的项目,你的 Prompt 需要扮演一个**“产品经理+技术架构师”**的角色,清晰地告诉 AI 你的工作流、痛点以及期望的技术栈。 下面是一个为你量身定制的 Prompt 模板。你可以直接复制并根据你的具体习惯微调括号里的内容。 🚀 定制 OpenFOAM runTest 工具的 Prompt 模版Role (角色设定): 你是一名资深的 CFD 工程师兼 DevOps 专家,精通 OpenFOAM 工作流、Python 脚本自动化、Shell 编程以及 Conda 环境管理。你擅长编写鲁棒性强、易于维护的命令行工具(CLI)。 Goal (目标): 我需要你为一个 OpenFOAM 自动化测试与运行工具生成完整的项目结构和代码。该工具名为 runTest,旨在简化我日常的 CFD ...
压力-速度耦合算法文献页
WolfDy中的培训课程 SIMPLE S. V. Patankar and D. B. Spalding, “A calculation procedure for heat, mass and momentum transfer in three - dimensional parabolic flows”, Int. J. Heat Mass Transfer, 15, 1787 - 1806 (1972). SIMPLE - C J. P. Van Doormaal and G. D. Raithby, “Enhancements of the SIMPLE method for predicting incompressible fluid flows”, Numerical Heat Transfer, 7, 147 - 163 (1984). PISO R. I. Issa, “Solution of the implicitly discretized fluid flow equations by operator - splitting”, J. Co...
Realizable k-ε 模型解析
Realizable $k-\epsilon$(Realizable k-epsilon)是标准 $k-\epsilon$ 模型最著名的改进版本之一(另一个是 RNG $k-\epsilon$)。 如果说 SST 是 k-omega 家族的“王者”,那么 Realizable 则是 k-epsilon 家族中处理强旋流和射流的“专家”。 它和普通(Standard)$k-\epsilon$ 的核心区别主要在于两点:“数学上的合规性”和“耗散率方程的重写”。 区别一:它解决了“负能量”的 BUG(Realizability)这是该模型名字“Realizable”(可实现的/符合物理现实的)的由来。 普通 k-epsilon 的 BUG:在计算湍流粘度 $\mu_t$ 时,标准模型使用固定公式 $\mu_t = \rho C_\mu \frac{k^2}{\epsilon}$,其中 $C_\mu$ 是一个常数(通常是 0.09)。但在某些极端情况下(比如流体急剧加速或者强烈的剪切时),这个简单的公式会导致数学上的荒谬结果:正应力(Normal Stress)变成了负数。...
Rhie-Chow 插值
一、背景与问题来源Rhie–Chow 插值提出于 1983 年,出自 Rhie 和 Chow 在求解不可压缩流(incompressible flow)时的研究。它要解决的核心问题是: 如何在共位网格(collocated grid)中消除压力—速度解之间的“奇异振荡”(checkerboard pressure oscillations)? 背景:在不可压缩流体中,控制方程包括: 动量方程(求速度) 连续性方程(保证质量守恒,约束速度场散度为零) 若采用简单的有限体积方法(FVM),并把所有变量($p, u, v, w$)都存储在单一的网格节点(如单元中心) 上,这就是所谓的 共位(collocated)布置。但这样布置时,会出现一个严重问题: 连续性方程在压力修正阶段对速度插值非常敏感;如果速度不是恰当地从单元中心插值到面中心,系统的压力解会发散或出现非物理的棋盘格振荡。 二、“棋盘格压力(checkerboard pressure)” 问题的来源对于不可压缩流,连续性方程形式是: $$ \nabla \cdot \mathbf{u} = 0 $$ 在有限体积离...
SIMPLE/PISO/PIMPLE 算法总览
SIMPLE/PISO算法Semi-Implicit Method for Pressure Linked Equations Pressure Implicit with Splitting of Operators 资料(for more details)OpenFOAM: User Guide: SIMPLE algorithm 2.2 SIMPLE系列算法 | 2.3 PISO算法(OpenFOAM理论笔记系列)_CloudBird07的博客-CSDN博客_piso算法 OpenFOAM中的数据结构-icoFoam为例【未完成】 - 知乎 (zhihu.com) OpenFOAM guide/The SIMPLE algorithm in OpenFOAM - OpenFOAMWiki OpenFOAM guide/The PISO algorithm in OpenFOAM - OpenFOAMWiki SIMPLE——From User Guide The sequence for each iteration follows: Ad...
SIMPLE vs SIMPLEC:劣质网格上的表现差异
SIMPLE vs SIMPLEC在 CFD(计算流体力学)中,SIMPLE 和 SIMPLEC 都是压力-速度耦合(Pressure-Velocity Coupling)的经典算法。 当你的网格质量不佳,特别是存在明显的**非正交性(Non-orthogonality)和歪斜度(Skewness)**时,这两种算法的表现差异会变得非常关键。 以下是针对这两种情况的详细对比和建议: 1. 核心差异:通量修正的方式为了理解它们在劣质网格上的表现,首先要看它们在数学上怎么处理“速度修正”的: SIMPLE 算法: 做法:在推导压力修正方程时,直接忽略了邻点速度修正项(Neighbor velocity correction terms)。 后果:这个忽略过于激进。为了防止计算发散,SIMPLE 算法必须对压力修正值使用非常保守的亚松弛因子(Under-relaxation Factor)。通常压力松弛因子只能取到 0.3 左右。 收敛速度:因为松弛因子小,每次迭代迈的步子很小,收敛慢。 SIMPLEC 算法 (SIMPLE-Consistent): 做法:它没有粗暴地忽略邻...
SST 湍流模型解析
这是一个非常经典的问题。在 CFD 工业界,kOmegaSST (Menter’s SST) 几乎是默认的“万金油”模型,而标准的 kOmega (Wilcox’s Standard $k-\omega$) 则用得相对较少。 简单来说:SST 是标准 k-Omega 的“智能升级版”。 它修复了标准 k-Omega 的一个致命缺陷,并增加了一个关键功能。 我们可以通过两个核心区别来理解: 区别一:它解决了“对入口条件过敏”的问题(混合机制)这是 SST 诞生的最大原因。 标准 kOmega (Wilcox) 的毛病:它在壁面附近(边界层内)表现极其出色,非常精准。但是,它有一个著名的致命弱点:它对远场(Free Stream)的 $\omega$ 值非常敏感。 现象:如果你把入口处的湍流参数稍微改一点点(比如 $\omega$ 从 1 改成 1.1),它算出来的物体表面的结果(如阻力系数)可能会发生巨大的变化。这种“蝴蝶效应”在工程上是不可接受的。 kEpsilon 的特点:它在远场(远离壁面)非常稳健,对入口条件不敏感,但在壁面附近表现很差。 SST (Shear S...
加减方程项对数值稳定性的影响
OpenFOAM 中“正负号”的数值含义与编码影响(含例子演示)在 OpenFOAM 的数值实现中,正负号不仅仅是算术符号,还携带了物理方向、通量指向、源项正负贡献以及离散格式的稳定性含义。尤其是在求解守恒方程(质量、动量、组分、电荷等)时,“加上一个负值”和“减去一个正值”在语义与读写习惯上可能看似等价,但在代码可读性、物理含义以及与现有符号约定对齐方面会有差别,容易引入误解或错误。 本文从常见对象与操作入手,解释正负号的影响,并给出多个简明示例。 1) 常见对象中的正负号语义+ 通量 `phi`(surfaceScalarField) 面上定义,带有宿主面的几何法向。`phi > 0` 表示沿面法向方向的净流出(相对 cell 的“正向”),`phi < 0` 表示反向。 在离散化中,`fvm::div(phi, U)`、`fvc::div(phi, Y)` 等与符号直接决定迎风方向、界面插值方向。 若你写 `phi = phiA - phiB`,则负号表明你关心的是两通量的“相对向量投影”对守恒项的贡献。 源项/沉积项 `S`(volScala...
数学意义上的三类边界条件
Relate:ABLCondition,20250827_IB_FoamExtend40 解释在CFD计算中,边界条件主要分为以下三类: 1. Dirichlet边界条件(第一类边界条件) 本质:直接指定物理量在边界上的数值 $$ \phi |_{\partial \Omega} = f(\mathbf{x}, t) $$ 典型应用: 固定壁面速度(无滑移条件) 入口指定流速/温度 压力出口给定静压值 特点:强加边界值,方程中作为已知量 2. Neumann边界条件(第二类边界条件) 本质:指定物理量在边界上的梯度 $$ \nabla \phi \cdot \mathbf{n} |_{\partial \Omega} = g(\mathbf{x}, t) $$ 典型应用: 绝热壁面(温度梯度为零) 对称边界(法向梯度为零) 指定热流密度 特点:反映通量平衡关系,方程中作为源项 3. Robin边界条件(混合边界条件) 本质:Dirichlet与Neumann的线性组合$$ a\phi + b(\nabla \phi \cdot \mathbf{n...
