在 OpenFOAM 的不可压缩流体模拟中(如 simpleFoam, pisoFoam, interFoam),边界条件的设置直接决定了计算的收敛性和物理准确性。针对管内流动/室内通风场景,以下是单相流与两相流(VOF)的压力与速度边界条件总结。


一、 单相不可压缩流动 (Single-Phase)

适用求解器: simpleFoam (稳态), pisoFoam / pimleFoam (瞬态)
核心注意: 压力场 p 的量纲通常是 $m^2/s^2$(即 $P/\rho$)。

边界位置 速度场 (U) 压力场 (p) 说明
入口 (Inlet) fixedValue zeroGradientfixedFluxPressure 给定已知流速(如 uniform (1 0 0))。
出口 (Outlet) zeroGradient fixedValue 通常设出口压力为 0(参考压)。
壁面 (Wall) noSlip zeroGradientfixedFluxPressure fixedFluxPressure 在高非正交网格下更稳定。
压力入口 pressureInletOutletVelocity totalPressure 适用于已知室内外压差,而非已知流速的场景。

二、 两相不可压缩流动 (Two-Phase / VOF)

适用求解器: interFoam, interIsoFoam, pimpleIbFoam (foam-extend)
核心注意: 使用 p_rgh ($p - \rho gh$) 代替静压 p,以方便处理重力引起的静水压。

边界位置 速度场 (U) 动压力 (p_rgh) 相分率 (alpha.water)
入口 (Inlet) fixedValue fixedFluxPressure fixedValue (1 为全水, 0 为全气)
出口 (Outlet) zeroGradientinletOutlet fixedValue (通常设为 0) inletOutlet (防止出口回流导致相场崩溃)
壁面 (Wall) noSlip fixedFluxPressure zeroGradientalphaContactAngle
大气/开口 pressureInletOutletVelocity totalPressure inletOutlet (通常 inletValue 为 0)

三、 关键边界条件详解

1. 压力场中的 fixedFluxPressure

  • 用途: 专门用于壁面和已知速度的入口。
  • 原理: 它根据速度边界条件计算压力梯度,确保压力梯度的设置与速度通量一致。
  • 建议:interFoam 和高版本 OpenFOAM 中,壁面尽量使用此条件代替 zeroGradient

2. 出口处的 inletOutlet

  • 用途: 提高计算稳定性。
  • 原理: 当流体流出时,它是 zeroGradient;一旦发生回流,它自动切换为 fixedValue
  • 配置示例:
    1
    2
    3
    type            inletOutlet;
    inletValue uniform (0 0 0); // 回流时的速度
    value uniform (0 0 0);

3. 两相流中的 alpha.water 出口设置

  • 痛点: 若出口设为 zeroGradient,回流可能把“虚无”的相带入域内导致发散。
  • 方案: 必须使用 inletOutlet,并将 inletValue 设为 0(空气),确保回流进来的只有空气。

四、 针对室内/管内流动的进阶设置

1. 室内通风(已知压差)

如果模拟空调送风或自然通风,有时不知道精确流速,只知道风机压头:

  • Inlet U: pressureInletOutletVelocity
  • Inlet p: totalPressure (设定 p0 为风机静压)

2. 浸没边界法 (IBM) 特殊处理

既然你在研究 foam-extend 的 IBM 功能,注意在 0/U0/p 中对浸没物体的处理:

  • U: immersedBoundary (配合 v 指定物体速度,如 (0 0 0))
  • p: immersedBoundary (通常内部逻辑处理为类似 zeroGradient)

五、 总结配置模板(以单相流管内流动为例)

0/U:

1
2
3
4
5
boundaryField {
inlet { type fixedValue; value uniform (1 0 0); }
outlet { type inletOutlet; inletValue uniform (0 0 0); value uniform (1 0 0); }
walls { type noSlip; }
}

0/p:

1
2
3
4
5
boundaryField {
inlet { type fixedFluxPressure; value uniform 0; }
outlet { type fixedValue; value uniform 0; }
walls { type fixedFluxPressure; value uniform 0; }
}

下一步建议:
针对你的水库库区模拟(含管道),由于库区通常有自由液面,建议出口使用 两相流设置。如果管道出口完全淹没在水下,则可以简化为 单相流固定速度出口

你想让我为你生成一个完整的 interFoam 求解器的 0/ 文件夹配置脚本(包含 alpha, U, p_rgh)吗?