shm生成边界层没有完全覆盖



  • 我感觉的我模型其实不复杂,但是边界层生成的时候缺有点问题,请大家帮忙看一下如何改进比较好
    下图是shm第二步snap后的图:
    111.png
    感觉吻合的还可以的。
    然后加边界层后发现夹角处的边界层出了问题:
    222.png
    我shm中对边界层的控制如下:

    /*--------------------------------*- C++ -*----------------------------------*\
    | =========                 |                                                 |
    | \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox           |
    |  \\    /   O peration     | Version:  v1806                                 |
    |   \\  /    A nd           | Web:      www.OpenFOAM.com                      |
    |    \\/     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
    {
        flatRoof.stl
        {
            type triSurfaceMesh;
            name roof;
        }
    
        refinementBox
        {
            type searchableBox;
            min (20 0 0);
            max (80   1.0 8);
        }
    };
    
    
    
    // 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 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
        {
            roof
            {
                // Surface-wise min and max refinement level
                level (1 1);
    
                // Optional specification of patch type (default is wall). No
                // constraint types (cyclic, symmetry) etc. are allowed.
                patchInfo
                {
                    type wall;
                    inGroups (roof);
                }
            }
        }
    
        // Resolve sharp angles
        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.5 0.5 0.5);
    
    
        // 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 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;
    
        //- Number of mesh displacement relaxation iterations.
        nSolveIter 30;
    
        //- 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 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;
    }
    
    
    
    // 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
        {
            "roof"
            {
                nSurfaceLayers 2;
            }
        }
    
        // 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.
        // See relativeSizes parameter.
        //finalLayerThickness 1.0;
        firstLayerThickness 0.5;
        // 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.3;
    
        // 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 1.7.x! (didn't do anything in 1.7.x)
        nGrow 0;
    
        // Advanced settings
    
        // When not to extrude surface. 0 is flat surface, 90 is when two faces
        // are perpendicular
        featureAngle 60;
    
        // 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 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
        // Note: changed(corrected) w.r.t 1.7.x! 90 degrees corresponds to 130
        // in 1.7.x.
        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 50;
    }
    
    
    
    // Generic mesh quality settings. At any undoable phase these determine
    // where to undo.
    meshQualityControls
    {
        #include "meshQualityDict"
    
    
        // Advanced
    
        //- Number of error distribution iterations
        nSmoothScale 4;
        //- Amount to scale back displacement at error points
        errorReduction 0.75;
    }
    
    
    // Advanced
    
    // Write flags
    writeFlags
    (
        scalarLevels
        layerSets
        layerFields     // write volScalarField for layer coverage
    );
    
    
    // Merge tolerance. Is fraction of overall bounding box of initial mesh.
    // Note: the write tolerance needs to be higher than this.
    mergeTolerance 1e-6;
    
    
    // ************************************************************************* //
    
    

    大家有什么建议么?提高一下边界层的质量



  • 找到解决办法了,在addLayersControls里把featureAngle从60改成90就行



  • 修改后边角处边界层也加上了:
    111.png
    但是在加密交界面网格很畸形:
    222.png
    这是什么导致的呢?有没有改进办法


Log in to reply
 


CFD中文网 | 东岳流体学术 | 东岳流体商业 | 吉ICP备20003622号-1