diff --git a/applications/utilities/mesh/generation/snappyHexMesh/snappyHexMeshDict b/applications/utilities/mesh/generation/snappyHexMesh/snappyHexMeshDict index ea073cd9f0..6b40b2ab5e 100644 --- a/applications/utilities/mesh/generation/snappyHexMesh/snappyHexMeshDict +++ b/applications/utilities/mesh/generation/snappyHexMesh/snappyHexMeshDict @@ -244,8 +244,17 @@ castellatedMeshControls } //sphere.stl //{ - // mode distance; - // levels ((1.0 5) (2.0 3)); + // mode inside; + // levels ((1.0 4)); + // // Optional override of uniform refinement level such + // // that in small gaps we're getting more cells. + // // The specification is + // // - numGapCells : minimum number of cells in the gap + // // - minLevel : min refinement level at which to kick in + // // - maxLevel : upper refinement level + // // All three settings can be overridden on a surface by + // // surface basis in the refinementSurfaces section. + // gapLevel ( ); //} } diff --git a/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoRefineDriver.H b/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoRefineDriver.H index e952af9fd6..19f8a03fbd 100644 --- a/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoRefineDriver.H +++ b/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoRefineDriver.H @@ -109,6 +109,7 @@ class autoRefineDriver label bigGapOnlyRefine ( const refinementParameters& refineParams, + const bool spreadGapSize, const label maxIter ); diff --git a/src/mesh/autoMesh/autoHexMesh/meshRefinement/meshRefinement.H b/src/mesh/autoMesh/autoHexMesh/meshRefinement/meshRefinement.H index b2cbbd983f..2e71d97579 100644 --- a/src/mesh/autoMesh/autoHexMesh/meshRefinement/meshRefinement.H +++ b/src/mesh/autoMesh/autoHexMesh/meshRefinement/meshRefinement.H @@ -55,6 +55,7 @@ SourceFiles #include "wordPairHashTable.H" #include "surfaceZonesInfo.H" #include "volumeType.H" +#include "DynamicField.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -353,8 +354,23 @@ private: label& nRefine ) const; - //- Generate single ray for cell to detect gap - bool generateRay + //- Generate single ray from nearPoint in direction of nearNormal + label generateRays + ( + const point& nearPoint, + const vector& nearNormal, + const FixedList& gapInfo, + const volumeType& mode, + + const label cLevel, + + DynamicField& start, + DynamicField& end + ) const; + + //- Generate pairs of rays through cell centre + // Each ray pair has start, end, and expected gap size + label generateRays ( const bool useSurfaceNormal, @@ -366,10 +382,13 @@ private: const point& cc, const label cLevel, - point& start, - point& end, - point& start2, - point& end2 + DynamicField& start, + DynamicField& end, + DynamicField& gapSize, + + DynamicField& start2, + DynamicField& end2, + DynamicField& gapSize2 ) const; //- Select candidate cells (cells inside a shell with gapLevel @@ -400,9 +419,12 @@ private: label markInternalGapRefinement ( const scalar planarCos, + const bool spreadGapSize, const label nAllowRefine, labelList& refineCell, - label& nRefine + label& nRefine, + labelList& numGapCells, + scalarField& gapSize ) const; //- Refine cells containing small gaps @@ -958,6 +980,7 @@ public: const bool smallFeatureRefinement, const bool gapRefinement, const bool bigGapRefinement, + const bool spreadGapSize, const label maxGlobalCells, const label maxLocalCells ) const; diff --git a/src/mesh/autoMesh/autoHexMesh/meshRefinement/meshRefinementGapRefine.C b/src/mesh/autoMesh/autoHexMesh/meshRefinement/meshRefinementGapRefine.C index 62a285928c..cd9cd153db 100644 --- a/src/mesh/autoMesh/autoHexMesh/meshRefinement/meshRefinementGapRefine.C +++ b/src/mesh/autoMesh/autoHexMesh/meshRefinement/meshRefinementGapRefine.C @@ -28,11 +28,14 @@ License #include "refinementSurfaces.H" #include "refinementFeatures.H" #include "shellSurfaces.H" -#include "OBJstream.H" #include "triSurfaceMesh.H" #include "treeDataCell.H" #include "searchableSurfaces.H" #include "DynamicField.H" +#include "transportData.H" +#include "FaceCellWave.H" +#include "volFields.H" +#include "zeroGradientFvPatchFields.H" // * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * // @@ -71,17 +74,18 @@ Foam::label Foam::meshRefinement::markSurfaceGapRefinement pointField start(testFaces.size()); pointField end(testFaces.size()); - labelList minLevel(testFaces.size()); - - calcCellCellRays - ( - neiCc, - neiLevel, - testFaces, - start, - end, - minLevel - ); + { + labelList minLevel(testFaces.size()); + calcCellCellRays + ( + neiCc, + neiLevel, + testFaces, + start, + end, + minLevel + ); + } // Collect cells to test for inside/outside in shell @@ -134,24 +138,21 @@ Foam::label Foam::meshRefinement::markSurfaceGapRefinement } - //OBJstream str(mesh_.time().timePath()/"markSurfaceRefinement.obj"); - //Info<< "Dumping rays to " << str.name( ) << endl; - const List >& extendedGapLevel = surfaces_.extendedGapLevel(); const List& extendedGapMode = surfaces_.extendedGapMode(); - labelList surface1; - List hit1; - labelList region1; - vectorField normal1; + labelList ccSurface1; + List ccHit1; + labelList ccRegion1; + vectorField ccNormal1; { - labelList surface2; - List hit2; - labelList region2; - vectorField normal2; + labelList ccSurface2; + List ccHit2; + labelList ccRegion2; + vectorField ccNormal2; surfaces_.findNearestIntersection ( @@ -159,38 +160,43 @@ Foam::label Foam::meshRefinement::markSurfaceGapRefinement start, end, - surface1, - hit1, - region1, - normal1, + ccSurface1, + ccHit1, + ccRegion1, + ccNormal1, - surface2, - hit2, - region2, - normal2 + ccSurface2, + ccHit2, + ccRegion2, + ccNormal2 ); } + start.clear(); + end.clear(); - start.setSize(2*surface1.size()); - end.setSize(2*surface1.size()); - labelList map(2*surface1.size()); - pointField start2(2*surface1.size()); - pointField end2(2*surface1.size()); - labelList cellMap(2*surface1.size()); + DynamicField rayStart(2*ccSurface1.size()); + DynamicField rayEnd(2*ccSurface1.size()); + DynamicField gapSize(2*ccSurface1.size()); - label compactI = 0; + DynamicField rayStart2(2*ccSurface1.size()); + DynamicField rayEnd2(2*ccSurface1.size()); + DynamicField gapSize2(2*ccSurface1.size()); - forAll(surface1, i) + DynamicList