/*---------------------------------------------------------------------------*\ ========= | \\ / F ield | OpenFOAM: The Open Source CFD Toolbox \\ / O peration | \\ / A nd | Copyright (C) 1991-2009 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 2 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, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA Class Foam::multiDirRefinement Description Does multiple pass refinement to refine cells in multiple directions. Gets a list of cells to refine and vectorFields for the whole mesh. It then tries to refine in one direction after the other the wanted cells. After construction the mesh will have been refined in multiple directions. Holds the list of cells to refine and the map from original to added for every refinement level. Gets constructed from a dictionary or from components. Uses an undoableMeshCutter which does the actual cutting. Undo facility is switched of unless constructed from external one which allows this. The cut cells get stored in addedCells which is for every vectorField to cut with the map from uncut to added cell (i.e. from master to slave). Note: map is only valid for a given direction. Parallel: should be ok. Uses 'reduce' whenever it needs to make a local decision. SourceFiles multiDirRefinement.C \*---------------------------------------------------------------------------*/ #ifndef multiDirRefinement_H #define multiDirRefinement_H #include "refinementIterator.H" #include "vectorField.H" #include "Map.H" #include "className.H" // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * // namespace Foam { // Forward declaration of classes class undoableMeshCutter; class cellLooper; class topoSet; /*---------------------------------------------------------------------------*\ Class multiDirRefinement Declaration \*---------------------------------------------------------------------------*/ class multiDirRefinement { // Private data //- Current set of cells to refine. Extended with added cells. labelList cellLabels_; //- from original to added cells. // Gives for every cell in the original mesh an empty list or the // list of cells this one has been split into (note: will include // itself so e.g. for hex will be 8 if 2x2x2 refinement) labelListList addedCells_; // Private Static Functions //- Given map from original to added cell set the refineCell for // the added cells to be equal to the one on the original cells. static void addCells(const Map