CFD Online Logo CFD Online URL
www.cfd-online.com
[Sponsors]
Home > Forums > Software User Forums > OpenFOAM > OpenFOAM Meshing & Mesh Conversion

[snappyHexMesh] Layers don't fully surround surface

Register Blogs Community New Posts Updated Threads Search

Like Tree2Likes
  • 1 Post By kalyangoparaju
  • 1 Post By wyldckat

 
 
LinkBack Thread Tools Search this Thread Display Modes
Prev Previous Post   Next Post Next
Old   July 10, 2012, 15:44
Default Layers don't fully surround surface
  #1
New Member
 
Eric
Join Date: Jan 2012
Posts: 18
Rep Power: 14
EVBUCF is on a distinguished road
Hello all,

I am using SnappyHexMesh for the first time since the previous cases I have ran seem to give an inaccurate boundary layer and I was hoping to fix this with SHM. I am importing a .stl file which was exported from a SolidWorks CAD model. The problem I seem to be having is that the layers which I have defined do not fully surround the surface. I have attached pictures to show what I mean.

Another problem is that there are small dimples that form on the surface which are undesirable. How can I smooth these bumps out?

Lastly, it seems like SHM likes to refine the mesh a lot on the symmetry line of the aircraft which I am meshing. The image attached should show you what I mean. Is this ok? How do I correct this?

Here is my SHMDict:
Code:
castellatedMesh true;  //create mesh
snap            true;    //cuts mesh at surface interface
addLayers       true;    //creates layers on surface


// 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
{
    FullX48b.stl        //must be stored in triSurfaceMesh
    {
        type triSurfaceMesh;
            //NEW NAME FOR PATCH    
    name FullX48b;

    }


//scales and cleans stl file (run before importing)
// surfaceConvert constant/triSurface/X48b.stl constant/triSurface/X48big.stl -clean -scale 100


    

   /* refinementBox    //some volume not defined as fine region..yet.
    {
        type searchableBox;
        min (-1.0 -0.7 0.0);
        max ( 8.0  0.7 2.5);
    } */
};



// Settings for the castellatedMesh generation.
castellatedMeshControls
{

    // Refinement parameters
    // ~~~~~~~~~~~~~~~~~~~~~

    // If local number of cells is >= maxLocalCells on any processor
    // switches from from refinement followed by balancing
    // (current method) to (weighted) balancing before refinement.
    maxLocalCells 100000;

    // Overall cell limit (approximately). Refinement will stop immediately
    // upon reaching this number so a refinement level might not complete.
    // Note that this is the number of cells before removing the part which
    // is not 'visible' from the keepPoint. The final number of cells might
    // actually be a lot less.
    maxGlobalCells 2000000;

    // The surface refinement loop might spend lots of iterations refining just a
    // few cells. This setting will cause refinement to stop if <= minimumRefine
    // are selected for refinement. Note: it will at least do one iteration
    // (unless the number of cells to refine is 0)
    minRefinementCells 10;

    // Allow a certain level of imbalance during refining
    // (since balancing is quite expensive)
    // Expressed as fraction of perfect balance (= overall number of cells /
    // nProcs). 0=balance always.
    maxLoadUnbalance 0.10;


    // Number of buffer layers between different levels.
    // 1 means normal 2:1 refinement restriction, larger means slower
    // refinement.
    nCellsBetweenLevels 6; // The minimum amount of cells required between refinement region the more you have the more space needed to reach refinement max to refiement min



    // Explicit feature edge refinement
    // ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


//If you have special features (sharp angles, trailing edges...) 
//You can isoilate these features with 

//surfaceFeatureExtract -including angle 150 -minElement 10  constant/triSuraface/name.obj
// (any 2 line of cells that make an angle above 150 will be included in this //extractedfeatureset) (outside angle between cells) or feature that have less then 10 elements

    // Specifies a level for any cell intersected by its edges.
    // This is a featureEdgeMesh, read from constant/triSurface for now.
    features
    (
        //{
            //name.obj

        //    file "name.eMesh";
        //    level 2;  //refinement for all extracted surfaces in name.obj files and name.emesh file
        //}
    );



    // 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
    {
        //X48b //patch you want to refine
FullX48b
        {
            // Surface-wise min and max refinement level
        //;level(min ref level, max ref level)
        //which is which is based on the the resolve feature angle below
            level (6 8);
        }
    }

    // Resolve sharp angles
    resolveFeatureAngle 30; //cells above angle use the max ref level, cells below use min


    // 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 4));
        //say 3 levels away from a surface
        /distance (1e-04 1e-03, 1e-02,1e-01)
        //distance away from surface corresponding to a refinement level (must be in order so OF knows which refinement level) the number of distance dictates how many levels of refinement at a given distance

//levels (max min)  aka anything inside the refinebox (in this case) must have level 4 refiment

        }*/
    }


    // 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 (0 0 0); //importnant only when you have multiple domains
    // point states what is the inner region of the mesh so just make sure it's within the domain and not on or in a surface


    // 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; //??????? someone find out
}



// 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 5;     //tolerance*cellsize on surface = distance to look for closest cell             distance relative to local cell size to look for adjacent cells

    //- Number of mesh displacement relaxation iterations.
    nSolveIter 0;    //deforms entire mesh to make good quality iterations

    //- Maximum number of snapping relaxation iterations. Should stop
    //  before upon reaching a correct mesh.
    nRelaxIter 5;    //relaxing sharp intersection makes smooth

    //- Highly experimental and wip: number of feature edge snapping
    //  iterations. Leave out altogether to disable.
    //  Do not use here since mesh resolution too low and baffles present
    //nFeatureSnapIter 10;

    //this is iterations to snap solely on the extracted special features
        

}



// Settings for the layer addition.
addLayersControls
{

    //adds boundary layers to a given surface


    // Are the thickness parameters below relative to the undistorted
    // size of the refined cell outside layer (true) or absolute sizes (false).
    relativeSizes true;        //relative to local cell size at surface
    //if this if false you would have to specify in meters the finallayerthickness, with it on we just use a factor of the local cell size
    // Per final patch (so not geometry!) the layer information
    layers
    {

    FullX48b_FullX48B
        //X48b
        {
            nSurfaceLayers 7;
        }
    }

    // Expansion factor for layer mesh
    expansionRatio 1.2; //cells are growing in height by a factor of 1.2 away from the surface

    //- 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.
    finalLayerThickness 0.3;    //0.3*(local cell size) is the final layer thickness

    //- 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.1;        //not enforced but seeks to meet this

    //- 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; //sometimes cells don't extrude away from surface due to cells meeting at a sharp angle this forces the cells to grow a layer away from the surface


    // Advanced settings

    //- When not to extrude surface. 0 is flat surface, 90 is when two faces
    //  make straight angle.
    featureAngle 179;  //this is how OF knows whether to not extrude a layer (nGrow forces this layer to extrude and disregards feature angle

    //- Maximum number of snapping relaxation iterations. Should stop
    //  before upon reaching a correct mesh.
    nRelaxIter 8;

    // 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 5;

    // 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 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
{
    //- 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; //as 0 it will always show mesh before snapping, after snapping, and after 


// Merge tolerance. Is fraction of overall bounding box of initial mesh.
// Note: the write tolerance needs to be higher than this.
mergeTolerance 1e-6;
bumps.jpg

surface.jpg

LE.jpg

TE.jpg
EVBUCF is offline   Reply With Quote

 

Tags
shm, snappyhexmesh


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are Off
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
Add layers on the whole surface Emanueledes OpenFOAM 10 December 19, 2017 14:40
Remeshing 2d surface for layers Grigoriy_Ermolaev ANSA 2 July 19, 2016 07:50
Cluster ID's not contiguous in compute-nodes domain. ??? Shogan FLUENT 1 May 28, 2014 15:03
[snappyHexMesh] Effect of adding layers with sHM Nucleophobe OpenFOAM Meshing & Mesh Conversion 4 August 20, 2012 16:45
[Gmsh] boundaries with gmshToFoam‏ ouafa OpenFOAM Meshing & Mesh Conversion 7 May 21, 2010 12:43


All times are GMT -4. The time now is 05:01.