Merge branch 'master' of ssh://git.code.sf.net/p/foam-extend/foam-extend-3.2
[foam-extend-3.2.git] / src / meshTools / cellClassification / cellInfo.H
blob94212f8fe24efe85b1a177976d3579a9f60b9062
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     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         inline bool update
67         (
68             const cellInfo& w2,
69             const label thisFaceI,
70             const label thisCellI,
71             const label neighbourFaceI,
72             const label neighbourCellI
73         );
75 public:
77     // Constructors
79         //- Construct null
80         inline cellInfo();
82         //- Construct from cType
83         inline cellInfo(const label);
85         //- Construct as copy
86         inline cellInfo(const cellInfo&);
89     // Member Functions
91         // Access
93             inline label type() const
94             {
95                 return type_;
96             }
99         // Needed by meshWave
101             //- Check whether origin has been changed at all or
102             //  still contains original (invalid) value.
103             inline bool valid() const;
105             //- Check for identical geometrical data. Used for cyclics checking.
106             inline bool sameGeometry
107             (
108                 const polyMesh&,
109                 const cellInfo&,
110                 const scalar
111             ) const;
113             //- Convert any absolute coordinates into relative to (patch)face
114             //  centre
115             inline void leaveDomain
116             (
117                 const polyMesh&,
118                 const polyPatch& patch,
119                 const label patchFaceI,
120                 const point& faceCentre
121             );
123             //- Reverse of leaveDomain
124             inline void enterDomain
125             (
126                 const polyMesh&,
127                 const polyPatch& patch,
128                 const label patchFaceI,
129                 const point& faceCentre
130             );
132             //- Apply rotation matrix to any coordinates
133             inline void transform
134             (
135                 const polyMesh&,
136                 const tensor& rotTensor
137             );
139             //- Influence of neighbouring face.
140             inline bool updateCell
141             (
142                 const polyMesh&,
143                 const label thisCellI,
144                 const label neighbourFaceI,
145                 const cellInfo& neighbourInfo,
146                 const scalar tol
147             );
149             //- Influence of neighbouring cell.
150             inline bool updateFace
151             (
152                 const polyMesh&,
153                 const label thisFaceI,
154                 const label neighbourCellI,
155                 const cellInfo& neighbourInfo,
156                 const scalar tol
157             );
159             //- Influence of different value on same face.
160             inline bool updateFace
161             (
162                 const polyMesh&,
163                 const label thisFaceI,
164                 const cellInfo& neighbourInfo,
165                 const scalar tol
166             );
168     // Member Operators
170         //Note: Used to determine whether to call update.
171         inline bool operator==(const cellInfo&) const;
173         inline bool operator!=(const cellInfo&) const;
176     // IOstream Operators
178         friend Ostream& operator<<(Ostream&, const cellInfo&);
179         friend Istream& operator>>(Istream&, cellInfo&);
183 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
185 } // End namespace Foam
187 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
189 #include "cellInfoI.H"
191 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
193 #endif
195 // ************************************************************************* //