ENH: autoLayerDriver: better layering information message
[OpenFOAM-2.0.x.git] / src / meshTools / cellClassification / cellInfo.H
blobd7fab361d89e7e9f98b62004c26216510f3b5c21
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::cellInfo
27 Description
28     Holds information regarding type of cell. Used in inside/outside
29     determination in cellClassification.
31 SourceFiles
32     cellInfoI.H
33     cellInfo.C
35 \*---------------------------------------------------------------------------*/
37 #ifndef cellInfo_H
38 #define cellInfo_H
40 #include "point.H"
41 #include "label.H"
42 #include "tensor.H"
44 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
46 namespace Foam
48 class polyPatch;
49 class polyMesh;
51 /*---------------------------------------------------------------------------*\
52                            Class cellInfo Declaration
53 \*---------------------------------------------------------------------------*/
55 class cellInfo
57     // Private data
59         label type_;
61     // Private Member Functions
63         //- Update current cell/face type with neighbouring
64         //  type. Return true if information needs to propagate,
65         //  false otherwise.
66         template<class TrackingData>
67         inline bool update
68         (
69             const cellInfo& w2,
70             const label thisFaceI,
71             const label thisCellI,
72             const label neighbourFaceI,
73             const label neighbourCellI,
74             TrackingData& td
75         );
77 public:
79     // Constructors
81         //- Construct null
82         inline cellInfo();
84         //- Construct from cType
85         inline cellInfo(const label);
87         //- Construct as copy
88         inline cellInfo(const cellInfo&);
91     // Member Functions
93         // Access
95             inline label type() const
96             {
97                 return type_;
98             }
101         // Needed by meshWave
103             //- Check whether origin has been changed at all or
104             //  still contains original (invalid) value.
105             template<class TrackingData>
106             inline bool valid(TrackingData& td) const;
108             //- Check for identical geometrical data. Used for cyclics checking.
109             template<class TrackingData>
110             inline bool sameGeometry
111             (
112                 const polyMesh&,
113                 const cellInfo&,
114                 const scalar,
115                 TrackingData& td
116             ) const;
118             //- Convert any absolute coordinates into relative to (patch)face
119             //  centre
120             template<class TrackingData>
121             inline void leaveDomain
122             (
123                 const polyMesh&,
124                 const polyPatch& patch,
125                 const label patchFaceI,
126                 const point& faceCentre,
127                 TrackingData& td
128             );
130             //- Reverse of leaveDomain
131             template<class TrackingData>
132             inline void enterDomain
133             (
134                 const polyMesh&,
135                 const polyPatch& patch,
136                 const label patchFaceI,
137                 const point& faceCentre,
138                 TrackingData& td
139             );
141             //- Apply rotation matrix to any coordinates
142             template<class TrackingData>
143             inline void transform
144             (
145                 const polyMesh&,
146                 const tensor& rotTensor,
147                 TrackingData& td
148             );
150             //- Influence of neighbouring face.
151             template<class TrackingData>
152             inline bool updateCell
153             (
154                 const polyMesh&,
155                 const label thisCellI,
156                 const label neighbourFaceI,
157                 const cellInfo& neighbourInfo,
158                 const scalar tol,
159                 TrackingData& td
160             );
162             //- Influence of neighbouring cell.
163             template<class TrackingData>
164             inline bool updateFace
165             (
166                 const polyMesh&,
167                 const label thisFaceI,
168                 const label neighbourCellI,
169                 const cellInfo& neighbourInfo,
170                 const scalar tol,
171                 TrackingData& td
172             );
174             //- Influence of different value on same face.
175             template<class TrackingData>
176             inline bool updateFace
177             (
178                 const polyMesh&,
179                 const label thisFaceI,
180                 const cellInfo& neighbourInfo,
181                 const scalar tol,
182                 TrackingData& td
183             );
185             //- Same (like operator==)
186             template<class TrackingData>
187             inline bool equal(const cellInfo&, TrackingData& td) const;
189     // Member Operators
191         //Note: Used to determine whether to call update.
192         inline bool operator==(const cellInfo&) const;
194         inline bool operator!=(const cellInfo&) const;
197     // IOstream Operators
199         friend Ostream& operator<<(Ostream&, const cellInfo&);
200         friend Istream& operator>>(Istream&, cellInfo&);
204 //- Data associated with cellInfo type are contiguous
205 template<>
206 inline bool contiguous<cellInfo>()
208     return true;
212 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
214 } // End namespace Foam
216 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
218 #include "cellInfoI.H"
220 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
222 #endif
224 // ************************************************************************* //