|
[Sponsors] |
[snappyHexMesh] Error defining boundary layer around cube snappyHexMesh |
|
LinkBack | Thread Tools | Search this Thread | Display Modes |
July 7, 2018, 17:05 |
Error defining boundary layer around cube snappyHexMesh
|
#1 |
Member
Cristina Hernandez
Join Date: May 2018
Posts: 35
Rep Power: 8 |
Hi,
I am trying to simualte the flow around a cube with rounded edges using OpenFOAM and I need to model the boundary layer on the surface of the cube. I am using snappyHexMesh to generate the mesh and have sucessfully defined a region with a finer mesh around the cube (first 2 steps: castellating and snapping), see attached file mesh_cube.jpg. However, the last step (addying layers) is not working as I want. My objective is to have 20 layers around the surface of the cube with a very small thickness to accurately model the boundary layer and fulfill the y+< 1 requirement for the first layer. So far, no layers have been created. Find a link to my case with all the files here: https://drive.google.com/drive/folde...qV?usp=sharing I also copy here my snappyHexMesh file: Code:
/*--------------------------------*- C++ -*----------------------------------*\ | ========= | | | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | | \\ / O peration | Version: 2.2.1 | | \\ / 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; 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 { cube.stl { type triSurfaceMesh; name cube; } refinementBox1 { type searchableBox; min (18.5 15.25 5.25); max (29 19.75 9.75); } }; // PHASE 1. CASTELLATEDMESH settings castellatedMeshControls { // Refinement parameters maxLocalCells 10000000; maxGlobalCells 20000000; minRefinementCells 0; //antes tenía 10, del tío random de internet nCellsBetweenLevels 1; // 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 "cube.eMesh";//file "cube.extendedFeatureEdgeMesh" level 3; //antes tenía 0, ERRROOOOOOR } ); // 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 { cube { // Surface-wise min and max refinement level level (3 3); //antes tenía 7 7 // Optional specification of patch type (default is wall). No // constraint types (cyclic, symmetry) etc. are allowed. patchInfo { type wall; inGroups (cubeGroup); } } } // Resolve sharp angles resolveFeatureAngle 10; //con 10 OK, edges whose adjacent surface normals are at angle > value are resolved // 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 { //cube //{ //mode distance; //levels ((0.01 3)); //antes 0.0006 6 //} refinementBox1 { mode inside; levels ((1E15 3)); //antes 5, 4 me genera ~20 celdas en square, OK } } // Mesh selection // ~~~~~~~~~~~~~~ // After refinement patches get added for all refinementSurfaces and // all cells intersecting the surfaces get put into these patches. The // section reachable from the locationInMesh is kept. // NOTE: This point should never be on a face, always inside a cell, even // after refinement. locationInMesh (9.23149e-05 0.0025 0.0025); //antes 0 0 1 // Whether any faceZones (as specified in the refinementSurfaces) // are only on the boundary of corresponding cellZones or also allow // free-standing zone faces. Not used if there are no faceZones. allowFreeStandingZoneFaces true; } // Phase 2: SNAPPING Settings. snapControls { //- Number of patch smoothing iterations before finding correspondence to surface nSmoothPatch 5; //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;//1.0 //- Number of mesh displacement relaxation iterations. nSolveIter 30;//300 //- 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 15; //10 //- Detect (geometric only) features by sampling the surface // (default=false). implicitFeatureSnap false; //- Use castellatedMeshControls::features (default = true) explicitFeatureSnap true; //- Detect points on multiple surfaces (only for explicitFeatureSnap) multiRegionFeatureSnap false; //true } // PHASE 3: LAYERING Settings addLayersControls { // Are the thickness parameters below relative to the undistorted // size of the refined cell outside layer (true) or absolute sizes (false). relativeSizes false; // Per final patch (so not geometry!) the layer information layers { cube { nSurfaceLayers 20; } } // Expansion factor for layer mesh expansionRatio 1.1; // 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. // is the thickness of the layer furthest away from the wall. // See relativeSizes parameter. firstLayerThickness 1.573E-3; // 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 2.9E-4; // 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 1; // Advanced settings // When not to extrude surface. 0 is flat surface, 90 is when two faces // are perpendicular featureAngle 180; //antes a 30 // At non-patched sides allow mesh to slip if extrusion direction makes // angle larger than slipFeatureAngle. slipFeatureAngle 30; // Maximum number of snapping relaxation iterations. Should stop // before upon reaching a correct mesh. nRelaxIter 5; // 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 17x! 90 degrees corresponds to 130 in 17x. minMedianAxisAngle 180; // 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; } // Generic mesh quality settings. At any undoable phase these determine // where to undo. meshQualityControls { //- 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 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. This has to be a positive number for tracking // to work. Set to very negative number (e.g. -1E30) to // disable. // <0 = inside out tet, // 0 = flat tet // 1 = regular tet minTetQuality 1e-30; //- Minimum face area. Set to <0 to disable. minArea -1; //- Minimum face twist. Set to <-1 to disable. dot product of face normal //- and face centre triangles normal minTwist 0.02; //- minimum normalised cell determinant //- 1 = hex, <= 0 = folded or flattened illegal cell minDeterminant 0.001; //- minFaceWeight (0 -> 0.5) minFaceWeight 0.02; //- minVolRatio (0 -> 1) minVolRatio 0.01; //must be >0 for Fluent compatibility minTriangleTwist -1; // Advanced //- Number of error distribution iterations nSmoothScale 4; //- amount to scale back displacement at error points errorReduction 0.75; } // Advanced // Flags for optional output // 0 : only write final meshes // 1 : write intermediate meshes // 2 : write volScalarField with cellLevel for postprocessing // 4 : write current intersections as .obj files debug 0; // Merge tolerance. Is fraction of overall bounding box of initial mesh. // Note: the write tolerance needs to be higher than this. mergeTolerance 1e-6; // ************************************************************************* // Thanks! Cristina |
|
July 9, 2018, 08:14 |
|
#2 |
New Member
Sarath
Join Date: Mar 2017
Location: Spain
Posts: 22
Rep Power: 9 |
Which version of OpenFoam you are using?
Did you check the timesteps created with SHM? or did you use -overwrite flag? I tested with your case with some minor modification in surfaceFeatureExtractDict to cope up with version and I found shm creating layers. Regards, sarath |
|
July 9, 2018, 14:38 |
|
#3 | |
Member
Cristina Hernandez
Join Date: May 2018
Posts: 35
Rep Power: 8 |
Quote:
However, my problem now is that layers are collapsing. My objective is generate a create between 10 and 20 layers and the first layer around the obstacle should have a thickness around 1E-5 m (to fulfill y+<1 criteria). So far I have tried with 10 layers and first layer thicknesses between 2E-4 m to 8E-4 m (which correspond to relative values of 0.01 to 0.04, respectively). In all cases my cells start to collapse as shown in the picture and I get less than 10 layers (around 6, increasing a bit as I increase first layer thickness). slice1.1_thickness004.PNG I have also tried with different number of layers but I had similar results. Do you have any suggestions on how to solve this? I really need a very fine first layer (although I am still far) and I don't understand why this is behaving like this or which parameteres to modify. Find a link to my modified case: https://drive.google.com/drive/folde...w__7ukbSA2ZvqV Any advice would be helpful, Thanks in advance Cristina |
||
July 10, 2018, 05:15 |
|
#4 |
New Member
Sarath
Join Date: Mar 2017
Location: Spain
Posts: 22
Rep Power: 9 |
You can specify layer thickness by these following ways :
- expansionRatio and finalLayerThickness (cell nearest internal mesh) - expansionRatio and firstLayerThickness (cell on surface) - overall thickness and firstLayerThickness - overall thickness and finalLayerThickness - overall thickness and expansionRatio Try changing your configuration according to desired thickness. regards, Sarath |
|
July 10, 2018, 07:08 |
|
#5 | |
Member
Cristina Hernandez
Join Date: May 2018
Posts: 35
Rep Power: 8 |
Quote:
Thanks, Cristina |
||
October 16, 2021, 11:56 |
Similar problem
|
#6 |
New Member
Join Date: Sep 2021
Posts: 1
Rep Power: 0 |
Hello, Did you solved your problem. If yes please put your solution here. I am facing similar issue
|
|
|
|
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
Error - Solar absorber - Solar Thermal Radiation | MichaelK | CFX | 12 | September 1, 2016 06:15 |
Wrong flow in ratating domain problem | Sanyo | CFX | 17 | August 15, 2015 07:20 |
Radiation interface | hinca | CFX | 15 | January 26, 2014 18:11 |
[snappyHexMesh] Boundary layer grid for Wigley hull by snappyHexMesh | novak1203 | OpenFOAM Meshing & Mesh Conversion | 8 | June 27, 2013 13:03 |
[snappyHexMesh] Boundary layer in a pipe | Clementhuon | OpenFOAM Meshing & Mesh Conversion | 6 | March 12, 2012 13:41 |