轴对称 blockMeshDict:FOAM FATAL ERROR:wedge ... 中心平面与坐标平面不对齐

Posted

技术标签:

【中文标题】轴对称 blockMeshDict:FOAM FATAL ERROR:wedge ... 中心平面与坐标平面不对齐【英文标题】:Axisymmetric blockMeshDict: FOAM FATAL ERROR: wedge ... centre plane does not align with a coordinate plane by 【发布时间】:2018-08-22 23:42:02 【问题描述】:

我正在尝试关注this tutorial 创建下面的轴对称模型:

经过对here 的讨论,我的blockMeshDict 文件是:

FoamFile

    version     2.0;
    format      ascii;
    class       dictionary;
    object      blockMeshDict;


convertToMeters 0.001;

wa 5.0;
cr 10.0;
pr 8.0;
cl 50.0;
px 20.0; 
pl 10.0; 
px2 #calc "$px+$pl"; 
ms 50; 

vertices
(
    (0                      0                         0)    //00
    (#calc "$pr*cos($wa/2)" #calc "$pr*sin($wa/2)"    0)    //01
    (#calc "$pr*cos($wa/2)" #calc "-$pr*sin($wa/2)"   0)    //02
    (#calc "$pr*cos($wa/2)" #calc "-$pr*sin($wa/2)"   $px)  //03
    (#calc "$pr*cos($wa/2)" #calc "$pr*sin($wa/2)"    $px)  //04
    (0                      0                         $px)  //05
    (#calc "$cr*cos($wa/2)" #calc "$cr*sin($wa/2)"    $px)  //06
    (#calc "$cr*cos($wa/2)" #calc "$cr*sin($wa/2)"    0)    //07
    (#calc "$cr*cos($wa/2)" #calc "-$cr*sin($wa/2)"   0)    //08
    (#calc "$cr*cos($wa/2)" #calc "-$cr*sin($wa/2)"   $px)  //09
    (#calc "$cr*cos($wa/2)" #calc "-$cr*sin($wa/2)"   $px2) //10
    (#calc "$cr*cos($wa/2)" #calc "$cr*sin($wa/2)"    $px2) //11
    (#calc "$pr*cos($wa/2)" #calc "$pr*sin($wa/2)"    $px2) //12
    (#calc "$pr*cos($wa/2)" #calc "-$pr*sin($wa/2)"   $px2) //13
    (#calc "$pr*cos($wa/2)" #calc "-$pr*sin($wa/2)"   $cl)  //14
    (#calc "$pr*cos($wa/2)" #calc "$pr*sin($wa/2)"    $cl)  //15
    (#calc "$cr*cos($wa/2)" #calc "$cr*sin($wa/2)"    $cl)  //16
    (#calc "$cr*cos($wa/2)" #calc "-$cr*sin($wa/2)"   $cl)  //17
    (0                      0                         $cl)  //18
    (0                      0                         $px2) //19
);

blocks
(
    hex (0  1  2  0  5  4  3  5)         ($ms 1 $ms) simpleGrading (1 1 1)
    hex (1  7  8  2  4  6  9  3)         ($ms 1 $ms) simpleGrading (1 1 1)
    hex (4  6  9  3  12 11 10 13)        ($ms 1 $ms) simpleGrading (1 1 1)
    hex (12 11 10 13 15 16 17 14)        ($ms 1 $ms) simpleGrading (1 1 1)
    hex (19 12 13 19 18 15 14 18)        ($ms 1 $ms) simpleGrading (1 1 1)
);

edges
(
);

boundary
(
    inlet
    
        type patch;
        faces
        (
            (0 1 2 0)
            (1 7 8 2)
        );
    
    outlet
    
        type patch;
        faces
        (
            (18 15 14 18)
            (15 16 17 14)
        );
    
    walls
    
        type wall;
        faces
        (
            (7  8  9  6)
            (6  9  10 11)
            (11 10 17 16)
        );
    
    wedgeBack
    
        type wedge;
        faces
        (
            (0  1  4  5)
            (1  7  6  4)
            (4  6  11 12)
            (12 11 16 15)
            (19 12 15 18)
        );
    

    wedgeFront
    
        type wedge;
        faces
        (
            (0  2  3  5)
            (2  8  9  3)
            (3  9  10 13)
            (13 10 17 14)
            (19 13 14 18)
        );
    

    axis
      
           type empty;
           faces  
           (
               (0  5  5  0)
               (19 18 18 19)
           );
    
);

mergePatchPairs
(
);

但是当我运行 blockMesh 时,我收到如下警告:

创建块网格拓扑 --> 泡沫警告: 来自函数 Foam::polyMesh::polyMesh(const Foam::IOobject&, const Foam::Xfer > >&, const cellShapeList&, const faceListList&, const wordList&, const Foam::PtrList&, const Foam::word&, const Foam::单词&,布尔值) 在文件 meshes/polyMesh/polyMeshFromShapeMesh.C 的第 871 行 在网格中找到 3 个未定义的面;添加到默认补丁。

接着是错误:

--> 泡沫致命错误: 楔楔前中心平面与坐标平面不对齐 0.360319 从函数 virtual void Foam::wedgePolyPatch::calcGeometry(Foam::PstreamBuffers&) 在文件 meshes/polyMesh/polyPatches/constraint/wedge/wedgePolyPatch.C 的第 98 行。

不幸的是,谷歌搜索错误消息不会返回much。如果您能帮助我了解问题所在以及如何解决,我将不胜感激。

【问题讨论】:

谷歌搜索错误消息可能对 OpenFOAM 有帮助,也可能没有帮助,但是,我发现 OpenFOAM 的错误消息非常有说服力和有用。它准确地告诉你出了什么问题,尽管我不得不承认,对于包括我自己在内的新手来说,它们有时很难阅读。但是如果有足够的经验,OpenFOAM 的错误信息确实很有帮助。 顺便说一句:the Computational Science SE 站点是发布 OpenFOAM 相关问题的更常见的地方。我不知道这是如何完成的,但我建议将问题迁移到 SciComp SE。 @DohnJoe 我将尝试您的代码并返回这里。非常感谢您的帮助。 @DohnJoe 我为我的new question 尝试了计算科学 stackexchange。不过没有得到太多帮助! 嗯,OpenFOAM 是一个非常具体的话题。所以,不要指望立即得到答案。不幸的是,OpenFOAM 社区相当小。 【参考方案1】:

你计算点坐标的方式对我来说似乎很奇怪,例如参数wa 应该是什么意思?看来你打算把它变成一个角度。

通过将楔形补丁的补丁类型更改为patch 类型,我设法获得了一个有效的网格,这比wegde 类型更宽容。在对 blockMeshDicts 进行故障排除时,我经常这样做。

此外,我更改了入口补丁定义中的顶点顺序。补丁定义中的顶点列表必须遵守“右手规则”,请参阅User Guide。

对于采用轴对称的情况,User Guide 建议使用较小的楔角,例如1°,对于轴对称域。这很可能是您错误指出楔形中心平面未对齐的原因。

因此,我建议:

暂时保持楔形补丁的类型为patch 整理您的几何图形,以便您能够生成 1° 的几何切片 将楔形面片改回 wedge,一旦您的几何图形是 1° 切片

FoamFile

    version     2.0;
    format      ascii;
    class       dictionary;
    object      blockMeshDict;


convertToMeters 0.001;

wa 4.0;
cr 10.0;
pr 8.0;
cl 50.0;
px 20.0; 
pl 10.0; 
px2 #calc "$px+$pl"; 
ms 50; 

vertices
(
    (0                      0                         0)    //00
    (#calc "$pr*cos($wa/2)" #calc "$pr*sin($wa/2)"    0)    //01
    (#calc "$pr*cos($wa/2)" #calc "-$pr*sin($wa/2)"   0)    //02
    (#calc "$pr*cos($wa/2)" #calc "-$pr*sin($wa/2)"   $px)  //03
    (#calc "$pr*cos($wa/2)" #calc "$pr*sin($wa/2)"    $px)  //04
    (0                      0                         $px)  //05
    (#calc "$cr*cos($wa/2)" #calc "$cr*sin($wa/2)"    $px)  //06
    (#calc "$cr*cos($wa/2)" #calc "$cr*sin($wa/2)"    0)    //07
    (#calc "$cr*cos($wa/2)" #calc "-$cr*sin($wa/2)"   0)    //08
    (#calc "$cr*cos($wa/2)" #calc "-$cr*sin($wa/2)"   $px)  //09
    (#calc "$cr*cos($wa/2)" #calc "-$cr*sin($wa/2)"   $px2) //10
    (#calc "$cr*cos($wa/2)" #calc "$cr*sin($wa/2)"    $px2) //11
    (#calc "$pr*cos($wa/2)" #calc "$pr*sin($wa/2)"    $px2) //12
    (#calc "$pr*cos($wa/2)" #calc "-$pr*sin($wa/2)"   $px2) //13
    (#calc "$pr*cos($wa/2)" #calc "-$pr*sin($wa/2)"   $cl)  //14
    (#calc "$pr*cos($wa/2)" #calc "$pr*sin($wa/2)"    $cl)  //15
    (#calc "$cr*cos($wa/2)" #calc "$cr*sin($wa/2)"    $cl)  //16
    (#calc "$cr*cos($wa/2)" #calc "-$cr*sin($wa/2)"   $cl)  //17
    (0                      0                         $cl)  //18
    (0                      0                         $px2) //19
);

blocks
(
    hex (0  1  2  0  5  4  3  5)         ($ms 1 $ms) simpleGrading (1 1 1)
    hex (1  7  8  2  4  6  9  3)         ($ms 1 $ms) simpleGrading (1 1 1)
    hex (4  6  9  3  12 11 10 13)        ($ms 1 $ms) simpleGrading (1 1 1)
    hex (12 11 10 13 15 16 17 14)        ($ms 1 $ms) simpleGrading (1 1 1)
    hex (19 12 13 19 18 15 14 18)        ($ms 1 $ms) simpleGrading (1 1 1)
);

edges
(
);

boundary
(
    inlet
    
        type patch;
        faces
        (
            (0 2 1 0)
            (1 2 8 7)
        );
    
    outlet
    
        type patch;
        faces
        (
            (18 15 14 18)
            (15 16 17 14)
        );
    
    walls
    
        type wall;
        faces
        (
            (7  8  9  6)
            (6  9  10 11)
            (11 10 17 16)
        );
    
    wedgeBack
    
        type patch;
        faces
        (
            (0  1  4  5)
            (1  7  6  4)
            (4  6  11 12)
            (12 11 16 15)
            (19 12 15 18)
        );
    

    wedgeFront
    
        type patch;
        faces
        (
            (0  2  3  5)
            (2  8  9  3)
            (3  9  10 13)
            (13 10 17 14)
            (19 13 14 18)
        );
    

    axis
      
           type empty;
           faces  
           (
               (0  5  5  0)
               (19 18 18 19)
           );
    
);

mergePatchPairs
(
);

【讨论】:

请注意,您在三角函数中输入的是以弧度为单位的角度,而不是度数。因此,我只能创建一个值为 wa=4 和 wa=5 的有效网格。 楔形面片必须是 wedge 类型,一旦你运行你的模拟,但是为了解决网格问题,将它们设置为 patch 类型会使网格生成更加宽容。我发布的图像是带有 patch 类型的楔形补丁,如果我将它们设置为 wedge 类型,网格生成将失败,并且我将无法看到块结构。跨度> 补丁以某种方式定义,使面法线指向外侧。 Right-hand rule 对此非常有用。将拇指指向某个方向,使其指向外侧;然后沿着你的食指围绕补丁边界访问所有顶点。 用户指南:给定顶点的顺序必须是这样的,从块内部看,从任何顶点开始,必须以顺时针方向遍历面来定义其他顶点。 有一个预定义的函数可以使用:radHalfAngle #calc "degToRad($halfAngle)";,但您发布的内容也应该可以解决问题。

以上是关于轴对称 blockMeshDict:FOAM FATAL ERROR:wedge ... 中心平面与坐标平面不对齐的主要内容,如果未能解决你的问题,请参考以下文章

Foam::anisotropicFilter 实现的学术参考是啥?

sonicFoam forwardStep 现实边界条件导致错误::printStack(Foam::Ostream&)

E. Mike and Foam 容斥原理

艾多美洗面奶atom美atomy泡沫美白洗面奶杀死螨虫清洁皮肤Foam Cleansing

OpenFOAM中funkySetFields的安装与使用

shader之——湖水(河流倒影)