From 274d1df8a472fdb235af5c469a4ba0098ca5063c Mon Sep 17 00:00:00 2001 From: Henry Weller <http://cfd.direct> Date: Fri, 13 May 2016 17:47:38 +0100 Subject: [PATCH] snappyHexMesh: Automatically remove zero-sized patches All patches are preserved if the 'keepPatches' option is set true. Patch contributed by Mattijs Janssens --- .../generation/snappyHexMesh/snappyHexMesh.C | 86 +++++++++++++++++++ .../snappyHexMesh/snappyHexMeshDict | 5 ++ src/dynamicMesh/fvMeshTools/fvMeshTools.H | 3 +- .../simpleFoam/rotorDisk/Allrun | 1 - .../rotorDisk/system/createPatchDict | 29 ------- .../ras/mixerVesselAMI/Allrun.pre | 3 - .../ras/mixerVesselAMI/system/createPatchDict | 27 ------ 7 files changed, 92 insertions(+), 62 deletions(-) delete mode 100644 tutorials/incompressible/simpleFoam/rotorDisk/system/createPatchDict delete mode 100644 tutorials/multiphase/interDyMFoam/ras/mixerVesselAMI/system/createPatchDict diff --git a/applications/utilities/mesh/generation/snappyHexMesh/snappyHexMesh.C b/applications/utilities/mesh/generation/snappyHexMesh/snappyHexMesh.C index ad0f7ade304..9414149d414 100644 --- a/applications/utilities/mesh/generation/snappyHexMesh/snappyHexMesh.C +++ b/applications/utilities/mesh/generation/snappyHexMesh/snappyHexMesh.C @@ -57,6 +57,7 @@ Description #include "MeshedSurface.H" #include "globalIndex.H" #include "IOmanip.H" +#include "fvMeshTools.H" using namespace Foam; @@ -571,6 +572,73 @@ scalar getMergeDistance(const polyMesh& mesh, const scalar mergeTol) } +void removeZeroSizedPatches(fvMesh& mesh) +{ + // Remove any zero-sized ones. Assumes + // - processor patches are already only there if needed + // - all other patches are available on all processors + // - but coupled ones might still be needed, even if zero-size + // (e.g. processorCyclic) + // See also logic in createPatch. + const polyBoundaryMesh& pbm = mesh.boundaryMesh(); + + labelList oldToNew(pbm.size(), -1); + label newPatchi = 0; + forAll(pbm, patchi) + { + const polyPatch& pp = pbm[patchi]; + + if (!isA<processorPolyPatch>(pp)) + { + if + ( + isA<coupledPolyPatch>(pp) + || returnReduce(pp.size(), sumOp<label>()) + ) + { + // Coupled (and unknown size) or uncoupled and used + oldToNew[patchi] = newPatchi++; + } + } + } + + forAll(pbm, patchi) + { + const polyPatch& pp = pbm[patchi]; + + if (isA<processorPolyPatch>(pp)) + { + oldToNew[patchi] = newPatchi++; + } + } + + + const label nKeepPatches = newPatchi; + + // Shuffle unused ones to end + if (nKeepPatches != pbm.size()) + { + Info<< endl + << "Removing zero-sized patches:" << endl << incrIndent; + + forAll(oldToNew, patchi) + { + if (oldToNew[patchi] == -1) + { + Info<< indent << pbm[patchi].name() + << " type " << pbm[patchi].type() + << " at position " << patchi << endl; + oldToNew[patchi] = newPatchi++; + } + } + Info<< decrIndent; + + fvMeshTools::reorderPatches(mesh, oldToNew, nKeepPatches, true); + Info<< endl; + } +} + + // Write mesh and additional information void writeMesh ( @@ -812,6 +880,8 @@ int main(int argc, char *argv[]) readScalar(meshDict.lookup("mergeTolerance")) ); + const Switch keepPatches(meshDict.lookupOrDefault("keepPatches", false)); + // Read decomposePar dictionary @@ -1351,6 +1421,12 @@ int main(int argc, char *argv[]) motionDict ); + + if (!keepPatches && !wantSnap && !wantLayers) + { + removeZeroSizedPatches(mesh); + } + writeMesh ( "Refined mesh", @@ -1392,6 +1468,11 @@ int main(int argc, char *argv[]) snapParams ); + if (!keepPatches && !wantLayers) + { + removeZeroSizedPatches(mesh); + } + writeMesh ( "Snapped mesh", @@ -1438,6 +1519,11 @@ int main(int argc, char *argv[]) distributor ); + if (!keepPatches) + { + removeZeroSizedPatches(mesh); + } + writeMesh ( "Layer mesh", diff --git a/applications/utilities/mesh/generation/snappyHexMesh/snappyHexMeshDict b/applications/utilities/mesh/generation/snappyHexMesh/snappyHexMeshDict index 577e116b64d..9389b50fbe3 100644 --- a/applications/utilities/mesh/generation/snappyHexMesh/snappyHexMeshDict +++ b/applications/utilities/mesh/generation/snappyHexMesh/snappyHexMeshDict @@ -26,6 +26,11 @@ addLayers false; //singleRegionName false; +//Optional: preserve all generated patches. Default is to remove +// zero-sized patches. +//keepPatches true; + + // Geometry. Definition of all surfaces. All surfaces are of class // searchableSurface. // Surfaces are used diff --git a/src/dynamicMesh/fvMeshTools/fvMeshTools.H b/src/dynamicMesh/fvMeshTools/fvMeshTools.H index 15516612d6a..1b5f60c1c8f 100644 --- a/src/dynamicMesh/fvMeshTools/fvMeshTools.H +++ b/src/dynamicMesh/fvMeshTools/fvMeshTools.H @@ -112,7 +112,7 @@ public: //- Change patchField to zero on registered fields static void zeroPatchFields(fvMesh& mesh, const label patchI); - // -Reorder and remove trailing patches. If validBoundary call is parallel + //- Reorder and remove trailing patches. If validBoundary call is parallel // synced and all add the same patch with same settings static void reorderPatches ( @@ -121,7 +121,6 @@ public: const label nPatches, const bool validBoundary ); - }; diff --git a/tutorials/incompressible/simpleFoam/rotorDisk/Allrun b/tutorials/incompressible/simpleFoam/rotorDisk/Allrun index 14d69c2a9a5..f6f12582312 100755 --- a/tutorials/incompressible/simpleFoam/rotorDisk/Allrun +++ b/tutorials/incompressible/simpleFoam/rotorDisk/Allrun @@ -8,7 +8,6 @@ cd ${0%/*} || exit 1 # Run from this directory runApplication blockMesh runApplication surfaceFeatureExtract runApplication snappyHexMesh -overwrite -runApplication createPatch -overwrite runApplication $(getApplication) diff --git a/tutorials/incompressible/simpleFoam/rotorDisk/system/createPatchDict b/tutorials/incompressible/simpleFoam/rotorDisk/system/createPatchDict deleted file mode 100644 index a7e00363719..00000000000 --- a/tutorials/incompressible/simpleFoam/rotorDisk/system/createPatchDict +++ /dev/null @@ -1,29 +0,0 @@ -/*--------------------------------*- C++ -*----------------------------------*\ -| ========= | | -| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: dev | -| \\ / A nd | Web: www.OpenFOAM.org | -| \\/ M anipulation | | -\*---------------------------------------------------------------------------*/ -FoamFile -{ - version 2.0; - format ascii; - class dictionary; - object createPatchDict; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -// Do a synchronisation of coupled points after creation of any patches. -// Note: this does not work with points that are on multiple coupled patches -// with transformations (i.e. cyclics). -pointSync false; - -// Patches to create. An empty patch list just removes patches with zero -// faces from $FOAM_CASE/constant/polyMesh/boundary. -patches -( - -); - -// ************************************************************************* // diff --git a/tutorials/multiphase/interDyMFoam/ras/mixerVesselAMI/Allrun.pre b/tutorials/multiphase/interDyMFoam/ras/mixerVesselAMI/Allrun.pre index 3ded7bc7b42..e7e5a4ce56a 100755 --- a/tutorials/multiphase/interDyMFoam/ras/mixerVesselAMI/Allrun.pre +++ b/tutorials/multiphase/interDyMFoam/ras/mixerVesselAMI/Allrun.pre @@ -16,9 +16,6 @@ runApplication snappyHexMesh -overwrite runApplication createBaffles -overwrite runApplication mergeOrSplitBaffles -split -overwrite -# Get rid of zero faced patches -runApplication createPatch -overwrite - # Copy fields after meshing to avoind the generation of unnecessary patch fields cp -r 0.orig 0 diff --git a/tutorials/multiphase/interDyMFoam/ras/mixerVesselAMI/system/createPatchDict b/tutorials/multiphase/interDyMFoam/ras/mixerVesselAMI/system/createPatchDict deleted file mode 100644 index 5aafd9aa4ed..00000000000 --- a/tutorials/multiphase/interDyMFoam/ras/mixerVesselAMI/system/createPatchDict +++ /dev/null @@ -1,27 +0,0 @@ -/*--------------------------------*- C++ -*----------------------------------*\ -| ========= | | -| \\ / F ield | OpenFOAM: The Open Source CFD Toolbox | -| \\ / O peration | Version: dev | -| \\ / A nd | Web: www.OpenFOAM.org | -| \\/ M anipulation | | -\*---------------------------------------------------------------------------*/ -FoamFile -{ - version 2.0; - format ascii; - class dictionary; - object createPatchDict; -} -// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // - -// Do a synchronisation of coupled points after creation of any patches. -// Note: this does not work with points that are on multiple coupled patches -// with transformations (i.e. cyclics). -pointSync false; - -// Patches to create. -patches -( -); - -// ************************************************************************* // -- GitLab