FreeFOAM The Cross-Platform CFD Toolkit
Hosted by SourceForge:
Get FreeFOAM at SourceForge.net.
            Fast, secure and Free Open Source software downloads

cellSplitter.H

Go to the documentation of this file.
00001 /*---------------------------------------------------------------------------*\
00002   =========                 |
00003   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
00004    \\    /   O peration     |
00005     \\  /    A nd           | Copyright (C) 1991-2010 OpenCFD Ltd.
00006      \\/     M anipulation  |
00007 -------------------------------------------------------------------------------
00008 License
00009     This file is part of OpenFOAM.
00010 
00011     OpenFOAM is free software: you can redistribute it and/or modify it
00012     under the terms of the GNU General Public License as published by
00013     the Free Software Foundation, either version 3 of the License, or
00014     (at your option) any later version.
00015 
00016     OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
00017     ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
00018     FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
00019     for more details.
00020 
00021     You should have received a copy of the GNU General Public License
00022     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
00023 
00024 Class
00025     Foam::cellSplitter
00026 
00027 Description
00028     Does pyramidal decomposition of selected cells. So all faces will become
00029     base of pyramid with as top a user-supplied point (usually the cell centre)
00030 
00031 SourceFiles
00032     cellSplitter.C
00033 
00034 \*---------------------------------------------------------------------------*/
00035 
00036 #ifndef cellSplitter_H
00037 #define cellSplitter_H
00038 
00039 #include <OpenFOAM/Map.H>
00040 #include <OpenFOAM/edge.H>
00041 #include <OpenFOAM/typeInfo.H>
00042 
00043 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
00044 
00045 namespace Foam
00046 {
00047 
00048 // Forward declaration of classes
00049 class polyTopoChange;
00050 class mapPolyMesh;
00051 class polyMesh;
00052 
00053 
00054 /*---------------------------------------------------------------------------*\
00055                            Class cellSplitter Declaration
00056 \*---------------------------------------------------------------------------*/
00057 
00058 class cellSplitter
00059 {
00060     // Private data
00061 
00062         //- Reference to mesh
00063         const polyMesh& mesh_;
00064 
00065         //- Per cell the mid point added.
00066         Map<label> addedPoints_;
00067 
00068 
00069     // Private Member Functions
00070 
00071         //- Get patch and zone info for face
00072         void getFaceInfo
00073         (
00074             const label faceI,
00075             label& patchID,
00076             label& zoneID,
00077             label& zoneFlip
00078         ) const;
00079 
00080         //- Find the new owner (if any) of the face.
00081         label newOwner
00082         (
00083             const label faceI,
00084             const Map<labelList>& cellToCells
00085         ) const;
00086 
00087         //- Find the new neighbour (if any) of the face.
00088         label newNeighbour
00089         (
00090             const label faceI,
00091             const Map<labelList>& cellToCells
00092         ) const;
00093 
00094         //- Disallow default bitwise copy construct
00095         cellSplitter(const cellSplitter&);
00096 
00097         //- Disallow default bitwise assignment
00098         void operator=(const cellSplitter&);
00099 
00100 public:
00101 
00102     //- Runtime type information
00103     ClassName("cellSplitter");
00104 
00105     // Constructors
00106 
00107         //- Construct from mesh
00108         cellSplitter(const polyMesh& mesh);
00109 
00110 
00111     // Destructor
00112 
00113         ~cellSplitter();
00114 
00115 
00116     // Member Functions
00117 
00118         // Edit
00119 
00120             //- Insert mesh changes into meshMod.
00121             //  cellToMidPoint : cell to cut and position of its new midpoint
00122             void setRefinement
00123             (
00124                 const Map<point>& cellToMidPoint,
00125                 polyTopoChange& meshMod
00126             );
00127 
00128             //- Force recalculation of locally stored data on topological change
00129             void updateMesh(const mapPolyMesh&);
00130 
00131 
00132         // Access
00133 
00134             //- Per cell the mid point added.
00135             const Map<label>& addedPoints() const
00136             {
00137                 return addedPoints_;
00138             }
00139 };
00140 
00141 
00142 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
00143 
00144 } // End namespace Foam
00145 
00146 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
00147 
00148 #endif
00149 
00150 // ************************ vim: set sw=4 sts=4 et: ************************ //
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines