/*---------------------------------------------------------------------------*\ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 1991-2010 OpenCFD Ltd. \\/ M anipulation | ------------------------------------------------------------------------------- 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 . Class Foam::meshRefinement Description Helper class which maintains intersections of (changing) mesh with (static) surfaces. Maintains - per face any intersections of the cc-cc segment with any of the surfaces SourceFiles meshRefinement.C meshRefinementBaffles.C meshRefinementMerge.C meshRefinementProblemCells.C meshRefinementRefine.C \*---------------------------------------------------------------------------*/ #ifndef meshRefinement_H #define meshRefinement_H #include "hexRef8.H" #include "mapPolyMesh.H" #include "autoPtr.H" #include "labelPair.H" #include "indirectPrimitivePatch.H" #include "pointFieldsFwd.H" #include "Tuple2.H" #include "pointIndexHit.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { // Class forward declarations class fvMesh; class mapDistributePolyMesh; class decompositionMethod; class refinementSurfaces; class shellSurfaces; class removeCells; class featureEdgeMesh; class fvMeshDistribute; class searchableSurface; class regionSplit; class globalIndex; /*---------------------------------------------------------------------------*\ Class meshRefinement Declaration \*---------------------------------------------------------------------------*/ class meshRefinement { public: // Public data types //- Enumeration for debug dumping enum writeFlag { MESH = 1, SCALARLEVELS = 2, OBJINTERSECTIONS = 4 }; //- Enumeration for how the userdata is to be mapped upon refinement. enum mapType { MASTERONLY = 1, /*!< maintain master only */ KEEPALL = 2, /*!< have slaves (upon refinement) from master */ REMOVE = 4 /*!< set value to -1 any face that was refined */ }; private: // Private data //- Reference to mesh fvMesh& mesh_; //- tolerance used for sorting coordinates (used in 'less' routine) const scalar mergeDistance_; //- overwrite the mesh? const bool overwrite_; //- Instance of mesh upon construction. Used when in overwrite_ mode. const word oldInstance_; //- All surface-intersection interaction const refinementSurfaces& surfaces_; //- All shell-refinement interaction const shellSurfaces& shells_; //- refinement engine hexRef8 meshCutter_; //- per cc-cc vector the index of the surface hit labelIOList surfaceIndex_; //- user supplied face based data. List > userFaceData_; //- Meshed patches - are treated differently. Stored as wordList since // order changes. wordList meshedPatches_; // Private Member Functions //- Reorder list according to map. template static void updateList ( const labelList& newToOld, const T& nullValue, List& elems ); //- Add patchfield of given type to all fields on mesh template static void addPatchFields(fvMesh&, const word& patchFieldType); //- Reorder patchfields of all fields on mesh template static void reorderPatchFields(fvMesh&, const labelList& oldToNew); //- Find out which faces have changed given cells (old mesh labels) // that were marked for refinement. static labelList getChangedFaces ( const mapPolyMesh&, const labelList& oldCellsToRefine ); //- Calculate coupled boundary end vector and refinement level void calcNeighbourData ( labelList& neiLevel, pointField& neiCc ) const; //- Find any intersection of surface. Store in surfaceIndex_. void updateIntersections(const labelList& changedFaces); //- Remove cells. Put exposedFaces into exposedPatchIDs. autoPtr doRemoveCells ( const labelList& cellsToRemove, const labelList& exposedFaces, const labelList& exposedPatchIDs, removeCells& cellRemover ); // Get cells which are inside any closed surface. Note that // all closed surfaces // will have already been oriented to have keepPoint outside. labelList getInsideCells(const word&) const; // Do all to remove inside cells autoPtr removeInsideCells ( const string& msg, const label exposedPatchI ); // For decomposeCombineRegions //- Used in decomposeCombineRegions. Given global region per cell // determines master processor/cell for regions straddling // procboundaries. void getCoupledRegionMaster ( const globalIndex& globalCells, const boolList& blockedFace, const regionSplit& globalRegion, Map