圆柱体如何用blockMesh画网格?

原创
10/18 10:02
阅读数 36

有同学在问,简单写个教程。

圆柱体画网格一般有两种思路,一个思路是基于一个立方体,把边设置为圆弧,第二个思路是把圆柱分成四个扇柱。两种思路得到的网格的形式不太一样,大家可以根据自己实际计算的需求选择不同的方法。


第一种方法:

如图所示,就是一个立方体,一个block,把边设置为圆弧,最后就能获得一个圆柱体的网格

blockMeshDict代码如下:

/*--------------------------------*- C++ -*----------------------------------*\| =========                 |                                                 || \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           ||  \\    /   O peration     | Version:  5                                     ||   \\  /    A nd           | Web:      www.OpenFOAM.org                      ||    \\/     M anipulation  |                                                 |\*---------------------------------------------------------------------------*/FoamFile{    version     2.0;    format      ascii;    class       dictionary;    object      blockMeshDict;}

// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

scale 1;

vertices( (-1 -1 0) //0 ( 1 -1 0) //1 ( 1 1 0) //2 (-1 1 0) //3 (-1 -1 10) //4 ( 1 -1 10) //5 ( 1 1 10) //6 (-1 1 10) //7);

blocks( hex (0 1 2 3 4 5 6 7) (10 10 100) simpleGrading (1 1 1)

);

edges( arc 0 1 (0 -1.41421 0) arc 1 2 (1.41421 0 0) arc 2 3 (0 1.41421 0) arc 3 0 (-1.41421 0 0) arc 4 5 (0 -1.41421 10) arc 5 6 (1.41421 0 10) arc 6 7 (0 1.41421 10) arc 7 4 (-1.41421 0 10)

);

boundary( walls { type wall; faces ( (2 6 7 3) (0 3 7 4) (0 4 5 1) (1 5 6 2) ); } outlet { type patch; faces ( (0 1 2 3) ); } inlet { type patch; faces ( (4 7 6 5) ); });

// ************************************************************************* //


最终得到的网格如下图所示 :

这种方法也有一些变种,例如下图所示,在正方体的基础上,增加了4个梯扇形的block,这样网格的划分可以更加灵活,字典文件我这里就不写了,有兴趣的同学可以自己尝试一下。


第二种方法:


如图,由四个扇柱合并而成,四个扇柱是四个block,分别为:

    hex (1 2 0 0 6 7 5 5) 

    hex (4 1 0 0 9 6 5 5) 

    hex (2 3 0 0 7 8 5 5) 

    hex (3 4 0 0 8 9 5 5) 


blockMeshDict代码如下:

/*--------------------------------*- C++ -*----------------------------------*\| =========                 |                                                 || \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           ||  \\    /   O peration     | Version:  5                                     ||   \\  /    A nd           | Web:      www.OpenFOAM.org                      ||    \\/     M anipulation  |                                                 |\*---------------------------------------------------------------------------*/FoamFile{    version     2.0;    format      ascii;    class       dictionary;    object      blockMeshDict;}

// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

scale 1;

vertices( ( 0 0 0) //0 (-1 -1 0) //1 ( 1 -1 0) //2 ( 1 1 0) //3 (-1 1 0) //4 ( 0 0 10) //5 (-1 -1 10) //6 ( 1 -1 10) //7 ( 1 1 10) //8 (-1 1 10) //9 );

blocks( hex (1 2 0 0 6 7 5 5) (10 10 100) simpleGrading (1 1 1) hex (4 1 0 0 9 6 5 5) (10 10 100) simpleGrading (1 1 1) hex (2 3 0 0 7 8 5 5) (10 10 100) simpleGrading (1 1 1) hex (3 4 0 0 8 9 5 5) (10 10 100) simpleGrading (1 1 1)



);

edges( arc 1 2 (0 -1.41421 0) arc 2 3 (1.41421 0 0) arc 3 4 (0 1.41421 0) arc 4 1 (-1.41421 0 0) arc 6 7 (0 -1.41421 10) arc 7 8 (1.41421 0 10) arc 8 9 (0 1.41421 10) arc 9 6 (-1.41421 0 10)



);

boundary( walls { type wall; faces ( (1 6 7 2) (4 9 6 1) (2 7 8 3) (3 8 9 4) ); } outlet { type patch; faces ( (0 1 2 0) (0 2 3 0) (0 3 4 0) (0 4 1 0) ); } inlet { type patch; faces ( (5 7 6 5) (5 8 7 5) (5 9 8 5) (5 6 9 5) ); });



// ************************************************************************* //

 最终获得的网格效果如图所示:

 

 

注意:第二种方法在openfoamV2006中一直报错,不知道是不是dict写得有问题,debug了半天无果,最后在openfoamV1812中成功运行,知道原因的同学能否帮忙解解惑



本文分享自微信公众号 - OpenFOAM(OpenFOAM_CN)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部