ENH: autoLayerDriver: better layering information message
[OpenFOAM-2.0.x.git] / src / dynamicMesh / meshCut / meshModifiers / boundaryCutter / boundaryCutter.H
blob4f9371fdd3a796554ba3e10929746527150b9798
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
6      \\/     M anipulation  |
7 -------------------------------------------------------------------------------
8 License
9     This file is part of OpenFOAM.
11     OpenFOAM is free software: you can redistribute it and/or modify it
12     under the terms of the GNU General Public License as published by
13     the Free Software Foundation, either version 3 of the License, or
14     (at your option) any later version.
16     OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
17     ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
18     FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
19     for more details.
21     You should have received a copy of the GNU General Public License
22     along with OpenFOAM.  If not, see <http://www.gnu.org/licenses/>.
24 Class
25     Foam::boundaryCutter
27 Description
28     Does modifications to boundary faces.
30     Does
31     - move boundary points
32     - split boundary edges (multiple per edge if nessecary)
33     - face-centre decomposes boundary faces
34     - diagonal split of boundary faces
37 SourceFiles
38     boundaryCutter.C
40 \*---------------------------------------------------------------------------*/
42 #ifndef boundaryCutter_H
43 #define boundaryCutter_H
45 #include "Map.H"
46 #include "labelList.H"
47 #include "edge.H"
48 #include "typeInfo.H"
49 #include "labelPair.H"
51 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
53 namespace Foam
56 // Forward declaration of classes
57 class polyTopoChange;
58 class mapPolyMesh;
59 class polyMesh;
60 class face;
62 /*---------------------------------------------------------------------------*\
63                            Class boundaryCutter Declaration
64 \*---------------------------------------------------------------------------*/
66 class boundaryCutter
68     // Private data
70         //- Reference to mesh
71         const polyMesh& mesh_;
73         //- Per edge sorted (start to end) list of points added.
74         HashTable<labelList, edge, Hash<edge> > edgeAddedPoints_;
76         //- Per face the mid point added.
77         Map<label> faceAddedPoint_;
80     // Private Member Functions
82         //- Get patch and zone info for face
83         void getFaceInfo
84         (
85             const label faceI,
86             label& patchID,
87             label& zoneID,
88             label& zoneFlip
89         ) const;
91         //- Add cuts of edges to face
92         face addEdgeCutsToFace(const label faceI, const Map<labelList>&) const;
94         //- Splits faces with multiple cut edges. Return true if anything split.
95         bool splitFace
96         (
97             const label faceI,
98             const Map<point>& pointToPos,
99             const Map<labelList>& edgeToAddedPoints,
100             polyTopoChange& meshMod
101         ) const;
103         //- Add/modify faceI for new vertices.
104         void addFace
105         (
106             const label faceI,
107             const face& newFace,
109             bool& modifiedFace,     // have we already 'used' faceI?
110             polyTopoChange& meshMod
111         ) const;
114         //- Disallow default bitwise copy construct
115         boundaryCutter(const boundaryCutter&);
117         //- Disallow default bitwise assignment
118         void operator=(const boundaryCutter&);
120 public:
122     //- Runtime type information
123     ClassName("boundaryCutter");
125     // Constructors
127         //- Construct from mesh
128         boundaryCutter(const polyMesh& mesh);
131     //- Destructor
132     ~boundaryCutter();
135     // Member Functions
137         // Edit
139             //- Do actual cutting with cut description. Inserts mesh changes
140             //  into meshMod.
141             //  pointToPos : new position for selected points
142             //  edgeToCuts : per edge set of points that need to be introduced
143             //  faceToSplit : per face the diagonal split
144             //  faceToFeaturePoint : per face the feature point. Triangulation
145             //                       around this feature point.
146             void setRefinement
147             (
148                 const Map<point>& pointToPos,
149                 const Map<List<point> >& edgeToCuts,
150                 const Map<labelPair>& faceToSplit,
151                 const Map<point>& faceToFeaturePoint,
152                 polyTopoChange& meshMod
153             );
155             //- Force recalculation of locally stored data on topological change
156             void updateMesh(const mapPolyMesh&);
159         // Access
161             //- Per edge a sorted list (start to end) of added points.
162             const HashTable<labelList, edge, Hash<edge> >& edgeAddedPoints()
163              const
164             {
165                 return edgeAddedPoints_;
166             }
168             //- Per face the mid point added.
169             const Map<label>& faceAddedPoint() const
170             {
171                 return faceAddedPoint_;
172             }
177 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
179 } // End namespace Foam
181 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
183 #endif
185 // ************************************************************************* //