snappyHexMesh的网格加密问题。
-
我尝试使用snappyHexMesh对网格进行进一步的细化,但是我不理解为什么我的网格在运算完之后没有大小的变化。下面是我的snappyHexMeshdict,我是一个新手,我是按照案例修改的。我不知道目前是否正确,请问懂行的大佬问题出在了哪里。图片展示了我其中一次的生成效果,下面是在图片效果之后修改的。但实际上没有什么本质区别,我只是加多了blockMeshDict里面的网格大小。我不理解的点事为什么网格靠近建筑之后没有像其他案例中一层一层的加密就如同图2一样。@李东岳
/--------------------------------- 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; // 合并容差,值越大,网格越容易被合并。// ************************************************************************* //