Merge branch 'master' of ssh://git.code.sf.net/p/foam-extend/foam-extend-3.2
[foam-extend-3.2.git] / src / dynamicMesh / dynamicTopoFvMesh / eMesh / eMesh.H
blob5c62f349dd6043470004974f3229622ac7dcc5d5
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | foam-extend: Open Source CFD
4    \\    /   O peration     | Version:     3.2
5     \\  /    A nd           | Web:         http://www.foam-extend.org
6      \\/     M anipulation  | For copyright notice see file Copyright
7 -------------------------------------------------------------------------------
8 License
9     This file is part of foam-extend.
11     foam-extend is free software: you can redistribute it and/or modify it
12     under the terms of the GNU General Public License as published by the
13     Free Software Foundation, either version 3 of the License, or (at your
14     option) any later version.
16     foam-extend is distributed in the hope that it will be useful, but
17     WITHOUT ANY WARRANTY; without even the implied warranty of
18     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
19     General Public License for more details.
21     You should have received a copy of the GNU General Public License
22     along with foam-extend.  If not, see <http://www.gnu.org/licenses/>.
24 Class
25     eMesh
27 Description
28     Mesh class to store edge-based connectivity structures.
30 SourceFiles
31     eMesh.C
33 \*---------------------------------------------------------------------------*/
35 #ifndef eMesh_H
36 #define eMesh_H
38 #include "objectRegistry.H"
39 #include "foamTime.H"
40 #include "polyMesh.H"
41 #include "edgeIOList.H"
42 #include "labelIOList.H"
43 #include "eBoundaryMesh.H"
45 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
47 namespace Foam
50 // Class forward declarations
52 /*---------------------------------------------------------------------------*\
53                            Class eMesh Declaration
54 \*---------------------------------------------------------------------------*/
56 class eMesh
58     public objectRegistry
60     // Private data
62         const polyMesh& mesh_;
64         //- Ordered edge-list
65         mutable edgeIOList edges_;
67         //- Boundary mesh
68         mutable eBoundaryMesh boundary_;
70         // Primitive size data
72             //- Number of edges
73             mutable label nEdges_;
75             //- Number of internal edges
76             mutable label nInternalEdges_;
78     // Demand-driven data
80             //- Mapping between ordered edge-data and regular edges.
81             labelList reverseEdgeMap_;
83             //- Face-edges
84             mutable labelListIOList* fePtr_;
86             //- Edge-faces
87             mutable labelListIOList* efPtr_;
89     // Private Member Functions
91         //- Helper function to isolate points on triangular faces
92         label findIsolatedPoint(const face& f, const edge& e) const;
94         //- Helper function to determine the orientation of a triangular face
95         label edgeDirection(const face& f, const edge& e) const;
97         //- Disallow default bitwise copy construct
98         eMesh(const eMesh&);
100         //- Disallow default bitwise assignment
101         void operator=(const eMesh&);
103         // Private member functions to calculate demand driven data
105             //- Calculate ordered edges (and edgeFaces)
106             void calcOrderedEdgeList();
108             //- Calculate face-edges
109             void calcFaceEdges() const;
111             //- Calculate edge-faces
112             void calcEdgeFaces() const;
114             //- Clear geometry
115             void clearGeom() const;
117             //- Clear addressing
118             void clearAddressing() const;
120 public:
122     // Public typedefs
124         typedef eMesh Mesh;
125         typedef eBoundaryMesh BoundaryMesh;
128     //- Runtime type information
129     TypeName("eMesh");
131     //- Return the mesh sub-directory name (usually "eMesh")
132     static word meshSubDir;
135     // Constructors
137         //- Construct from IOobject and polyMesh reference
138         eMesh(const polyMesh& m, const word& subDir = eMesh::meshSubDir);
141     // Destructor
143         virtual ~eMesh();
146     // Member Functions
148         // Helpers
150             //- Add boundary patches. Constructor helper
151             void addEdgePatches(const List<ePatch*> &);
154         // Database
156             //- Return reference to the mesh database
157             virtual const objectRegistry& db() const;
159             //- Return the base mesh directory (dbDir())
160             fileName meshDir() const;
162             //- Return the local mesh directory (dbDir()/meshSubDir)
163             fileName meshSubDirectory() const;
165             //- Return reference to time
166             const Time& time() const;
169             //- Mesh size parameters
171                 label nEdges() const;
173                 label nInternalEdges() const;
175             // Primitive mesh data
177                 //- Return constant reference to the ordered edge-list
178                 const edgeList& edges() const;
180         // Access
182             //- Return constant reference to boundary mesh
183             const eBoundaryMesh& boundary() const;
186         // Demand-driven data
188             //- Return constant reference to the faceEdges list
189             const labelListList& faceEdges() const;
191             //- Return constant reference to the edgeFaces list
192             const labelListList& edgeFaces() const;
194         // Reset primitive data
195         void resetPrimitives
196         (
197             edgeList& edges,
198             labelListList& faceEdges,
199             labelListList& edgeFaces,
200             const labelList& patchSizes,
201             const labelList& patchStarts,
202             const bool reUse,
203             const bool storePrimitives
204         );
206         //- Clear demand-driven data
207         void clearOut() const;
209         //- Set the instance for mesh files
210         void setInstance(const fileName& inst);
212         //- Write mesh
213         virtual bool write() const;
216     // Member Operators
218         bool operator!=(const eMesh& m) const;
220         bool operator==(const eMesh& m) const;
224 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
226 } // End namespace Foam
228 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
230 #endif
232 // ************************************************************************* //