本文摘要(由AI生成):
本文概述了OpenFOAM中初始条件和边界条件的设置。初始条件分为均匀和非均匀,非均匀条件可通过多种计算结果获取。边界条件分为Dirichlet、Neumann和Robin三种,进出口边界条件包括入口和出口,零梯度边界条件通过外推得到物理量值,回流边界条件提供通用的流出/流入条件,对称边界条件仅适用于对称平面。边界条件和初始条件必须真实,设置不当可能影响计算结果。在OpenFOAM中,边界类型包括基本和数值类型,基本类型基于几何信息或通信halo边界,数值类型则将物理量值分配给指定表面边界。正确设置边界条件至关重要,需理解相关物理原理。
当使用CFD求解器来求解控制方程的近似解时,实际上求解的是一个初边值问题,这类问题在求解计算时需要输入适当的边界条件和初始条件。很明显边界条件和初始条件必须在物理上是真实的。边界条件是数值方法的必需部分,其将区域边界的信息告诉求解器。初始条件也是数值方法的必要组成部分,其定义了物理问题的初始状态。
边界条件(boundary condition,BC)可以分为三种主要类型:
Dirichlet边界
:直接指定边界上待求物理变量的值Neumann边界
:指定边界上物理量的法向梯度Robin边界
:为上面两种边界的混合,既指定物理量的值,也指定梯度值在实际应用过程中,上面三种边界类型可以任选其中一个。
在OpenFOAM中定义边界条件涉及到的操作包括:
边界条件的选择取决于:
如下图所示的计算区域中所包含的初始条件(IC)与边界条件(BC)。
初始化条件(initial condition,IC)可以分为两类:
可以从以下途径获取非一致的初始条件:
定义初始条件包括:
初始条件的选择取决于:
对于初始条件,需要提供问题的初始信息或初始状态。此信息可以是均匀值,也可以是非均匀值。可以将初始条件应用到整个计算区域或计算区域中的某一独立区域。如下图所示。
关于进出口边界条件:
关于零梯度边界与回流边界条件:
边界条件的一些组合非常稳定,而有些组合的可靠性较低,如入口处设置为速度和出口处设置为零压力梯度,这种组合由于静压不固定,此模拟最终将崩溃。
关于对称边界条件:
关于边界条件与初始条件:
OpenFOAM中将边界类型区分为基本类型和数值类型量中。
对于基本类型边界:
constant/polyMesh
中的boundary
文件中定义的boundary
文件boundary
文件,因为转换程序有可能无法识别原始网格的边界类型对于数值类型边界:
0
中的场变量字典中定义了数值类型边界条件下表所示的基本类型与数值类型是相同的:
基础类型 | 数值类型 |
---|---|
constant/polyMesh/boundary文件 | 0/U - 0/p - 0/T - 0/k - 0/omega等文件 |
cyclic cyclicAMI empty processor symmetry symmetryPlane wedge | cyclic cyclicAMI empty processor symmetry symmetryPlane wedge |
这些边界在OpenFOAM中成为约束边界(constraint patch)。要想找到这些边界的完整列表及源代码位置,可以进入路径$WM_PROJECT_DIR
中,输入命令:
find . d -iname *constraint*
基本类型patch
可以是OpenFOAM中可用的任何边界条件,从数学上将,可以是Dirichlet, Neumann或Robin边界条件。如下表所示:
基础类型 | 数值类型 |
---|---|
constant/polyMesh/boundary文件 | 0/U - 0/p - 0/T - 0/k - 0/omega等文件 |
patch | advective calculated codedFixedValue epsilonWallFunction fixedValue inletOutlet movingWallVelocity rotatingWallVelocity slip supersonicFreeStream totalPressure zeroGradient … 等等 |
基础边界wall
定义为:
边界类型 | 数值类型 | 数值类型 |
---|---|---|
constant/polyMesh/boundary | 0/U | 0/p |
wall | type fixedValue; value uniform (0 0 0); | zeroGradient |
此边界条件不包含在基本类型边界条件patch
中,可以在此边界条件上使用专门的模型选项。
backflow
出口边界,可以使用以下边界条件组合:
边界类型 | 数值类型 | 数值类型 |
---|---|---|
constant/polyMesh/boundary | 0/U | 0/p |
patch | type inletOutlet; inletValue uniform (0 0 0); value uniform (0 0 0); | type fixedValue; value uniform 0; |
inletValue
关键字用于回流处理。•这种情况下,如果流体返回计算区域,将使用通过关键字inletValue
设置的值。否则它将使用zeroGradient
边界条件。
外部空气动力学计算中典型的边界条件如下表所示:
边界描述 | 压力 | 速度 | 湍流场 |
---|---|---|---|
入口面 | zeroGradient | fixedValue | fixedValue |
出口面 | fixedValue | inletOutlet | inletOutlet |
壁面 | zeroGradient | fixedValue | 壁面函数 |
对称面 | symmetry | symmetry | symmetry |
周期面 | cyclic | cyclic | cyclic |
空面 | empty | empty | empty |
滑移壁面 | slip | slip | slip |
壁面是可以为kqWallFunction, omegaWallFunction, nutkWallFunction等,如下表所示:
物理场 | 壁面函数(高雷诺数) | 求解边界层(低雷诺数) |
---|---|---|
nut | nut-壁面函数 | fixedValue 0或一个较小值 |
k,q,R | kqRWallFunction | fixedValue 0或一个较小值 |
epsilon | epsilonWallFunction | zeroGradient或 fixedValue 0或一个较小值 |
omega | omegaWllFunction | omegaWallFunction fixedValue 指定一个较大值 |
zeta | - | fixedValue 0或一个较小值 |
nuTilda | - | fixedValue 0或一个较小值 |
nut壁面函数可以是:nutkAtmRoughWallFunction, nutkRoughWallFunction, nutkWallFunction, nutLowReWallFunction, nutURoughWallFunction, nutUSpaldingWallFunction, nutUTabulatedWallFunction, nutUWallFunction, nutWallFunction
。
最后,记住基本类型边界条件的名称和数值类型边界条件的名称必须相同,否则OpenFOAM会给出错误提示,特别是如果要从其他格式转换网格时。另外在将名称分配给边界时,不要使用空格。
OpenFOAM®实现了许多边界条件。可以在以下目录中找到主要数值边界条件的源代码:$WM_PROJECT_DIR/src/finiteVolume/ fields/
湍流模型(壁函数)的壁边界条件位于以下目录中:$ WM_PROJECT_DIR/src/MomentumTransportModels/momentumTransportModels/derivedF vPatchFields/wallFunctions
要查找在OpenFOAM中实现的所有边界条件,请转到目录$WM_PROJECT_DIR
并在终端中键入:
$> find . -type d -iname *fvPatch*
$> find . -type d -iname *derivedFv*
$> find . -type d -iname *pointPatch*
获取有关OpenFOAM®中所有可用边界条件的更多信息,可以阅读Doxygen文档,也可以通过以下链接在线访问文档:http://cpp.openfoam.org/v8/
例如下面的模型边界:
与之对应的constant/polyMesh/boundary
文件内容如下所示:
// 这里的3指的是定义的边界数量
3
(
// 指定了一个名为movingWall的边界
movingWall
{
// 边界类型为patch,基础边界
type patch;
// 组成边界的网格面数量,通常不改
nFaces 20;
// 组成边界的起始面编号,通常不改
startFace 760;
}
// 边界的名称可以任意取,不要有空格
fixedWalls
{
// 定义了一个wall边界,基础边界
type wall;
nFaces 60;
startFace 780;
}
frontAndBack
{
// 定义了一个empty边界
// 表示计算的是2D文件
type empty;
nFaces 800;
startFace 840;
}
)
例如下面的边界条件:
其对应的0/U
文件如下所示:
dimensions [0 1 -1 0 0 0 0];
internalField uniform (0 0 0);
boundaryField
{
// 这里的边界名称必须与boundary中的一致
movingWall
{
// 指定边界类型为固定值
type fixedValue;
// 指定入口速度向量
value uniform (1 0 0);
}
fixedWalls
{
type fixedValue;
value uniform (0 0 0);
}
frontAndBack
{
// empty类型保持与boundary一致
type empty;
}
}
如下面的边界条件组合:
对应的0/p
文件:
dimensions [0 2 -2 0 0 0 0];
internalField uniform 0;
boundaryField
{
// 必须与boundary文件中边界名称一致
movingWall
{
// 指定为零梯度边界
type zeroGradient;
}
fixedWalls
{
type zeroGradient;
}
frontAndBack
{
type empty;
}
}
声明:原创文章,欢迎留言与我讨论,如需转载留言