问题描述
在实际使用OpenFOAM中,我们经常会遇到根据平面上点的坐标给出边界条件的情况,例如一个三维方腔,在距离墙壁底端3m的位置上有一个直径0.5m的管道入口,流体从其中以恒定的流量流入计算域。在这样的背景下,我们就需要对这个壁面给定分段的边界条件。在本文中我们就具体讨论一下如何设置这样的边界条件。
具体步骤
我们用到的两个工具是creatPatch和topoSet。 creatPatch需要在算例的system文件下调用creatPatchDict文件,其原本用来调整周期性边界条件的位置,在这里我们直接用它来创建新的边界条件:
/*--------------------------------*- C++ -*----------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org
\\ / A nd | Version: 8
\\/ M anipulation |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
object createPatchDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
pointSync false;
writeCyclicMatch false;
patches
(
{
name flowIn; //新边界条件的名字
patchInfo
{
type patch; //新边界条件的类型,可以是patch,wall,cyclic等基础类型
}
constructFrom set; //从哪里新建边界条件,关键词可以设置为patch或者set,如果设置为patch则表示从已有的边界上创建新的边界条件,相当于修改边界条件的类型。在这里我们选择set,表示从一个face Set选区创建新的边界条件。
set flowInSet;//选区的名字
}
);
// ************************************************************************* //
creatPatch在调整周期性边界条件位置时候还有许多高级用法,读者可以自行查阅OpenFOAM自带算例中的设置。
通过以上creatPatchDict文件,我们可以在flowInSet选区的位置上新建一个名为flowIn的边界。现在的核心问题转变为了如何创建这个flowInSet的选区。在这里,我们使用topoSet工具。在system文件夹下新建topoSetDict,其内容如下:
/*--------------------------------*- C++ -*----------------------------------*\
========= |
\\ / F ield | OpenFOAM: The Open Source CFD Toolbox
\\ / O peration | Website: https://openfoam.org
\\ / A nd | Version: 8
\\/ M anipulation |
\*---------------------------------------------------------------------------*/
FoamFile
{
version 2.0;
format ascii;
class dictionary;
object topoSetDict;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
actions
(
{
name flowInSetPri;
type cellSet;
action new;
source cylindeToCell;
sourceInfo
{
p1 (-1 0 3);
p2 (1 0 3);
radius 0.5;
}
}
{
name flowInSet;
type faceSet;
action new;
source cellToFace;
sourceInfo
{
set flowInSetPri;
option all;
}
}
{
name flowInSet;
type faceSet;
action subset;
source patchToFace;
sourceInfo
{
name myWall;
}
}
);
// ************************************************************************* //
在我们的案例中,原始壁面位于yoz平面,底边z坐标为0,壁面边界名字为myWall。在topoSetDict中,我们首先新建了一个名为flowInSetPri的圆柱体选区,这个圆柱体选区在myWall边界上的投影就是我们要定义的新边界条件的位置。紧接着我们又使用cellToface命令将flowInSetPri选区转化为一系列面选区flowInSet,在这些面选区中,与myWall边界重合的那个面就是我们最后要提取的面。为了提取这个选区,我们对flowInSet选区进行subset动作,表示取子集,选取子集的依据是patchToFace,即根据边界条件选取。我们将相应的patch选择为壁面myWall,这样就取出了flowInSet这个面集合与myWall壁面的交集,即我们要定义的新边界条件区域。
然后我们仅需要在算例目录下打开终端输入以下命令便可以得到一个名为flowIn的新边界条件了:
topoSet
createPatch -overwrite