OpenFOAM二维贴体网格生成
OpenFOAM是面向3D问题模拟的开源工具,所以如果想要完成2D问题的不规则几何形状模拟,需要通过以下步骤(以不规则平板应力分析为例):
1. 将平板的.stl几何文件导入OpenFOAM接口(case/constant/polyMesh/triSurface
文件夹),作初步网格剖分,需要注意的有以下三点:
(1)在背景网格控制文件case/system/blockMeshDict
中应当包裹住内部几何 case.stl:
scale 1;
vertices // 背景网格(box)的8个顶点
(
(0 0 0)
(1 0 0)
(1 0.2 0)
(0 0.2 0)
(0 0 0.01)
(1 0 0.01)
(1 0.2 0.01)
(0 0.2 0.01)
);
blocks
(
hex (0 1 2 3 4 5 6 7) (20 4 1) simpleGrading (1 1 1) // 本例中,问题设定为x-y平面的二维仿真分析,所以z方向给定一层网格
);
(2)背景网格的6个边界面同样应当在blockMeshDict
中定义,注意Front和Back面类型定义为empty:
boundary
(
top
{
type patch;
faces
(
(3 7 6 2)
);
}
bottom
{
type patch;
faces
(
(1 5 4 0)
);
}
…
(3)在网格贴合控制文件case/system/snappyHexMeshDict
中不应再指定任何边界类型:
refinementSurfaces
{
test
{
// Surface-wise min and max refinement level
level (3 4);
}
}
同样在snappyHexMesh控制文件中,采样点在内部不规则轮廓的外部:
locationInMesh (0.5 0.1 0.005);
2. 网格二维化转换
(1)定义网格二维化控制文件case/system/extrudeMeshDict
:
constructFrom patch;
sourceCase ".";
// 起始面和终止面,即子步骤二中blockMeshDict中定义的empty类型边界面
sourcePatches (Front);
exposedPatchName Back;
// 是否反向
flipNormals true;
extrudeModel linearNormal;
nLayers 1;
expansionRatio 1.0;
// 定义拉伸厚度
linearNormalCoeffs
{ thickness 0.01; }
mergeFaces false; //true;
mergeTol 0;
(2)定义边界面生成文件case/system/createPatchDict
:
patches
(
{
// 新的边界面命名
name front;
// 边界面类型
patchInfo
{ type empty; }
constructFrom patches;
// 原来的边界面名称
patches (Front);
}
{
name back;
patchInfo
{ type empty; }
constructFrom patches;
patches (Back);
}
);
上述所有控制文件定义完成之后,执行以下流程:
blockMesh
snappyHexMesh -overwrite
extrudeMesh
createPatch -overwrite
使用者可以用foamToVTK
指令,用paraview软件查看生成的是否是自己需要的二维贴体网格:
并且从俯视图可以看到z方向的网格层数为1:
至此,三维贴体网格向二维贴体网格的转换完成。