简介
openFoam的cellZone概念十分重要,可以给一个区域的单元命名,广泛应用于设置初始场(如气、液两相流的初始VOF分布)
而cellZone通常由cellSet转化而来,本文将介绍使用cellSet定义cellZone的方法
方法
在项目的system目录下新建topoSetDict
文件,用于定义cellZone和cellSet. 该文件的内容为
/*--------------------------------*- 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 g; // 单元集合命名为g
type cellSet;
action new;
source cylinderToCell; // 圆柱区域
sourceInfo
{
p1 (0.013759 0.0066167 0); // 圆柱体上表面的中心点
p2 (0.038779 0.0066167 0); // 圆柱体下表面的中心点
radius 0.004191; // 圆柱半径
}
}
{
name g;
type cellSet;
action add; // 追加
source cylinderToCell; // 圆柱区域
sourceInfo
{
p1 (0.00321535 0.0113443 0); // 圆柱体上表面的中心点
p2 (0.0153868 0.00715329 0); // 圆柱体下表面的中心点
radius 0.005; // 圆柱半径
}
}
{
name g;
type cellSet;
action add; // 追加
source cylinderToCell; // 圆柱区域
sourceInfo
{
p1 (0.0362785 0.00675582 0); // 圆柱体上表面的中心点
p2 (0.0435375 0.0109468 0); // 圆柱体下表面的中心点
radius 0.005; // 圆柱半径
}
}
{
name grain; // 区域命名grain
type cellZoneSet;
action new;
source setToCellZone;
sourceInfo
{
set g; // 给定source信息,来自单元集合g
}
}
);
// ************************************************************************* //
首先定义了一个名为g
的cellSet
,由一个圆柱确定cellSet
中包含的单元。然而这个圆柱不能完全满足需要,还需对g
再追加两个圆柱区域. 最终得到的g
是由三个圆柱所组成的并集。
得到g
后,可以将g
转化为cellZone
,名称为grain
结果
划分网格后,在命令行运行(这里不叙述网格的划分过程)
topoSet
可以看见constant/polyMesh
文件夹中多出了set
文件夹和cellZones
文件,分别保存了生成的cellSet
和cellZone
. 使用paraview查看网格即可观察cellZone
的结果(红色区域)