snappyHexMesh定义了多域网格(MultiRegion)失败。
-
@东岳 找到问题所在了,因为球体无特征边缘,所以将球体的特征边缘删除即可。
这是我修改后的SnappyHexMeshDict文件/*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / O peration | Version: 6 | | \\ / A nd | Web: www.OpenFOAM.com | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile { version 2.0; format ascii; class dictionary; object snappyHexMeshDict; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // Which of the steps to run castellatedMesh true; snap true; addLayers false; // Optional singleRegionName false; // Geometry. Definition of all surfaces. geometry { solid.stl { type triSurfaceMesh; regions { solid {name solid_to_fluid;} } } fluid.stl { type triSurfaceMesh; regions { inlet {name inlet;} outlet {name outlet;} top {name top;} bottom {name bottom;} front {name front;} back {name back;} } } }; // Settings for the castellatedMesh generation. castellatedMeshControls { // Refinement parameters // ~~~~~~~~~~~~~~~~~~~~~ maxLocalCells 10000000; maxGlobalCells 20000000; minRefinementCells 0; maxLoadUnbalance 0; nCellsBetweenLevels 1; // Explicit feature edge refinement // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ features ( { file "fluid.eMesh"; level 1; } ); // Surface based refinement // ~~~~~~~~~~~~~~~~~~~~~~~~ refinementSurfaces { solid.stl { // Surface-wise min and max refinement level level (0 0); regions { solid {level (3 3);} } faceZone solid; cellZone solid; cellZoneInside inside; } fluid.stl { // Surface-wise min and max refinement level level (0 0); regions { inlet {level (0 0);} outlet {level (0 0);} top {level (0 0);} bottom {level (0 0);} front {level (0 0);} back {level (0 0);} } faceZone fluid; cellZone fluid; cellZoneInside inside; } } // Feature angle: resolveFeatureAngle 20; // Region-wise refinement // ~~~~~~~~~~~~~~~~~~~~~~ refinementRegions { solid.stl { mode inside; levels ((0 3)); } fluid.stl { mode inside; levels ((0 1)); } } // Mesh selection // ~~~~~~~~~~~~~~ locationInMesh (31.76 17.64 31.56); // free-standing zone faces. Not used if there are no faceZones. allowFreeStandingZoneFaces true; } snapControls { nSmoothPatch 3; tolerance 3; nSolveIter 30; nRelaxIter 10; nFeatureSnapIter 10; } // Settings for the layer addition. addLayersControls { relativeSizes true; expansionRatio 1.2; finalLayerThickness 0.5; minThickness 0.1; // Per final patch (so not geometry!) the layer information // Note: This behaviour changed after 21x. Any non-mentioned patches // now slide unless: // - nSurfaceLayers is explicitly mentioned to be 0. // - angle to nearest surface < slipFeatureAngle (see below) layers { } // If points get not extruded do nGrow layers of connected faces that are // also not grown. This helps convergence of the layer addition process // close to features. // Note: changed(corrected) w.r.t 17x! (didn't do anything in 17x) nGrow 0; featureAngle 130; //default //featureAngle 180; //featureAngle 270; // Stop layer growth on highly warped cells maxFaceThicknessRatio 0.5; nSmoothSurfaceNormals 1; // Smooth layer thickness over surface patches nSmoothThickness 10; // Medial axis analysis // Angle used to pick up medial axis points // Note: changed(corrected) w.r.t 17x! 90 degrees corresponds to 130 // in 17x. minMedialAxisAngle 90; minMedianAxisAngle 90; // Reduce layer growth where ratio thickness to medial // distance is large maxThicknessToMedialRatio 0.3; // Number of smoothing iterations of interior mesh movement direction nSmoothNormals 3; // Optional: limit the number of steps walking away from the surface. // Default is unlimited. //nMedialAxisIter 10; // Optional: smooth displacement after medial axis determination. // default is 0. //nSmoothDisplacement 90; // (wip)Optional: do not extrude a point if none of the surrounding points is // not extruded. Default is false. //detectExtrusionIsland true; // Mesh shrinking // Optional: at non-patched sides allow mesh to slip if extrusion // direction makes angle larger than slipFeatureAngle. Default is // 0.5*featureAngle. slipFeatureAngle 30; // Maximum number of snapping relaxation iterations. Should stop // before upon reaching a correct mesh. nRelaxIter 5; // Create buffer region for new layer terminations nBufferCellsNoExtrude 0; // Overall max number of layer addition iterations. The mesher will // exit if it reaches this number of iterations; possibly with an // illegal mesh. nLayerIter 50; // Max number of iterations after which relaxed meshQuality controls // get used. Up to nRelaxedIter it uses the settings in // meshQualityControls, // after nRelaxedIter it uses the values in // meshQualityControls::relaxed. nRelaxedIter 20; // Additional reporting: if there are just a few faces where there // are mesh errors (after adding the layers) print their face centres. // This helps in tracking down problematic mesh areas. additionalReporting true; } // Generic mesh quality settings. At any undoable phase these determine // where to undo. meshQualityControls { // Specify mesh quality constraints in separate dictionary so can // be reused (e.g. checkMesh -meshQuality) #include "meshQualityDict" // Optional : some meshing phases allow usage of relaxed rules. // See e.g. addLayersControls::nRelaxedIter. relaxed { // Maximum non-orthogonality allowed. Set to 180 to disable. maxNonOrtho 75; } //minFlatness 0.5; // Advanced // Number of error distribution iterations nSmoothScale 4; // amount to scale back displacement at error points errorReduction 0.75; } // Advanced //debug 0; //debug 3; //// Debug flags /* debugFlags ( mesh // write intermediate meshes intersections // write current mesh intersections as .obj files featureSeeds // write information about explicit feature edge // refinement attraction // write attraction as .obj files layerInfo // write information about layers ); */ // //// Write flags writeFlags ( scalarLevels // write volScalarField with cellLevel for postprocessing layerSets // write cellSets, faceSets of faces in layer layerFields // write volScalarField for layer coverage ); // Merge tolerance. Is fraction of overall bounding box of initial mesh. // Note: the write tolerance needs to be higher than this. mergeTolerance 1e-6; // ************************************************************************* //