|
[Sponsors] |
[snappyHexMesh] SHM not snapping to edge features after adding layers |
|
LinkBack | Thread Tools | Search this Thread | Display Modes |
March 9, 2022, 05:45 |
SHM not snapping to edge features after adding layers
|
#1 |
New Member
Stefano Garbin
Join Date: Sep 2010
Posts: 3
Rep Power: 16 |
Dear all,
I am trying to mesh a bike wheel with tyre using SHM. STL file has a very good quality and is watertight (it's around 70Mb) Here are the steps I am following: -generate edge feature with surfaceFeatureExtract and verify them with paraview --> OK -generate background mesh with blockMesh --> OK -generate castellated mesh with SHM --> OK -snap castellated mesh to STL surfaces and to explicit feature edges --> OK -add 10 layers with 1st layer thickness of absolute size (relativeSizes false) -->??? In the last step I notices that inflated mesh looses snapping to some of the edge features, as in the attached pictures. This is weird for me, and I don't understand what I am missing... Any hint to get a good mesh (external aero) Thanks Stefano I enclose snappyHexMeshDict and meshQualityDict Code:
/*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / O peration | Version: v2012 | | \\ / A nd | Website: 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 true; // Geometry. Definition of all surfaces. All surfaces are of class // searchableSurface. // Surfaces are used // - to specify refinement for any mesh cell intersecting it // - to specify refinement for any mesh cell inside/outside/near // - to 'snap' the mesh boundary to the surface geometry { rim.stl { type triSurfaceMesh; name rim; } hub.stl { type triSurfaceMesh; name hub; } //cil { type cylinder; point1 (0 0 -0.1); point2 (0 0 0.1); radius 0.5; } //cone {type searchableCone; point1 (0 0 -0.1); radius1 0.45; innerRadius1 0.2; point2 (0 0 0.1); radius2 0.45; innerRadius2 0.2; } refinementBox { type box; min (-3.0 -0.35 -0.8); max ( 0.5 0.8 0.2); } } // Settings for the castellatedMesh generation. castellatedMeshControls { maxLocalCells 1000000; maxGlobalCells 50000000; minRefinementCells 100; //10; maxLoadUnbalance 0.10; // Number of buffer layers between different levels. // 1 means normal 2:1 refinement restriction, larger means slower // refinement. nCellsBetweenLevels 3; // Explicit feature edge refinement // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ // Specifies a level for any cell intersected by its edges. // This is a featureEdgeMesh, read from constant/triSurface for now. features ( { file "hub.eMesh"; level 8; } { file "rim.eMesh"; level 8; } ); // Surface based refinement // ~~~~~~~~~~~~~~~~~~~~~~~~ // Specifies two levels for every surface. The first is the minimum level, // every cell intersecting a surface gets refined up to the minimum level. // The second level is the maximum level. Cells that 'see' multiple // intersections where the intersections make an // angle > resolveFeatureAngle get refined up to the maximum level. refinementSurfaces { rim { // Surface-wise min and max refinement level //level (3 3); level (8 8); patchInfo { type wall; } } hub { // Surface-wise min and max refinement level //level (3 3); level (8 8); patchInfo { type wall; } } } // Resolve sharp angles resolveFeatureAngle 15; // Region-wise refinement // ~~~~~~~~~~~~~~~~~~~~~~ // Specifies refinement level for cells in relation to a surface. One of // three modes // - distance. 'levels' specifies per distance to the surface the // wanted refinement level. The distances need to be specified in // descending order. // - inside. 'levels' is only one entry and only the level is used. All // cells inside the surface get refined up to the level. The surface // needs to be closed for this to be possible. // - outside. Same but cells outside. refinementRegions { refinementBox { mode inside; //levels ((1E15 3)); levels ((1E15 4)); gapLevel (3 0 8); gapMode mixed; } //wheel_rim "rim.*" { mode distance; levels ( //(0.025 5) //(0.1 4) (0.05 5) ); } "hub.*" { mode distance; levels ( //(0.025 5) //(0.1 4) (0.05 5) ); } } // Mesh selection // ~~~~~~~~~~~~~~ locationInMesh (-4.99 0.01 0.01); allowFreeStandingZoneFaces false; //true; } // Settings for the snapping. snapControls { //- Number of patch smoothing iterations before finding correspondence // to surface nSmoothPatch 3; //- Relative distance for points to be attracted by surface feature point // or edge. True distance is this factor times local // maximum edge length. tolerance 2.0; //- Number of mesh displacement relaxation iterations. nSolveIter 30; //- Maximum number of snapping relaxation iterations. Should stop // before upon reaching a correct mesh. nRelaxIter 5; // Feature snapping //- Number of feature edge snapping iterations. // Leave out altogether to disable. nFeatureSnapIter 10; //- Detect (geometric only) features by sampling the surface // (default=false). implicitFeatureSnap false; //true; //- Use castellatedMeshControls::features (default = true) explicitFeatureSnap true; //- Detect points on multiple surfaces (only for explicitFeatureSnap) multiRegionFeatureSnap false; // Attract points only to the surface they originate from. // This can improve snapping of intersecting surfaces. Default is false. //strictRegionSnap true; } // Settings for the layer addition. addLayersControls { // Are the thickness parameters below relative to the undistorted // size of the refined cell outside layer (true) or absolute sizes (false). //relativeSizes true; //false; relativeSizes false; thicknessModel firstAndRelativeFinal; //thicknessModel firstAndOverall; //thicknessModel firstAndExpansion; meshShrinker displacementMotionSolver; solver displacementLaplacian; displacementLaplacianCoeffs { diffusivity quadratic inverseDistance 1(wall); } // Per final patch (so not geometry!) the layer information layers { //"wheel_rim.*" "rim.*" { nSurfaceLayers 10; } "hub.*" { nSurfaceLayers 10; } } // Expansion factor for layer mesh //expansionRatio 1.1; ////da usare con thicknessModel firstAndExpansion; // Wanted thickness of final added cell layer. If multiple layers // is the thickness of the layer furthest away from the wall. // Relative to undistorted size of cell outside layer. // See relativeSizes parameter. firstLayerThickness 0.01e-3; finalLayerThickness 0.3; //0.7; //70% delle celle vicine //da usare con thicknessModel firstAndRelativeFinal; //thickness 0.2e-3; //da usare con thicknessModel firstAndOverall; // Minimum thickness of cell layer. If for any reason layer // cannot be above minThickness do not add layer. // Relative to undistorted size of cell outside layer. minThickness 0.002e-3; //0.1; // 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 1.7.x! (didn't do anything in 1.7.x) nGrow 0; // Advanced settings // When not to extrude surface. 0 is flat surface, 90 is when two faces // are perpendicular featureAngle 190; //330; //170; //30; //60; // At non-patched sides allow mesh to slip if extrusion direction makes // angle larger than slipFeatureAngle. slipFeatureAngle 30; //10; // Maximum number of snapping relaxation iterations. Should stop // before upon reaching a correct mesh. nRelaxIter 5; //3; // Number of smoothing iterations of surface normals nSmoothSurfaceNormals 1; // Number of smoothing iterations of interior mesh movement direction nSmoothNormals 3; // Smooth layer thickness over surface patches nSmoothThickness 10; // Stop layer growth on highly warped cells maxFaceThicknessRatio 0.5; // Reduce layer growth where ratio thickness to medial // distance is large maxThicknessToMedialRatio 0.3; // Angle used to pick up medial axis points // Note: changed(corrected) w.r.t 1.7.x! 90 degrees corresponds to 130 // in 1.7.x. minMedialAxisAngle 90; // 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 30; } // Generic mesh quality settings. At any undoable phase these determine // where to undo. meshQualityControls { #include "meshQualityDict" } // Advanced // Write flags writeFlags ( scalarLevels layerSets layerFields // write volScalarField for layer coverage ); // Debug flags /* debugFlags ( layerInfo ); */ // Merge tolerance. Is fraction of overall bounding box of initial mesh. // Note: the write tolerance needs to be higher than this. mergeTolerance 1e-6; // ************************************************************************* // Code:
/*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / O peration | Version: v1912 | | \\ / A nd | Website: www.openfoam.com | | \\/ M anipulation | | \*---------------------------------------------------------------------------*/ FoamFile { version 2.0; format ascii; class dictionary; object meshQualityDict; } // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // //- Maximum non-orthogonality allowed. Set to 180 to disable. maxNonOrtho 65; //- Max skewness allowed. Set to <0 to disable. maxBoundarySkewness 20; maxInternalSkewness 4; //- Max concaveness allowed. Is angle (in degrees) below which concavity // is allowed. 0 is straight face, <0 would be convex face. // Set to 180 to disable. maxConcave 180; //100; //80; //- Minimum pyramid volume. Is absolute volume of cell pyramid. // Set to a sensible fraction of the smallest cell volume expected. // Set to very negative number (e.g. -1E30) to disable. minVol 1e-13; //- Minimum quality of the tet formed by the face-centre // and variable base point minimum decomposition triangles and // the cell centre. Set to very negative number (e.g. -1E30) to // disable. // <0 = inside out tet, // 0 = flat tet // 1 = regular tet //mettere valore negativo e' l'unico modo di fare estrudere i layers minTetQuality -1e30; //1e-15; //- Minimum face area. Set to <0 to disable. minArea -1; //- Minimum face twist. Set to <-1 to disable. dot product of face normal // (itself the average of the triangle normals) // and face centre triangles normal minTwist 0.02; //- Minimum normalised cell determinant. This is the determinant of all // the areas of internal faces. It is a measure of how much of the // outside area of the cell is to other cells. The idea is that if all // outside faces of the cell are 'floating' (zeroGradient) the // 'fixedness' of the cell is determined by the area of the internal faces. // 1 = hex, <= 0 = folded or flattened illegal cell minDeterminant 0.001; //- Relative position of face in relation to cell centres (0.5 for orthogonal // mesh) (0 -> 0.5) minFaceWeight 0.05; //- Volume ratio of neighbouring cells (0 -> 1) minVolRatio 0.01; //- Per triangle normal compared to that of preceding triangle. Must be >0 // for Fluent compatibility minTriangleTwist -1; //- If >0 : preserve cells with all points on the surface if the // resulting volume after snapping (by approximation) is larger than // minVolCollapseRatio times old volume (i.e. not collapsed to flat cell). // If <0 : delete always. //minVolCollapseRatio 0.1; // Advanced //- Number of error distribution iterations nSmoothScale 4; //- Amount to scale back displacement at error points errorReduction 0.75; // ************************************************************************* // |
|
March 10, 2022, 04:17 |
|
#2 |
Senior Member
Yann
Join Date: Apr 2012
Location: France
Posts: 1,238
Rep Power: 29 |
Hi Stefano,
Which version are you using? According to your files headers, you are using the OpenCFD version. If I'm right, try adding this parameter into the addLayersControls section of your snappyHexMeshDict: Code:
mergePatchFacesAngle 45; Let us know if it solves your problem. Cheers, Yann |
|
|
|
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
[snappyHexMesh] Adding Layers to a curved Geometry | I7aniel | OpenFOAM Meshing & Mesh Conversion | 5 | November 8, 2021 10:42 |
[snappyHexMesh] Adding layers in multiRegion Case | Clau.77 | OpenFOAM Meshing & Mesh Conversion | 4 | July 1, 2021 09:40 |
sHM doesn't add layers to any surface | Vinzmann | Mesh Generation & Pre-Processing | 0 | March 23, 2021 06:02 |
[snappyHexMesh] SHM is not extruding/adding Layers everywhere | matthiasd | OpenFOAM Meshing & Mesh Conversion | 2 | October 16, 2016 17:45 |
fluent add additional zones for the mesh file | SSL | FLUENT | 2 | January 26, 2008 12:55 |