CFD Online Discussion Forums

CFD Online Discussion Forums (https://www.cfd-online.com/Forums/)
-   OpenFOAM Meshing & Mesh Conversion (https://www.cfd-online.com/Forums/openfoam-meshing/)
-   -   [snappyHexMesh] Advice on how to keep cells inside a closed contour (https://www.cfd-online.com/Forums/openfoam-meshing/156687-advice-how-keep-cells-inside-closed-contour.html)

CrisMoreira July 10, 2015 12:37

Advice on how to keep cells inside a closed contour
 
Hi Foamers,
I'm new to OF and so i'm struggling with a complex structure.
My structure has a curve configuration and on top of that there's a bunch of openings (see picture).
My problem is that after running SHM the contour of the structure+openings isn't deleted and only the cells between the openings and inside the contour are kept.
The .stl was created using Salome and with Helyx i saw that it was ok.
As you can see in the picture, the SHM is cutting the main contour (structure) but keeping the cells of the openings assuming that it isn't a contour.
I wanna create "holes" in the mesh to let the fluid pass through.
I tried to use a different .stl for the openings but the result was the same.
After some research i thought that maybe if i use multiRegionFeatureSnap the problem could be solved. But it persisted.

Can anyone, please, tell me if there's a way of doing this and give me some guidance?

Best regards

Cristina

Openings:
https://www.dropbox.com/s/ulcj371mt7...te181.bmp?dl=0

Problem:
https://www.dropbox.com/s/pq1pl8aoyo...tura2.png?dl=0

SHM:

Code:

/*--------------------------------*- C++ -*----------------------------------*\
| =========                |                                                |
| \\      /  F ield        | OpenFOAM: The Open Source CFD Toolbox          |
|  \\    /  O peration    | Version:  2.2.0                                |
|  \\  /    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;    // make basic mesh ?
snap            true;    // decide to snap back to surface ?
addLayers      true;  // decide to add viscous layers ?


geometry // Load in STL files here
{
    ramp.stl {type triSurfaceMesh; name ramp;}

    refinementBox {type searchableBox; min (0.0 0.0 0.32); max (9.86 0.33 0.54);}
};

castellatedMeshControls
{
    maxLocalCells 1000000;  //max cells per CPU core
    maxGlobalCells 2000000; //max cells to use before mesh deletion step
    minRefinementCells 10;  //was 0 - zero means no bad cells are allowed during refinement stages
    maxLoadUnbalance 0.10;
    nCellsBetweenLevels 1;  // expansion factor between each high & low refinement zone

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

    features // taken from STL from each .eMesh file created by "SurfaceFeatureExtract" command
    (
        {file "ramp.eMesh"; level 3;}

    );

    // Surface based refinement
    // ~~~~~~~~~~~~~~~~~~~~~~~~

    refinementSurfaces // Surface-wise min and max refinement level
    {
    ramp {level (3 3);}

    } 


    resolveFeatureAngle 80;  // Resolve sharp angles // Default 30
    refinementRegions        // In descending levels of fine-ness
    {volume {mode distance; levels ((0.0006 4) (0.002 3) (0.01 2));}} // was ((0.001 4) (0.003 3) (0.01 2))
    locationInMesh (0 0.02 0);  //to decide which side of mesh to keep **
    allowFreeStandingZoneFaces true;
}


// Settings for the snapping.
snapControls
{
    nSmoothPatch 3;
    tolerance 4.0;
    nSolveIter 30;
    nRelaxIter 5;
    nFeatureSnapIter 15; // default is 10
   


implicitFeatureSnap false; // default is false - detects without doing surfaceFeatureExtract
explicitFeatureSnap true; // default is true
multiRegionFeatureSnap true; // deafault is false - detects features between multiple surfaces

}



// Settings for the layer addition.
addLayersControls //add the PATCH names from inside the STL file so STLpatchName_insideSTLName
{
    relativeSizes false; // was true
    layers
    {

    }

    expansionRatio 1.3;
    finalLayerThickness 0.00016; //was 0.00016
    minThickness 0.00008; //was 0.00008
    nGrow 0; // was 1


    // Advanced settings

    featureAngle 80; // was 70 //- When not to extrude surface. 0 is flat, 90 is right angle.
    nRelaxIter 3;  //- Max# of snapping relaxation iter. Should stop before upon reaching a correct mesh.
    nSmoothSurfaceNormals 1;  // Number of smoothing iterations of surface normals
    nSmoothNormals 3; // Number of smoothing iterations of interior mesh movement direction
    nSmoothThickness 10;  // Smooth layer thickness over surface patches
    maxFaceThicknessRatio 0.5; // Stop layer growth on highly warped cells
    maxThicknessToMedialRatio 0.3; // Reduce layer growth where ratio thickness to medial distance is large
    minMedianAxisAngle 130;  // Angle used to pick up medial axis points
    nBufferCellsNoExtrude 0;  // Create buffer region for new layer terminations
    nLayerIter 50; // Overall max number of layer addition iterations
}



// Generic mesh quality settings. At any undoable phase these determine
// where to undo.
meshQualityControls
{
    maxNonOrtho 65;
    maxBoundarySkewness 20;
    maxInternalSkewness 4;
    maxConcave 80;
    minFlatness 0.5;
    minVol 1e-13;
    minTetQuality 1e-9;
    minArea -1;
    minTwist 0.02;
    minDeterminant 0.001;
    minFaceWeight 0.02;
    minVolRatio 0.01;
    minTriangleTwist -1;

    // Advanced

    nSmoothScale 4;
    errorReduction 0.75;
}

// Advanced

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;


chegdan July 14, 2015 14:30

if you post your entire case, then we can debug it. The issue isn't quite clear so we will need just a bit more information.

CrisMoreira July 14, 2015 19:40

I'm so sorry Dan but i can't put here the entire case.
I know it's hard to help without further information but if you could only point me a direction of what could be wrong, i would appreciate it.

Best regards

Cristina

chegdan July 14, 2015 19:47

Cristina,

No worries, it is most likely that your location in mesh is not within your opening itself and during the castellation step, the cells are swept away in the undesired region. Make sure that you have a the proper location (i.e. material point) for what represents your fluid region. If you are doing a CHT type simulation then you can think about the multregion support in snappy.

CrisMoreira July 22, 2015 18:18

Hi Dan,

I'm sorry for the delay, i had to much work.

My mesh is 10x0.34x0.8 and the openings are ~ at 9.5m so the point, (0 0.02 0), in mesh is further away from the openings.

I'm not doing a CHT simulation so i had removed the multiregional option.

Right now i'm on a battle against time, but in a week or so i will try again.

Thank you so much for your help, i really appreciate it.

Best regards

Cristina

danielpiaget July 23, 2015 11:24

Hello Cristina,

Regarding the stl surface file, have you included the curve part in your the stl surface file? Is your stl file a close surface ? Also, make sure that your initial mesh (generated with blockMesh I assume) englobes the entire stl surface before generating a mesh with snappy.

Regards,

Daniel

CrisMoreira July 23, 2015 11:36

Hi Daniel,

First of all thank you for your reply.
Yes, i did and without the openings everything work just fine. The problem appears after the consideration of the openings.
I double check everything and couldn't find any problem regarding the .stl.
The base mesh was done using blockMesh, using a domain 10x0.34x0.8 that englobes all .stl surface.

Best Regards

Cristina

danielpiaget July 23, 2015 12:16

Hello Cristina,

Then the problem seems to be coming from the intersection (for the openings) of the stl file and the base mesh. Before the Castellated mesh is generated, snappyHexMesh will compute all the edges of the base mesh that intersect the stl surface. The tolerance of the mesh (or resolution) plays an important part in finding out all the edges that intersect the stl surface.

I suggest that your blockMesh be a cube with perfect cubic elements (let's say 11 X 11 X11 with a subdivion in the xyz direction of 10). This will help in the Snap mesh step.Make sure that you have a big enough offset between the stl surface and the initial mesh surfaces.

Daniel


All times are GMT -4. The time now is 16:23.