From 35eeedeaa511514b5933ba1d5fa8eb8735c133c5 Mon Sep 17 00:00:00 2001 From: mattijs Date: Thu, 10 Dec 2009 15:31:04 +0000 Subject: [PATCH] Added allowFreeStandingZoneFaces flag This determines when faceZones and cellZones are being meshed any zone faces can only be on the boundary of the cellZone or also 'free standing'. The latter option can be used to e.g. create free-standing baffles (that do not separate two regions) --- .../autoHexMeshDriver/autoRefineDriver.C | 6 +++++- .../refinementParameters/refinementParameters.C | 2 ++ .../refinementParameters/refinementParameters.H | 12 ++++++++++++ .../autoHexMesh/meshRefinement/meshRefinement.H | 6 +++++- .../meshRefinement/meshRefinementBaffles.C | 13 ++++++++----- 5 files changed, 32 insertions(+), 7 deletions(-) diff --git a/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoRefineDriver.C b/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoRefineDriver.C index a1346b4e8e..cff924d864 100644 --- a/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoRefineDriver.C +++ b/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/autoRefineDriver.C @@ -560,7 +560,11 @@ void Foam::autoRefineDriver::zonify const_cast(mesh.time())++; } - meshRefiner_.zonify(refineParams.keepPoints()[0]); + meshRefiner_.zonify + ( + refineParams.keepPoints()[0], + refineParams.allowFreeStandingZoneFaces() + ); if (debug) { diff --git a/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/refinementParameters/refinementParameters.C b/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/refinementParameters/refinementParameters.C index a181662b27..7a8a16cfb7 100644 --- a/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/refinementParameters/refinementParameters.C +++ b/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/refinementParameters/refinementParameters.C @@ -44,6 +44,7 @@ Foam::refinementParameters::refinementParameters curvature_(readScalar(dict.lookup("curvature"))), nBufferLayers_(readLabel(dict.lookup("nBufferLayers"))), keepPoints_(dict.lookup("keepPoints")), + allowFreeStandingZoneFaces_(dict.lookup("allowFreeStandingZoneFaces")), maxLoadUnbalance_(dict.lookupOrDefault("maxLoadUnbalance",0)) {} @@ -55,6 +56,7 @@ Foam::refinementParameters::refinementParameters(const dictionary& dict) minRefineCells_(readLabel(dict.lookup("minRefinementCells"))), nBufferLayers_(readLabel(dict.lookup("nCellsBetweenLevels"))), keepPoints_(pointField(1, dict.lookup("locationInMesh"))), + allowFreeStandingZoneFaces_(dict.lookup("allowFreeStandingZoneFaces")), maxLoadUnbalance_(dict.lookupOrDefault("maxLoadUnbalance",0)) { scalar featAngle(readScalar(dict.lookup("resolveFeatureAngle"))); diff --git a/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/refinementParameters/refinementParameters.H b/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/refinementParameters/refinementParameters.H index ae09e3fc0e..32d6777276 100644 --- a/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/refinementParameters/refinementParameters.H +++ b/src/mesh/autoMesh/autoHexMesh/autoHexMeshDriver/refinementParameters/refinementParameters.H @@ -38,6 +38,7 @@ SourceFiles #include "dictionary.H" #include "pointField.H" +#include "Switch.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // @@ -73,6 +74,10 @@ class refinementParameters //- Areas to keep const pointField keepPoints_; + //- FaceZone faces allowed which have owner and neighbour in same + // cellZone? + Switch allowFreeStandingZoneFaces_; + //- Allowed load unbalance scalar maxLoadUnbalance_; @@ -137,6 +142,13 @@ public: return keepPoints_; } + //- Are zone faces allowed only inbetween different cell zones + // or also just free standing? + bool allowFreeStandingZoneFaces() const + { + return allowFreeStandingZoneFaces_; + } + //- Allowed load unbalance scalar maxLoadUnbalance() const { diff --git a/src/mesh/autoMesh/autoHexMesh/meshRefinement/meshRefinement.H b/src/mesh/autoMesh/autoHexMesh/meshRefinement/meshRefinement.H index 5b603ddbac..6347570cac 100644 --- a/src/mesh/autoMesh/autoHexMesh/meshRefinement/meshRefinement.H +++ b/src/mesh/autoMesh/autoHexMesh/meshRefinement/meshRefinement.H @@ -704,7 +704,11 @@ public: //- Put faces/cells into zones according to surface specification. // Returns null if no zone surfaces present. Region containing // the keepPoint will not be put into a cellZone. - autoPtr zonify(const point& keepPoint); + autoPtr zonify + ( + const point& keepPoint, + const bool allowFreeStandingZoneFaces + ); // Other topo changes diff --git a/src/mesh/autoMesh/autoHexMesh/meshRefinement/meshRefinementBaffles.C b/src/mesh/autoMesh/autoHexMesh/meshRefinement/meshRefinementBaffles.C index 307cb743f8..f7adea091d 100644 --- a/src/mesh/autoMesh/autoHexMesh/meshRefinement/meshRefinementBaffles.C +++ b/src/mesh/autoMesh/autoHexMesh/meshRefinement/meshRefinementBaffles.C @@ -2032,7 +2032,8 @@ Foam::autoPtr Foam::meshRefinement::dupNonManifoldPoints() // Zoning Foam::autoPtr Foam::meshRefinement::zonify ( - const point& keepPoint + const point& keepPoint, + const bool allowFreeStandingZoneFaces ) { const wordList& cellZoneNames = surfaces_.cellZoneNames(); @@ -2344,9 +2345,11 @@ Foam::autoPtr Foam::meshRefinement::zonify } - //// Make sure namedSurfaceIndex is unset inbetween same cell cell zones. - //makeConsistentFaceIndex(cellToZone, namedSurfaceIndex); - + // Make sure namedSurfaceIndex is unset inbetween same cell cell zones. + if (!allowFreeStandingZoneFaces) + { + makeConsistentFaceIndex(cellToZone, namedSurfaceIndex); + } // Topochange container polyTopoChange meshMod(mesh_); @@ -2440,7 +2443,7 @@ Foam::autoPtr Foam::meshRefinement::zonify } else if (ownZone == neiZone) { - // Can only happen for coupled boundaries. Keep master + // Free-standing zone face or coupled boundary. Keep master // face unflipped. flip = !isMasterFace[faceI]; }