Skip to content

Meshy

网格交流区

237 主题 1.2k 帖子
  • snappyHexMesh的网格加密问题。

    1
    1 帖子
    16 浏览
    G

    我尝试使用snappyHexMesh对网格进行进一步的细化,但是我不理解为什么我的网格在运算完之后没有大小的变化。下面是我的snappyHexMeshdict,我是一个新手,我是按照案例修改的。我不知道目前是否正确,请问懂行的大佬问题出在了哪里。图片展示了我其中一次的生成效果,下面是在图片效果之后修改的。但实际上没有什么本质区别,我只是加多了blockMeshDict里面的网格大小。我不理解的点事为什么网格靠近建筑之后没有像其他案例中一层一层的加密就如同图2一样。@李东岳
    5a716988-7368-4906-b093-e6fd40a6ef55-aff66b0c98b57abe340265e2c8be7ed.jpg
    826aaa0d-82c1-41cc-ab20-06cd73c3a976-image.png

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

    // Which of the steps to run
    castellatedMesh true; // make basic mesh ?
    snap true; // decide to snap back to surface ?
    addLayers false; // decide to add viscous layers ?

    geometry // 录入STL文件
    {

    side_mesh_0_45.stl {type triSurfaceMesh; name side_0;} side_mesh_45_90.stl {type triSurfaceMesh; name side_1;} side_mesh_90_135.stl {type triSurfaceMesh; name side_2;} side_mesh_135_180.stl {type triSurfaceMesh; name side_3;} side_mesh_180_225.stl {type triSurfaceMesh; name side_4;} side_mesh_225_270.stl {type triSurfaceMesh; name side_5;} side_mesh_270_315.stl {type triSurfaceMesh; name side_6;} side_mesh_315_360.stl {type triSurfaceMesh; name side_7;} top_mesh.stl {type triSurfaceMesh; name top;} building.stl {type triSurfaceMesh; name building;} grassland.stl {type triSurfaceMesh; name grassland;} ground.stl {type triSurfaceMesh; name ground;} water.stl {type triSurfaceMesh; name water;} tree.stl {type triSurfaceMesh; name tree;} refinementBox {type searchableBox; min (-1500 -1500 -5); max (2200 2200 600);} // 建筑加密搜索盒 refinementBox_building { type searchableBox; min ( 740 -610 15); max ( 2250 860 280); } // 树木加密搜索盒 refinementBox_tree { type searchableBox; // 同理,这里改成包围你的植被群 min (720 -600 15); max (2250 860 80); }

    };

    castellatedMeshControls
    {
    maxLocalCells 2000000; // 每个 CPU 核心允许使用的最大网格单元数,避免某个核心负载过重
    maxGlobalCells 20000000; // 全局允许的最大网格单元数,在细化阶段如果超过这个数量,系统将触发删除操作,防止内存溢出
    maxRefinementIterations 5; // 有效地限制整体迭代次数
    minRefinementCells 10; // 提高触发终止的阈值 maxLoadUnbalance 0.10; // 允许的最大负载不平衡度,表示各个 CPU 核心之间的工作负载差异最多为 10%,确保负载均衡
    nCellsBetweenLevels 3; // 不同细化等级之间的网格扩展因子,设置为 1 表示高细化区域与低细化区域之间的过渡最平滑
    maxShellRefinementIter 10;
    // 边缘特征细化程度
    features
    (
    {file "building.eMesh"; level 2;}
    {file "tree.eMesh"; level 0;}

    {file "side_mesh_0_45.eMesh"; level 0;} {file "side_mesh_45_90.eMesh"; level 0;} {file "side_mesh_90_135.eMesh"; level 0;} {file "side_mesh_135_180.eMesh"; level 0;} {file "side_mesh_180_225.eMesh"; level 0;} {file "side_mesh_225_270.eMesh"; level 0;} {file "side_mesh_270_315.eMesh"; level 0;} {file "side_mesh_315_360.eMesh"; level 0;} {file "top_mesh.eMesh"; level 0;} {file "grassland.eMesh"; level 0;} {file "ground.eMesh"; level 0;} {file "water.eMesh"; level 0;} ); refinementSurfaces { building { level (2 3); patchInfo { type wall; inGroups (building); } } side_0 { level (1 1); patchInfo { type patch; inGroups (side); } } side_1 { level (1 1); patchInfo { type patch; inGroups (side); } } side_2 { level (1 1); patchInfo { type patch; inGroups (side); } } side_3 { level (1 1); patchInfo { type patch; inGroups (side); } } side_4 { level (1 1); patchInfo { type patch; inGroups (side); } } side_5 { level (1 1); patchInfo { type patch; inGroups (side); } } side_6 { level (1 1); patchInfo { type patch; inGroups (side); } } side_7 { level (1 1); patchInfo { type patch; inGroups (side); } } top { level (1 1); patchInfo { type patch; inGroups (top); } } grassland { level (1 2); patchInfo { type wall; inGroups (ground); } } ground { level (1 2); patchInfo { type wall; inGroups (ground); } } water { level (1 2); patchInfo { type wall; inGroups (ground); } } } resolveFeatureAngle 60; // 特征边缘角度,小于这个角度的边缘将被忽略 refinementRegions { tree { mode inside; levels ((0 1)); cellZone treeZone; } } // {wholeDomain {mode inside; levels ((1 1));}} // 细化区域,mode 为细化模式,levels 为细化等级 // {building {mode distance; levels ((1 2) (3 1));}} // 细化区域,mode 为细化模式,levels 为细化等级mode 为细化模式(包括inside对内部网格进行细化 outside distance根据距表面网格距离进行细化),levels 为细化等级 locationInMesh (100 100 100); //规定哪边网格是流域 allowFreeStandingZoneFaces true; // 允许自由区域面

    }

    snapControls
    {
    nSmoothPatch 3; // 平滑次数
    tolerance 0.5; // 两个网格点之间的最大距离
    nSolveIter 50; // 迭代次数
    nRelaxIter 8; // 松弛次数
    nFeatureSnapIter 10; // 特征边缘迭代次数
    implicitFeatureSnap true; // 隐式特征边缘
    explicitFeatureSnap true; // 显式特征边缘
    multiRegionFeatureSnap false; // 多区域特征边缘
    }

    addLayersControls
    {
    relativeSizes false; // 相对大小/绝对大小
    layers
    {
    building {nSurfaceLayers 1;}
    }

    expansionRatio 1; // 扩展比例 finalLayerThickness 0.3; // 最外层厚度 minThickness 1; // 最小厚度 nGrow 0; // 增长层数 // 高级设置: featureAngle 80; // 表面层生成的特征角度。0 表示平面,90 表示直角。如果几何表面的角度超过 80 度,则停止挤出层。 nRelaxIter 5; // 层生成过程中,最大允许的松弛迭代次数。用于平滑网格,防止扭曲或变形。 nSmoothSurfaceNormals 1; // 对表面法线的平滑处理次数,用于减少表面网格的尖锐突变。 nSmoothNormals 5; // 对网格内部运动方向的平滑处理迭代次数,确保网格平滑地向外扩展。 nSmoothThickness 10; // 平滑表面层厚度的迭代次数,数值越大,厚度分布越均匀。 maxFaceThicknessRatio 0.5; // 如果网格面太过扭曲(厚度超过此比值),则停止层生长。防止生成变形严重的网格。 maxThicknessToMedialRatio 0.3; // 层厚度与中线距离的比值,防止厚度过大时停止层的生长。 minMedianAxisAngle 130; // 中线轴的最小角度。如果角度过小,可能会跳过层生成。通常用于复杂几何体的细化。 nBufferCellsNoExtrude 0; // 用于新层终止时创建的缓冲区单元数,防止层过度扩展。 nLayerIter 50; // 添加层的最大迭代次数,限制网格生成过程中层生长的迭代次数

    }
    // 控制网格质量的设置。任何无法处理的阶段将根据这些设置回退操作。
    meshQualityControls
    {
    maxNonOrtho 65; // 允许的最大非正交角(度数),控制网格的正交性。
    maxBoundarySkewness 4; // 网格边界倾斜度的最大允许值。
    maxInternalSkewness 4; // 内部网格单元的最大倾斜度。
    maxConcave 80; // 允许的最大凹角(度数),控制网格单元的形状。
    maxFaceDiff 2;
    minFlatness 0.5; // 允许的最小平面度,确保网格面不过于扭曲。
    minVol 5e-11; // 允许的最小单元体积,避免生成过小的网格单元。
    minTetQuality 1e-8; // 四面体网格单元的最小质量。
    minArea -1; // 最小网格面面积,-1 表示忽略此限制。
    minTwist 0.02; // 网格单元的最小扭曲度,确保网格质量。
    minDeterminant 0.001; // 网格最小行列式值,衡量网格形状的质量。
    minFaceWeight 0.02; // 网格面权重的最小值,用于衡量网格面质量。
    minVolRatio 0.01; // 最小网格体积比,衡量相邻单元的体积差异。
    minTriangleTwist -1; // 最小三角形扭曲度,-1 表示忽略此限制。

    // 高级设置: nSmoothScale 5; // 控制网格平滑的比例,数值越大,网格越平整。 errorReduction 0.75; // 错误减少系数,控制每次迭代中如何减少网格问题。

    }

    // 高级设置:是否启用调试信息
    debug 0; // 设置为 0 表示关闭调试信息。

    // 网格合并容差。相邻网格单元如果在此容差范围内,将被合并。
    // 容差值是初始网格边界框尺寸的一个分数。
    mergeTolerance 1E-6; // 合并容差,值越大,网格越容易被合并。

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

  • pointwise输出二维网格到openfoam无法计算

    4
    4 帖子
    3k 浏览
    A

    @zzcfd 改fvSolution,把p改成这个solver PCG; preconditioner DIC;试试

  • icem如何将一个part中所有网格面分别设置part?

    2
    2 帖子
    788 浏览
    李东岳

    这个要是openfaom的网格,就好处理了。2亿网格确实太多了,icem我也只画过最多几百万的网格。卡的都不行。你这2亿网格太疯狂了,机器内存应该很大。

  • 尖角附近的网格过度

    11
    11 帖子
    2k 浏览
    I

    @HITSC30 icem不是很熟练,我去试一下

  • STAR-CCM+网格转换后,checkMesh报错

    2
    2 帖子
    629 浏览
    I

    1.我猜是symmetry这个边界条件,试一下改成wall,然后在0文件夹里自己定义上下的slip边界条件。openfoam会对生成的网格编号进行检查,外部软件的网格节点编号和blockMesh的逻辑不一样。
    2.可能是前后的empty边界问题,你可以在starccm里生成3D网格后,重新在openfoam里extrude来生成前后empty边界
    类似这样
    constructFrom patch;
    sourceCase "../w3-d_hc1-3";
    sourcePatches (symFront);

    // If construct from patch: patch to use for back (can be same as sourcePatch)
    exposedPatchName symBack;

    // Flip surface normals before usage. Valid only for extrude from surface or
    // patch.
    flipNormals false;

    //- Linear extrusion in point-normal direction
    extrudeModel linearNormal;

    nLayers 1;

    expansionRatio 1.0;

    linearNormalCoeffs
    {
    thickness 1;
    }

    // Do front and back need to be merged? Usually only makes sense for 360
    // degree wedges.
    mergeFaces false; //true;

    // Merge small edges. Fraction of bounding box.
    mergeTol 0;

  • 关于谱元法和有限体积需求网格的区别

    4
    4 帖子
    796 浏览
    S

    @XieXiaoyang 好文章,我去研究研究

  • ICEM导出inp文件出错?

    2
    2 帖子
    2k 浏览
    J

    导出时候选择了如下这些选项
    image.png

  • LIGGGHTS中stl网格导入报错

    2
    2 帖子
    2k 浏览
    J

    Liggghts对stl的要求很多,最好将stl中狭长的单元去掉。如果不好处理的话,就拿stl去生成下面网格,控制一下面网格质量,再将面网格导出为stl格式

  • 3 帖子
    3k 浏览
    J

    请问像这种狭窄处要划分边界层,怎样处理能保证网格高质量呢

  • 5 帖子
    3k 浏览
    zzkluckZ

    说一点我的看法,不一定对,仅供参考:

    non-orthogonality

    dca809a8-9cd5-4f74-9329-6d8459966264-image.png

    non-orthogonality由snappyHexMeshDict.meshQualityControls.maxNonOrtho直接控制,你的snappyHexMeshDict里这个值是45,这个值一般不需要控制的这么小,65是更常见的配置值。

    另外,你的snappyHexMeshDict里,relaxed.maxNonOrtho给的是75,这个值通常是和maxNonOrtho = 65相配合的。如果你真的要把maxNonOrtho设为45,按逻辑来说relaxed.maxNonOrtho也应该相应的减少一点。

    网格纵横比

    这里截取你的背景网格配置:

    vertices ( (-340 -302 -3) // Slightly smaller than the STL model bounds (332 -302 -3) (332 341 -3) (-340 341 -3) (-340 -302 95) // Slightly larger than the STL model bounds (332 -302 95) (332 341 95) (-340 341 95) ); blocks ( hex (0 1 2 3 4 5 6 7) (100 100 100) simpleGrading (1 1 1) // Adjust mesh density as needed );

    如上面B老师所说,你网格的大纵横比就是这里导致的。如果不是有意要在Z方向上做加密的话没必要这么分块,我口算一下,大概(70 65 10)就可以。

    castellate

    从上面可以看到,你背景网格的量级是100 * 100 * 100 = 1,000,000;而你SHM的maxGlobalCells给了2,000,000。这看起来不太对,这几乎没给SHM进一步细分的空间,从结果来看也是这样,网格划分的不够细。

    另外,截取一段level的配置:

    features ( { file "building.eMesh"; level 3; } ...... ); refinementSurfaces { building { level (3 4); } ...... }

    我理解features的level应该不低于Surface的。

    胡乱写了一些个人看法,希望能有所帮助。

  • 有关SHM和多相流求解后处理时的异常情况

    3
    3 帖子
    731 浏览

    上传一下我的snappyhexMeshDict文件,请各位老师帮忙看看```
    code_text

    ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | Website: https://openfoam.org \\ / A nd | Version: 10 \\/ M anipulation | \*---------------------------------------------------------------------------*/ FoamFile { format ascii; class dictionary; object snappyHexMeshDict; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // #includeEtc "caseDicts/mesh/generation/snappyHexMeshDict.cfg" castellatedMesh true; snap true; addLayers true; geometry { cylinder { type triSurfaceMesh; file "cylinder.stl"; } refinementBox { type searchableBox; min (0.0 0.0 0.08); max (1.2 0.2 0.22); } }; castellatedMeshControls { maxLocalCells 200000; maxGlobalCells 5000000; minRefinementCells 10; maxLoadUnbalance 0.10; nCellsBetweenLevels 6; features ( { file "cylinder.eMesh"; level 3; } ); refinementSurfaces { cylinder { level (3 3); patchInfo { type wall; } } } refinementRegions { refinementBox { mode inside; level 1; } } insidePoint (0.4 0.1 0.15); } snapControls { nSmoothPatch 3; tolerance 2.0; nSolveIter 30; nRelaxIter 5; nFeatureSnapIter 10; explicitFeatureSnap true; implicitFeatureSnap false; multiRegionFeatureSnap false; } addLayersControls { layers { "(cylinder_stl_face<stlunit=MM>|cylinder_stl_top<stlunit=MM>)" { nSurfaceLayers 10; } } relativeSizes true; expansionRatio 1.05; finalLayerThickness 0.8; minThickness 0.5; } meshQualityControls {} writeFlags ( // scalarLevels // layerSets // layerFields ); mergeTolerance 1e-6; // ************************************************************************* //
  • ICEM绘制的网格导入openfoam之后出现异常

    4
    4 帖子
    1k 浏览

    @李东岳 好的,谢谢李老师

  • 26 帖子
    20k 浏览

    @King_RVM 你好,使用starCCM绘制网格,然后导入到openFoam里面跑算例,计算结果会出现质量不好的情况么?请教一下~

  • HyperMesh为STARCCM+生成面网格

    8
    8 帖子
    5k 浏览
    H

    @李东岳 在 HyperMesh为STARCCM+生成面网格 中说:

    感谢分享!有益于后来人

    共同进步!

  • 3 帖子
    1k 浏览
    2

    感谢东岳老师,我尝试着改小了,问题得到了部分解决。

  • 每日一问:有关icem网格检查失败问题

    1
    1 帖子
    875 浏览
    2

    icem网格划分导入fluent时检查失败,显示Error: interface zone 3 has two adjacent cell zones.
    4f68eb65-132e-4314-b0f6-6964dc466673-image.png

  • 有关紧密排布圆柱的网格绘制

    10
    10 帖子
    3k 浏览

    @李东岳 感谢李老师,我试试看能不能画出来

  • 1 帖子
    495 浏览
    H

    c7a27198-c865-41aa-bc5f-ce28c85f32d3-1728486466827.jpg

    请教各位大佬专家,立方体里边,挖掉一个圆柱体,对圆柱顶面进行切割,上半部分为流体入口边界,请问又什么好的网格划分思路吗?

    单纯立方体里挖一个圆柱能够实现,但中间多切了一条线,不知道怎么操作比较好。

    另外,有没有好的网格划分方面的教程资料推荐?

    恳请大佬们指点。

  • 2 帖子
    1k 浏览
    bestucanB

    https://www.cfd-online.com/Forums/openfoam-meshing/133850-snappyhexmesh-problems.html

  • 前处理,进口面问题

    4
    4 帖子
    3k 浏览
    bestucanB

    icem也有这个功能,只是我没用过,

    https://cfd-china.com/topic/6069/搅拌反应器icem结构网格划分方式/7

    Screenshot from 2024-09-28 14-40-10.png