CFD Online Discussion Forums

CFD Online Discussion Forums (http://www.cfd-online.com/Forums/)
-   OpenFOAM Native Meshers: snappyHexMesh and Others (http://www.cfd-online.com/Forums/openfoam-meshing-snappyhexmesh/)
-   -   snappyHexMesh - layers in 3d pipe bifurcation (http://www.cfd-online.com/Forums/openfoam-meshing-snappyhexmesh/81294-snappyhexmesh-layers-3d-pipe-bifurcation.html)

nihil October 22, 2010 03:33

snappyHexMesh - layers in 3d pipe bifurcation
 
2 Attachment(s)
Hallo.

I'm trying to mesh a three-dimensional pipe bifurcation for internal flow simulations using
snappyHexMesh. Problems occure concerning the additional boundary layers close to the
"stagnation point" , see the pictures. I want the layers to enclose the sharp edge or to
merge and go farther inwards the flow field.

Has anyone an idea/suggestion how to do that?
Thanks in advance for any response!

Daniel

alberto October 23, 2010 01:29

Quote:

Originally Posted by nihil (Post 280281)
Hallo.

I'm trying to mesh a three-dimensional pipe bifurcation for internal flow simulations using
snappyHexMesh. Problems occure concerning the additional boundary layers close to the
"stagnation point" , see the pictures. I want the layers to enclose the sharp edge or to
merge an go farther inwards the flow field.

Has anyone an idea/suggestion how to do that?
Thanks in advance for any response!

Daniel

Not an expert of snappy, since I played with it only a bit, but did you try playing with the feature angle?

Best,

FG_HSRM October 24, 2010 13:02

Hi Daniel
How did you import the surface?
Did you import one or two patches in this area?

Regards
fritz

nihil October 25, 2010 07:23

1 Attachment(s)
Quote:

Originally Posted by alberto (Post 280407)
Not an expert of snappy, since I played with it only a bit, but did you try playing with the feature angle?

Best,


Seems to me you are an expert indeed. :-)
I tried varying the feature angle before but without success...
However, setting the featureAngle to 310° finally worked well.
Not the best mesh I have ever seen but pretty much what I wanted.
Thanks a lot!

But I still have problems with uneven/warped layers at some points, see figure.
Increasing nSmoothThickness from 20 to 30,
increasing nSmoothSurfaceNormals from 1 to 10 and
increasing nSmoothNormals from 3 to 30 reduced this problem
nearly everywhere but not at the red marked location.

Any suggestions on that?

Cheers

Daniel

nihil October 25, 2010 07:29

Quote:

Originally Posted by FG_HSRM (Post 280523)
Hi Daniel
How did you import the surface?
Did you import one or two patches in this area?

Regards
fritz


Hej Fritz.

The entire wall in that area is defined by one *.stl and one patch.
I tried loading two *.stl files (one for each half of the bifurcation wall)
without any effect.

Daniel.

ziad October 26, 2010 21:48

Quote:

Originally Posted by nihil (Post 280625)
Seems to me you are an expert indeed. :-)
I tried varying the feature angle before but without success...
However, setting the featureAngle to 310° finally worked well.
Not the best mesh I have ever seen but pretty much what I wanted.
Thanks a lot!

But I still have problems with uneven/warped layers at some points, see figure.
Increasing nSmoothThickness from 20 to 30,
increasing nSmoothSurfaceNormals from 1 to 10 and
increasing nSmoothNormals from 3 to 30 reduced this problem
nearly everywhere but not at the red marked location.

Any suggestions on that?

Cheers

Daniel

Hi Daniel,

Another way to do it would be using no surface layers in sHM and then refining the near wall mesh with refineWallLayer tool. I find it to be more robust and it gives relatively accurate mesh size at the wall. The real advantage is that you can keep using reasonable featureAngle values and have a nice surface mesh with very nice o-grids in the volume.

Best,
Ziad

WalterW November 9, 2010 06:15

nihil,

how did you manage to get
1) sharp edges and
2) a visible boundary layer

at your inlet?

alberto November 9, 2010 09:55

For layers, take a look at:

~/OpenFOAM-1.7.x/tutorials/incompressible/pimpleDyMFoam/wingMotion/wingMotion_snappyHexMesh/

Best,

val46 November 10, 2010 03:52

Hi nihil,

could you post us your sHMDict file?
Would be interesting for me to see how you produce such almost perfect layers. I'm struggling getting good layers.

Regards,
Toni

U.Golling November 16, 2010 10:18

Hello everybody!
I also would like to mesh a similar pipe as you did, nihil, but i am not even half as successful. Could you please explain, how the geometry has to be, from that i have to create the stl-Files for inlet, outlet and the wall of the pipe. And how does your sHMDict look like then?
Or, maybe, does anybody know, where i can find a tutorial for simulating internal flow or something?
Sorry, i know this means you have to grant a big request, but i am thankful for any help, cause i feel like standing in a very long dead end street at the moment.
greets
Ulrich

elia87 October 6, 2011 04:31

3 Attachment(s)
Quote:

Originally Posted by WalterW (Post 282739)
nihil,

how did you manage to get
1) sharp edges and
2) a visible boundary layer

at your inlet?

Hi everybody

I have the same problem.

I'm doing some experiments with snappyHexMesh (in OpenFOAM 1.6) with some basic geometry (in this case a cube) and these are my results

In the first picture you can see the whole geometry, I want to snap the mesh in y and z directions and maintain constant in x direction (simple extrusion). Moreover I want layers on external walls (it is like a cubical section pipe with x as axial direction).

In the second and third pictures you can see respectively an x and y slice.

x_slice : the layers are good on perimeter and also on the corners
y_slice : the layers disappear on "inlet and outlet" faces as you can see --> How can I ''print'' the layers also on these faces??

I've defined two patches in stl file:
- mypareti for external wall
- inlet_outlet for inlet and outlet face (normal to x axis)

here my geometry and castellatedMesh parts of snappyHexMeshDict file

Code:

geometry
{
    cubo_centrato.stl  //STL FILE NAME
    {
        type triSurfaceMesh;
    name cubo_centrato;
        regions
        {
        inlet_outlet  //patch cosė definita nel file STL
        {
            name inlet_outlet; //nome assegnato dall'utente  alla patch
        }
        pareti
        {
            name mypareti;
        }
        }
    }
   
   
};



// Settings for the castellatedMesh generation.
castellatedMeshControls
{

    // Refinement parameters
    // ~~~~~~~~~~~~~~~~~~~~~
   
    // Location vector inside the region to be meshed.
    // N.B. vector must not coincide with a cell face either before or during
    // refinement.
    //locationInMesh (5 0 0) 

    // While refining maximum number of cells per processor. This is basically
    // the number of cells that fit on a processor. If you choose this too small
    // it will do just more refinement iterations to obtain a similar mesh.
    maxLocalCells 1000000;

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

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



    // 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
    {
             
    cubo_centrato
    {
          level (2 2); // default (min max) refinement for whole surface
          regions
          {
                  pareti
                  {
                    level (5 6); // optional refinement
                  }
           
          }
    }

    }

    // Resolve sharp angles
    resolveFeatureAngle 100;


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


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



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

and here my addLayers and meshQualityControl parts of snappyHexMeshDict file

Code:

addLayersControls
{
    relativeSizes true;

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

    }

    // Expansion factor for layer mesh
    expansionRatio 1.2;

    //- 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.
    finalLayerThickness 0.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 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.
    nGrow 1;


    // Advanced settings

    //- When not to extrude surface. 0 is flat surface, 90 is when two faces
    //  make straight angle.
    featureAngle 90;

    //- Maximum number of snapping relaxation iterations. Should stop
    //  before upon reaching a correct mesh.
    nRelaxIter 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
    minMedianAxisAngle 130;

    // Create buffer region for new layer terminations
    nBufferCellsNoExtrude 0;

    // Overall max number of layer addition iterations
    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 projected area v.s. actual area. Set to -1 to disable.
    minFlatness 0.5;

    //- Minimum pyramid volume. Is absolute volume of cell pyramid.
    //  Set to very negative number (e.g. -1E30) to disable.
    minVol 1e-13;

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


alberto October 6, 2011 11:56

It might not address your problem, but I would suggest to use the latest version of snappyHexMesh provided in OpenFOAM 2.0.1 (or 2.0.x). The management of surfaces improved greatly.

Best,

sbence February 24, 2013 15:50

Quote:

Originally Posted by WalterW (Post 282739)
nihil,

how did you manage to get
1) sharp edges and
2) a visible boundary layer

at your inlet?

I had this problem recently and found out that bnd type shall be set to empty at the inlet for meshing.

s.m April 9, 2013 08:32

hi ziad
would you please tell more about how using "refineWallLayer tool" in more details?
Regards.


All times are GMT -4. The time now is 14:34.