/*---------------------------------------------------------------------------*\ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 2011-2015 OpenFOAM Foundation \\/ M anipulation | Copyright (C) 2016 OpenCFD Ltd. ------------------------------------------------------------------------------- License This file is part of OpenFOAM. OpenFOAM is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. OpenFOAM is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenFOAM. If not, see . Application combinePatchFaces Group grpMeshAdvancedUtilities Description Checks for multiple patch faces on same cell and combines them. Multiple patch faces can result from e.g. removal of refined neighbouring cells, leaving 4 exposed faces with same owner. Rules for merging: - only boundary faces (since multiple internal faces between two cells not allowed anyway) - faces have to have same owner - faces have to be connected via edge which are not features (so angle between them < feature angle) - outside of faces has to be single loop - outside of face should not be (or just slightly) concave (so angle between consecutive edges < concaveangle E.g. to allow all faces on same patch to be merged: combinePatchFaces 180 -concaveAngle 90 \*---------------------------------------------------------------------------*/ #include "argList.H" #include "Time.H" #include "polyTopoChange.H" #include "polyModifyFace.H" #include "polyAddFace.H" #include "combineFaces.H" #include "removePoints.H" #include "polyMesh.H" #include "mapPolyMesh.H" #include "unitConversion.H" #include "motionSmoother.H" #include "topoSet.H" #include "processorMeshes.H" #include "PstreamReduceOps.H" using namespace Foam; // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // // Merge faces on the same patch (usually from exposing refinement) // Can undo merges if these cause problems. label mergePatchFaces ( const scalar minCos, const scalar concaveSin, const autoPtr& qualDictPtr, const Time& runTime, polyMesh& mesh ) { // Patch face merging engine combineFaces faceCombiner(mesh); // Get all sets of faces that can be merged labelListList allFaceSets(faceCombiner.getMergeSets(minCos, concaveSin)); label nFaceSets = returnReduce(allFaceSets.size(), sumOp