Have fun with sci.dog

OpenFoam自动划分三维对象网格

需求分析

最近项目需要,欲将一些三维CT扫描的岩石图像的孔隙提取出来,进行流动数值模拟。本文记述如何将三维物体划分为正六面体网格

一、图像处理

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
赞(0)
未经允许不得转载:SciDog » OpenFoam自动划分三维对象网格

评论 抢沙发