CFD Online Logo CFD Online URL
www.cfd-online.com
[Sponsors]
Home > Forums > Software User Forums > OpenFOAM > OpenFOAM Running, Solving & CFD

OpenFoam help with snappy

Register Blogs Members List Search Today's Posts Mark Forums Read

Like Tree1Likes
  • 1 Post By RobertHB

Reply
 
LinkBack Thread Tools Search this Thread Display Modes
Old   May 7, 2019, 05:12
Default OpenFoam help with snappy
  #1
Member
 
Christophk
Join Date: Oct 2018
Posts: 33
Rep Power: 7
syntex is on a distinguished road
Hello, I got a problem with snappyHexMesh. I always get some skew faces and I don't know how I can change it. Do the snappyDict and the original mesh not fit together or is the obj-file wrong? I attached the snappyDict MeshDict and obj-file.
I would be grateful for any help.
blockMesh:

Code:
vertices
(
    (-0.5 -0.5 -0.5)            //0
    ( 0.5 -0.5 -0.5)            //1
    ( 0.5  0.5 -0.5)            //2
    (-0.5  0.5 -0.5)            //3
    (-0.5 -0.5  1.5)        //4
    ( 0.5 -0.5  1.5)              //5
    ( 0.5  0.5  1.5)              //6
    (-0.5  0.5  1.5)             //7
);

blocks
(
    hex (0 1 2 3 4 5 6 7) (100 100 100) simpleGrading (1 1 1)
);

edges
(
);

boundary
(
    upperWall
    {
        type patch;
        faces
        (
            (2 6 7 3)
        );
    }

    lowerWall
    {
        type patch;
        faces
        (
            (1 5 4 0)
        );
    }

    inlet
    {
        type patch;
        faces
        (
            (0 1 2 3)
        );
    }

    outlet
    {
        type patch;
        faces
        (
            (4 5 6 7)
        );
    }

    left
    {
        type patch;
        faces
        (
            (0 4 7 3)
        );
    }

    right
    {
        type patch;
        faces
        (
            (1 5 6 2)
        );
    }
);

mergePatchPairs
(
);

// ************************************************************************* //
Snappy:
Code:
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

// 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
{
    NACA0012.obj {type triSurfaceMesh; name NACA0012}

    refinementBox
    {
        type searchableBox;
        min (-0.1 0 -0.1);
        max (2 1.5 0.1);
    }
};



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

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

    maxLoadUnbalance 0.10;

    // Number of buffer layers between different levels.
    // 1 means normal 2:1 refinement restriction, larger means slower
    // refinement.
    nCellsBetweenLevels 5;



    // 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 "NACA0012.eMesh";
        level 6;
    }
    );



    // 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
    {

        NACA0012
        {
            // Surface-wise min and max refinement level
            level (6 6);

            // Optional specification of patch type (default is wall). No
            // constraint types (cyclic, symmetry) etc. are allowed.
            patchInfo
            {
                type        wall;
            }
        }
    }

    // Resolve sharp angles on fridges
    resolveFeatureAngle 30;


    // 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 1));
        }
    }


    // 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.45 0.45  0.45);


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



// Settings for the snapping.
snapControls
{
    //- Number of patch smoothing iterations before finding correspondence
    //  to surface
    nSmoothPatch 8;

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

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

// Feature snapping

    // Number of feature edge snapping interations.
    // Leave out altogehter to disable.
    nFeatureSnapIter 20;

    // Detect (geometric only) features by sampling the surface
    // (default=false).
    implicitFeatureSnap false;

    //Use castellatedMeshControls::features (default = true)
    explixitFEatureSnap true;

    //Detect features between multiple surfaces
    // (only for explicit FeatureSnap, default = false)
    multiRegionFeatureSnap false;

}

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

    // Per final patch (so not geometry!) the layer information
    layers
    {
        NACA0012
        {
            nSurfaceLayers 8;
        }
    }

    // Expansion factor for layer mesh
    expansionRatio 1.3;

    // 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.
    finalLayerThickness 0.7;

    // 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.
    // See relativeSizes parameter.
    minThickness 0.00001;

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

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

    // Number of smoothing iterations of surface normals
    nSmoothSurfaceNormals 900;

    // Number of smoothing iterations of interior mesh movement direction
    nSmoothNormals 90;

    // Smooth layer thickness over surface patches
    nSmoothThickness 20;

    // Stop layer growth on highly warped cells
    maxFaceThicknessRatio 0.9;

    // Reduce layer growth where ratio thickness to medial
    // distance is large
    maxThicknessToMedialRatio 0.9;

    // Angle used to pick up medial axis points
    // Note: changed(corrected) w.r.t 16x! 90 degrees corresponds to 130 in 16x.
    minMedianAxisAngle 130;

    // 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 100;
}



// 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.  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.05;

    //- Minimum normalised cell determinant
    //  1 = hex, <= 0 = folded or flattened illegal cell
    minDeterminant 0.001;

    //- minFaceWeight (0 -> 0.5)
    minFaceWeight 0.05;

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

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


// ************************************************************************* //
Attached Files
File Type: zip NACABLOCK.zip (16.7 KB, 1 views)

Last edited by syntex; May 7, 2019 at 11:09.
syntex is offline   Reply With Quote

Old   May 7, 2019, 08:45
Default
  #2
Senior Member
 
Join Date: Aug 2014
Location: UK
Posts: 213
Rep Power: 12
fresty is on a distinguished road
A potential quick fix would be to modify your blockMeshDict to adhere to your geometry proportions of 1:1:2 i.e.

Quote:
blocks
(
hex (0 1 2 3 4 5 6 7) (50 50 100) simpleGrading (1 1 1)
);
or any magnitude that follows 1:1:2 proportion.

However, this may not solve the matter completely. If it doesn't, please also attach your checkMesh log along with a snapshot of your geometry.
fresty is offline   Reply With Quote

Old   May 7, 2019, 10:42
Default
  #3
Member
 
Christophk
Join Date: Oct 2018
Posts: 33
Rep Power: 7
syntex is on a distinguished road
Why is 1:1:2 the solution, what will it change?
syntex is offline   Reply With Quote

Old   May 7, 2019, 11:36
Default
  #4
Senior Member
 
Join Date: Aug 2014
Location: UK
Posts: 213
Rep Power: 12
fresty is on a distinguished road
Firstly, it may not be 'the' solution but could be a contributing factor, at least in one spatial dimension. You're fitting the same number of mesh elements in the background block in x, y, and z directions while your geometry seems to be twice the length in z-direction. Imagine the difference between a cluster of cubes vs. cuboids snapping onto your complex geometry and intersecting with the feature edges. I would suggest to go over the meshQualityControls section of the linked presentation.

https://openfoamwiki.net/images/f/f0...SlidesOFW7.pdf
fresty is offline   Reply With Quote

Old   May 8, 2019, 04:39
Default
  #5
Senior Member
 
Robert
Join Date: May 2015
Location: Bremen, GER
Posts: 292
Rep Power: 11
RobertHB is on a distinguished road
Quote:
Originally Posted by syntex View Post
Hello, I got a problem with snappyHexMesh. I always get some skew faces and I don't know how I can change it.
As long as snappyHexMesh does not crash and checkMesh does not report an error related to skewed faces, a few skewed face are not a problem at all.
fresty likes this.
__________________
If you liked my answer to your question, please consider leaving a "Like" in return
RobertHB is offline   Reply With Quote

Old   May 8, 2019, 06:59
Default
  #6
Member
 
Christophk
Join Date: Oct 2018
Posts: 33
Rep Power: 7
syntex is on a distinguished road
SnappyHexMesh doesn't crash, but the simulation afterwards does stop after a few iterations, because of a sigFpe error. I figured the reason for that would be the skewFaces.
syntex is offline   Reply With Quote

Old   May 9, 2019, 06:02
Default
  #7
Member
 
Thomas Sprich
Join Date: Mar 2015
Posts: 76
Rep Power: 11
Swift is on a distinguished road
Hi Syntex,

As Fresty said, could you post your output from checkMesh?

Where are the skew cells occurring?

You could also try changing the following in you snappyHexMeshDict skewness parameters:

Code:
   //- Max skewness allowed. Set to <0 to disable.
    maxBoundarySkewness 20;
    maxInternalSkewness 4;
I suggest changing maxBoundarySkewness to say 4. This might help you meet checkMesh's requirements.
Swift is offline   Reply With Quote

Old   May 10, 2019, 04:25
Default
  #8
Senior Member
 
Robert
Join Date: May 2015
Location: Bremen, GER
Posts: 292
Rep Power: 11
RobertHB is on a distinguished road
Quote:
Originally Posted by syntex View Post
SnappyHexMesh doesn't crash, but the simulation afterwards does stop after a few iterations, because of a sigFpe error. I figured the reason for that would be the skewFaces.
You can use checkMesh with the writeSets option. This will write all skwed faces into a vtk file for inspection with paraview. Sometimes your faces become so skewed that they don't trigger checkMesh but screw your result. You should be able to spot these faces when overlaying your mesh with the vtk file. If this is the case, increasing your cell size might help.
__________________
If you liked my answer to your question, please consider leaving a "Like" in return
RobertHB is offline   Reply With Quote

Old   May 20, 2019, 13:05
Default
  #9
Member
 
Christophk
Join Date: Oct 2018
Posts: 33
Rep Power: 7
syntex is on a distinguished road
I changed my dict, used uniform cell sizes, i.e. cell.lengt(x=y=z) and used bigger cell sizes in general. That made it work
syntex is offline   Reply With Quote

Reply

Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

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
Frequently Asked Questions about Installing OpenFOAM wyldckat OpenFOAM Installation 3 November 14, 2023 12:58
OpenFOAM Training, London, Chicago, Munich, Sep-Oct 2015 cfd.direct OpenFOAM Announcements from Other Sources 2 August 31, 2015 14:36
OpenFOAM Foundation Releases OpenFOAM v2.3.0 opencfd OpenFOAM Announcements from OpenFOAM Foundation 3 December 23, 2014 04:43
Suggestion for a new sub-forum at OpenFOAM's Forum wyldckat Site Help, Feedback & Discussions 20 October 28, 2014 10:04
64bitrhel5 OF installation instructions mirko OpenFOAM Installation 2 August 12, 2008 19:07


All times are GMT -4. The time now is 20:29.