一、图像处理
1、提取对象
通过图像处理,提取要划分的三维对象,如图所示。
2、生成表面结构
通过paraview的ExtractSurface命令可以提取三维体的表面,保存成stl文件即可,文本格式和二进制格式均可。保存后可以通过windows自带的三维工具3D查看器查看。
二、生成网格
1、复制示例文件
cd -r $FOAM_TUTORIALS/mesh/snappyHexMesh/flange/ ~/cfd/
2、修改文件夹名称为mystl(自己起个名字即可)
3、进入mystl/constant/triSurface文件夹,将生成的stl文件复制到这里
4、配置system\blockMeshDict文件划分立方体网格
converToMeters 1; 这个是一个单位转换,先不管它
vertices: 我们可以看到总共有8行,每一行有3个数,这是长方体8个定点的坐标,这里给一个建议的次序,如图。
这8个点的坐标怎么确定?实际上,这个长方体是stl文件表示的闭合曲面的一个包络,因此,保证闭合曲面在这个长方体内即可,当然,为了划分网格节约时间,这个立方体不宜取得过大。
用paraview打开stl文件,可以在information面板查看闭合曲面的范围。
vertices
(
( -0.1 -0.1 -0.1 )
( 600.1 -0.1 -0.1 )
( 600.1 600.1 -0.1 )
( -0.1 600.1 -0.1 )
( -0.1 -0.1 600.1 )
( 600.1 -0.1 600.1 )
( 600.1 600.1 600.1 )
( -0.1 600.1 600.1 )
);
blocks:blocks实际上是体或者块的概念,网格划分里面,典型的构成就是点、边、面、体。这里的blocks我们可以用7个顶点来构成
blocks
(
hex (0 1 2 3 4 5 6 7) (50 50 50) simpleGrading (1 1 1)
);
hex表示六面体,(0 1 2 3 4 5 6 7)表示该六面体由这8个点构成,(50 50 50)表示的是x,y,z三个方向上的网格数量,simpleGrading(1 1 1)是三个方向的网格单元膨胀率(最大网格与最小网格大小的比例)
edges:可以不定义
edges
(
);
boundary:定义边界
boundary
(
allBoundary
{
type patch;
faces
(
(3 7 6 2)
(0 4 7 3)
(2 6 5 1)
(1 5 4 0)
(0 3 2 1)
(4 5 6 7)
);
}
);
这里的6个face的定点次序,需要按照右手定则,指向长方体面的外法向。
配置完成后,可以输入blockMesh来构建立方体网格
blockMesh
成功执行后,输入paraFoam可以查看构建的立方体网格
paraFoam
5、配置system\surfaceFeaturesDict文件生成面数据
这个文件配置很简单,协商stl文件的名称即可
surfaces ("grid_46_sub.surf.stl");
// Identify a feature when angle between faces < includedAngle
includedAngle 150;
includeAngel暂时没有研究是什么含义
输入命令surfaceFeatures生成面文件
surfaceFeatures
6、配置system\snappyHexMeshDict文件,生成面的贴合网格
- castellatedMesh: 要设置位true,这个步骤对网格进行面剪切
- snap:要设置成true
- addLayers:根据情况设置
- geometry:定义几何文件
- type:triSurfaceMesh 三角形面,stl文件就是如此
- file:stl文件名
- castellatedMeshControls:切割参数
- features:定义生成的面文件的文件名:在constant文件夹下找.eMesh文件
- refinementSurfaces:定义几何名称
- locationInMesh:非常重要,定义要划分的网格区域内的一个点,该点如果在闭合曲面内部,则划分的网格为闭合曲面内部,该点如果在闭合曲面外部,则划分的网格为闭合曲面外部到立方体内部。
- mergeTolerance:容差,通常要小于stl文件的坐标精度。
配置完成后,输入snpappyHexMesh,即可完成最终网格
snappyHexMesh
输入paraFoam,查看网格
paraFoam