ENH: autoLayerDriver: better layering information message
[OpenFOAM-2.0.x.git] / src / meshTools / cellClassification / cellInfoI.H
blob357bc247d65f850d9ec7c21e43479188589418cf
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 \*---------------------------------------------------------------------------*/
26 #include "cellClassification.H"
27 #include "polyMesh.H"
29 // * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
31 // Update this with w2 information
32 template<class TrackingData>
33 inline bool Foam::cellInfo::update
35     const cellInfo& w2,
36     const label thisFaceI,
37     const label thisCellI,
38     const label neighbourFaceI,
39     const label neighbourCellI,
40     TrackingData& td
43     if
44     (
45         (w2.type() == cellClassification::NOTSET)
46      || (w2.type() == cellClassification::CUT)
47     )
48     {
49         FatalErrorIn("cellInfo::update(const cellInfo&)")
50             << "Problem: trying to propagate NOTSET or CUT type:" << w2.type()
51             << " into cell/face with type:" << type() << endl
52             << "thisFaceI:" << thisFaceI
53             << "  thisCellI:" << thisCellI
54             << "  neighbourFaceI:" << neighbourFaceI
55             << "  neighbourCellI:" << neighbourCellI
56             << abort(FatalError);
57         return false;
58     }
60     if (type() == cellClassification::NOTSET)
61     {
62         type_ = w2.type();
64         return true;
65     }
67     if (type() == cellClassification::CUT)
68     {
69         // Reached boundary. Stop.
70         return false;
71     }
73     if (type() == w2.type())
74     {
75         // Should never happen; already checked in meshWave
76         return false;
77     }
79     // Two conflicting types
80     FatalErrorIn("cellInfo::update(const cellInfo&)")
81         << "Problem: trying to propagate conflicting types:" << w2.type()
82         << " into cell/face with type:" << type() << endl
83         << "thisFaceI:" << thisFaceI
84         << "  thisCellI:" << thisCellI
85         << "  neighbourFaceI:" << neighbourFaceI
86         << "  neighbourCellI:" << neighbourCellI
87         << abort(FatalError);
89     return false;
93 // * * * * * * * * * * * * * * * * Constructors  * * * * * * * * * * * * * * //
95 // Null constructor
96 inline Foam::cellInfo::cellInfo()
98     type_(cellClassification::NOTSET)
102 // Construct from components
103 inline Foam::cellInfo::cellInfo(const label type)
105     type_(type)
109 // Construct as copy
110 inline Foam::cellInfo::cellInfo(const cellInfo& w2)
112     type_(w2.type())
116 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
118 template<class TrackingData>
119 inline bool Foam::cellInfo::valid(TrackingData& td) const
121     return type_ != cellClassification::NOTSET;
125 // No geometric data so never any problem on cyclics
126 template<class TrackingData>
127 inline bool Foam::cellInfo::sameGeometry
129     const polyMesh&,
130     const cellInfo& w2,
131     const scalar tol,
132     TrackingData& td
134  const
136     return true;
140 // No geometric data.
141 template<class TrackingData>
142 inline void Foam::cellInfo::leaveDomain
144     const polyMesh&,
145     const polyPatch& patch,
146     const label patchFaceI,
147     const point& faceCentre,
148     TrackingData& td
153 // No geometric data.
154 template<class TrackingData>
155 inline void Foam::cellInfo::transform
157     const polyMesh&,
158     const tensor& rotTensor,
159     TrackingData& td
164 // No geometric data.
165 template<class TrackingData>
166 inline void Foam::cellInfo::enterDomain
168     const polyMesh&,
169     const polyPatch& patch,
170     const label patchFaceI,
171     const point& faceCentre,
172     TrackingData& td
177 // Update this with neighbour information
178 template<class TrackingData>
179 inline bool Foam::cellInfo::updateCell
181     const polyMesh&,
182     const label thisCellI,
183     const label neighbourFaceI,
184     const cellInfo& neighbourInfo,
185     const scalar tol,
186     TrackingData& td
189     return update
190     (
191         neighbourInfo,
192         -1,
193         thisCellI,
194         neighbourFaceI,
195         -1,
196         td
197     );
201 // Update this with neighbour information
202 template<class TrackingData>
203 inline bool Foam::cellInfo::updateFace
205     const polyMesh&,
206     const label thisFaceI,
207     const label neighbourCellI,
208     const cellInfo& neighbourInfo,
209     const scalar tol,
210     TrackingData& td
213     return update
214     (
215         neighbourInfo,
216         thisFaceI,
217         -1,
218         -1,
219         neighbourCellI,
220         td
221     );
224 // Update this with neighbour information
225 template<class TrackingData>
226 inline bool Foam::cellInfo::updateFace
228     const polyMesh&,
229     const label thisFaceI,
230     const cellInfo& neighbourInfo,
231     const scalar tol,
232     TrackingData& td
235     return update
236     (
237         neighbourInfo,
238         thisFaceI,
239         -1,
240         -1,
241         -1,
242         td
243     );
247 template <class TrackingData>
248 inline bool Foam::cellInfo::equal
250     const cellInfo& rhs,
251     TrackingData& td
252 ) const
254     return operator==(rhs);
258 // * * * * * * * * * * * * * * * Member Operators  * * * * * * * * * * * * * //
260 inline bool Foam::cellInfo::operator==(const Foam::cellInfo& rhs) const
262     return type() == rhs.type();
266 inline bool Foam::cellInfo::operator!=(const Foam::cellInfo& rhs) const
268     return !(*this == rhs);
272 // ************************************************************************* //