polyMeshGeometry.H
Go to the documentation of this file.
1 /*---------------------------------------------------------------------------*\
2  ========= |
3  \\ / F ield | OpenFOAM: The Open Source CFD Toolbox
4  \\ / O peration |
5  \\ / A nd | Copyright (C) 2011-2013 OpenFOAM Foundation
6  \\/ M anipulation |
7 -------------------------------------------------------------------------------
8 License
9  This file is part of OpenFOAM.
10 
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.
15 
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.
20 
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/>.
23 
24 Class
25  Foam::polyMeshGeometry
26 
27 Description
28  Updateable mesh geometry and checking routines.
29 
30  - non-ortho done across coupled faces.
31  - faceWeight (delta factors) done across coupled faces.
32 
33 SourceFiles
34  polyMeshGeometry.C
35 
36 \*---------------------------------------------------------------------------*/
37 
38 #ifndef polyMeshGeometry_H
39 #define polyMeshGeometry_H
40 
41 #include "pointFields.H"
42 #include "HashSet.H"
43 
44 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
45 
46 namespace Foam
47 {
48 
49 /*---------------------------------------------------------------------------*\
50  Class polyMeshGeometry Declaration
51 \*---------------------------------------------------------------------------*/
52 
53 class polyMeshGeometry
54 {
55  //- Reference to polyMesh.
56  const polyMesh& mesh_;
57 
58  //- Uptodate copy of face areas
60 
61  //- Uptodate copy of face centres
63 
64  //- Uptodate copy of cell centres
66 
67  //- Uptodate copy of cell volumes
69 
70 
71  // Private Member Functions
72 
73  //- Update face areas and centres on selected faces.
75  (
76  const pointField& p,
77  const labelList& changedFaces
78  );
79 
80  //- Update cell volumes and centres on selected cells. Requires
81  // cells and faces to be consistent set.
83  (
84  const labelList& changedCells,
85  const labelList& changedFaces
86  );
87 
88  //- Detect&report non-ortho error for single face.
89  static scalar checkNonOrtho
90  (
91  const polyMesh& mesh,
92  const bool report,
93  const scalar severeNonorthogonalityThreshold,
94  const label faceI,
95  const vector& s, // face area vector
96  const vector& d, // cc-cc vector
97 
98  label& severeNonOrth,
99  label& errorNonOrth,
100  labelHashSet* setPtr
101  );
102 
103  //- Calculate skewness given two cell centres and one face centre.
104  static scalar calcSkewness
105  (
106  const point& ownCc,
107  const point& neiCc,
108  const point& fc
109  );
110 
111  //- Detect&report incorrect face-triangle orientation
112  static bool checkFaceTet
113  (
114  const polyMesh&,
115  const bool report,
116  const scalar minTetQuality,
117  const pointField& p,
118  const label faceI,
119  const point& fc, // face centre
120  const point& cc, // cell centre
121  labelHashSet* setPtr
122  );
123 
124 
125 public:
126 
127  ClassName("polyMeshGeometry");
128 
129  // Constructors
130 
131  //- Construct from mesh
132  polyMeshGeometry(const polyMesh&);
133 
134 
135  // Member Functions
136 
137  // Access
138 
139  const polyMesh& mesh() const
140  {
141  return mesh_;
142  }
143 
144  const vectorField& faceAreas() const
145  {
146  return faceAreas_;
147  }
148  const vectorField& faceCentres() const
149  {
150  return faceCentres_;
151  }
152  const vectorField& cellCentres() const
153  {
154  return cellCentres_;
155  }
156  const scalarField& cellVolumes() const
157  {
158  return cellVolumes_;
159  }
160 
161  // Edit
162 
163  //- Take over properties from mesh
164  void correct();
165 
166  //- Recalculate on selected faces. Recalculates cell properties
167  // on owner and neighbour of these cells.
168  void correct
169  (
170  const pointField& p,
171  const labelList& changedFaces
172  );
173 
174  //- Helper function: get affected cells from faces
175  static labelList affectedCells
176  (
177  const polyMesh&,
178  const labelList& changedFaces
179  );
180 
181 
182  // Checking of selected faces with supplied geometry (mesh only used for
183  // topology). Coupled aware (coupled faces treated as internal ones)
184 
185  //- See primitiveMesh
186  static bool checkFaceDotProduct
187  (
188  const bool report,
189  const scalar orthWarn,
190  const polyMesh&,
191  const vectorField& cellCentres,
192  const vectorField& faceAreas,
193  const labelList& checkFaces,
194  const List<labelPair>& baffles,
195  labelHashSet* setPtr
196  );
197 
198  //- See primitiveMesh
199  static bool checkFacePyramids
200  (
201  const bool report,
202  const scalar minPyrVol,
203  const polyMesh&,
204  const vectorField& cellCentres,
205  const pointField& p,
206  const labelList& checkFaces,
207  const List<labelPair>& baffles,
208  labelHashSet*
209  );
210 
211  //- See primitiveMesh
212  static bool checkFaceTets
213  (
214  const bool report,
215  const scalar minPyrVol,
216  const polyMesh&,
217  const vectorField& cellCentres,
218  const vectorField& faceCentres,
219  const pointField& p,
220  const labelList& checkFaces,
221  const List<labelPair>& baffles,
222  labelHashSet*
223  );
224 
225  //- See primitiveMesh
226  static bool checkFaceSkewness
227  (
228  const bool report,
229  const scalar internalSkew,
230  const scalar boundarySkew,
231  const polyMesh& mesh,
232  const pointField& points,
233  const vectorField& cellCentres,
234  const vectorField& faceCentres,
235  const vectorField& faceAreas,
236  const labelList& checkFaces,
237  const List<labelPair>& baffles,
238  labelHashSet* setPtr
239  );
240 
241  //- Interpolation weights (0.5 for regular mesh)
242  static bool checkFaceWeights
243  (
244  const bool report,
245  const scalar warnWeight,
246  const polyMesh& mesh,
247  const vectorField& cellCentres,
248  const vectorField& faceCentres,
249  const vectorField& faceAreas,
250  const labelList& checkFaces,
251  const List<labelPair>& baffles,
252  labelHashSet* setPtr
253  );
254 
255  //- Cell volume ratio of neighbouring cells (1 for regular mesh)
256  static bool checkVolRatio
257  (
258  const bool report,
259  const scalar warnRatio,
260  const polyMesh& mesh,
261  const scalarField& cellVolumes,
262  const labelList& checkFaces,
263  const List<labelPair>& baffles,
264  labelHashSet* setPtr
265  );
266 
267  //- See primitiveMesh
268  static bool checkFaceAngles
269  (
270  const bool report,
271  const scalar maxDeg,
272  const polyMesh& mesh,
273  const vectorField& faceAreas,
274  const pointField& p,
275  const labelList& checkFaces,
276  labelHashSet* setPtr
277  );
278 
279  //- Triangle (from face-centre decomposition) normal v.s.
280  // average face normal
281  static bool checkFaceTwist
282  (
283  const bool report,
284  const scalar minTwist,
285  const polyMesh&,
286  const vectorField& cellCentres,
287  const vectorField& faceAreas,
288  const vectorField& faceCentres,
289  const pointField& p,
290  const labelList& checkFaces,
291  labelHashSet* setPtr
292  );
293 
294  //- Consecutive triangle (from face-centre decomposition) normals
295  static bool checkTriangleTwist
296  (
297  const bool report,
298  const scalar minTwist,
299  const polyMesh&,
300  const vectorField& faceAreas,
301  const vectorField& faceCentres,
302  const pointField& p,
303  const labelList& checkFaces,
304  labelHashSet* setPtr
305  );
306 
307  //- Area of faces v.s. sum of triangle areas
308  static bool checkFaceFlatness
309  (
310  const bool report,
311  const scalar minFlatness,
312  const polyMesh&,
313  const vectorField& faceAreas,
314  const vectorField& faceCentres,
315  const pointField& p,
316  const labelList& checkFaces,
317  labelHashSet* setPtr
318  );
319 
320  //- Small faces
321  static bool checkFaceArea
322  (
323  const bool report,
324  const scalar minArea,
325  const polyMesh&,
326  const vectorField& faceAreas,
327  const labelList& checkFaces,
328  labelHashSet* setPtr
329  );
330 
331  //- Area of internal faces v.s. boundary faces
332  static bool checkCellDeterminant
333  (
334  const bool report,
335  const scalar minDet,
336  const polyMesh&,
337  const vectorField& faceAreas,
338  const labelList& checkFaces,
339  const labelList& affectedCells,
340  labelHashSet* setPtr
341  );
342 
343 
344  // Checking of selected faces with local geometry. Uses above static
345  // functions. Parallel aware.
346 
348  (
349  const bool report,
350  const scalar orthWarn,
351  const labelList& checkFaces,
352  const List<labelPair>& baffles,
353  labelHashSet* setPtr
354  ) const;
355 
356  bool checkFacePyramids
357  (
358  const bool report,
359  const scalar minPyrVol,
360  const pointField& p,
361  const labelList& checkFaces,
362  const List<labelPair>& baffles,
363  labelHashSet* setPtr
364  ) const;
365 
366  bool checkFaceTets
367  (
368  const bool report,
369  const scalar minTetQuality,
370  const pointField& p,
371  const labelList& checkFaces,
372  const List<labelPair>& baffles,
373  labelHashSet* setPtr
374  ) const;
375 
376  bool checkFaceWeights
377  (
378  const bool report,
379  const scalar warnWeight,
380  const labelList& checkFaces,
381  const List<labelPair>& baffles,
382  labelHashSet* setPtr
383  ) const;
384 
385  bool checkVolRatio
386  (
387  const bool report,
388  const scalar warnRatio,
389  const labelList& checkFaces,
390  const List<labelPair>& baffles,
391  labelHashSet* setPtr
392  ) const;
393 
394  bool checkFaceAngles
395  (
396  const bool report,
397  const scalar maxDeg,
398  const pointField& p,
399  const labelList& checkFaces,
400  labelHashSet* setPtr
401  ) const;
402 
403  bool checkFaceTwist
404  (
405  const bool report,
406  const scalar minTwist,
407  const pointField& p,
408  const labelList& checkFaces,
409  labelHashSet* setPtr
410  ) const;
411 
412  bool checkTriangleTwist
413  (
414  const bool report,
415  const scalar minTwist,
416  const pointField& p,
417  const labelList& checkFaces,
418  labelHashSet* setPtr
419  ) const;
420 
421  bool checkFaceFlatness
422  (
423  const bool report,
424  const scalar minFlatness,
425  const pointField& p,
426  const labelList& checkFaces,
427  labelHashSet* setPtr
428  ) const;
429 
430  bool checkFaceArea
431  (
432  const bool report,
433  const scalar minArea,
434  const labelList& checkFaces,
435  labelHashSet* setPtr
436  ) const;
437 
439  (
440  const bool report,
441  const scalar warnDet,
442  const labelList& checkFaces,
443  const labelList& affectedCells,
444  labelHashSet* setPtr
445  ) const;
446 };
447 
448 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
449 
450 } // End namespace Foam
451 
452 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
453 
454 #endif
455 
456 // ************************************************************************* //
Foam::polyMeshGeometry::cellVolumes_
scalarField cellVolumes_
Uptodate copy of cell volumes.
Definition: polyMeshGeometry.H:67
Foam::polyMeshGeometry::cellCentres_
vectorField cellCentres_
Uptodate copy of cell centres.
Definition: polyMeshGeometry.H:64
Foam::pointField
vectorField pointField
pointField is a vectorField.
Definition: pointFieldFwd.H:42
Foam::polyMeshGeometry::checkFaceDotProduct
static bool checkFaceDotProduct(const bool report, const scalar orthWarn, const polyMesh &, const vectorField &cellCentres, const vectorField &faceAreas, const labelList &checkFaces, const List< labelPair > &baffles, labelHashSet *setPtr)
See primitiveMesh.
Definition: polyMeshGeometry.C:371
Foam::scalarField
Field< scalar > scalarField
Specialisation of Field<T> for scalar.
Definition: primitiveFieldsFwd.H:48
Foam::polyMeshGeometry::ClassName
ClassName("polyMeshGeometry")
Foam::polyMeshGeometry::faceAreas
const vectorField & faceAreas() const
Definition: polyMeshGeometry.H:143
p
p
Definition: pEqn.H:62
Foam::labelList
List< label > labelList
A List of labels.
Definition: labelList.H:56
Foam::polyMeshGeometry::cellVolumes
const scalarField & cellVolumes() const
Definition: polyMeshGeometry.H:155
Foam::polyMeshGeometry::updateCellCentresAndVols
void updateCellCentresAndVols(const labelList &changedCells, const labelList &changedFaces)
Update cell volumes and centres on selected cells. Requires.
Definition: polyMeshGeometry.C:101
Foam::polyMeshGeometry::checkFaceWeights
static bool checkFaceWeights(const bool report, const scalar warnWeight, const polyMesh &mesh, const vectorField &cellCentres, const vectorField &faceCentres, const vectorField &faceAreas, const labelList &checkFaces, const List< labelPair > &baffles, labelHashSet *setPtr)
Interpolation weights (0.5 for regular mesh)
Definition: polyMeshGeometry.C:1176
Foam::polyMeshGeometry::checkNonOrtho
static scalar checkNonOrtho(const polyMesh &mesh, const bool report, const scalar severeNonorthogonalityThreshold, const label faceI, const vector &s, const vector &d, label &severeNonOrth, label &errorNonOrth, labelHashSet *setPtr)
Detect&report non-ortho error for single face.
Definition: polyMeshGeometry.C:214
Foam::polyMeshGeometry::correct
void correct()
Take over properties from mesh.
Definition: polyMeshGeometry.C:347
Foam::polyMeshGeometry::checkFaceTets
static bool checkFaceTets(const bool report, const scalar minPyrVol, const polyMesh &, const vectorField &cellCentres, const vectorField &faceCentres, const pointField &p, const labelList &checkFaces, const List< labelPair > &baffles, labelHashSet *)
See primitiveMesh.
Definition: polyMeshGeometry.C:734
Foam::polyMeshGeometry::polyMeshGeometry
polyMeshGeometry(const polyMesh &)
Construct from mesh.
Definition: polyMeshGeometry.C:336
Foam::polyMeshGeometry::checkFaceTet
static bool checkFaceTet(const polyMesh &, const bool report, const scalar minTetQuality, const pointField &p, const label faceI, const point &fc, const point &cc, labelHashSet *setPtr)
Detect&report incorrect face-triangle orientation.
Definition: polyMeshGeometry.C:282
Foam::HashSet< label, Hash< label > >
Foam::polyMesh
Mesh consisting of general polyhedral cells.
Definition: polyMesh.H:74
Foam::polyMeshGeometry::faceCentres_
vectorField faceCentres_
Uptodate copy of face centres.
Definition: polyMeshGeometry.H:61
Foam::polyMeshGeometry::faceCentres
const vectorField & faceCentres() const
Definition: polyMeshGeometry.H:147
Foam::polyMeshGeometry::checkFaceSkewness
static bool checkFaceSkewness(const bool report, const scalar internalSkew, const scalar boundarySkew, const polyMesh &mesh, const pointField &points, const vectorField &cellCentres, const vectorField &faceCentres, const vectorField &faceAreas, const labelList &checkFaces, const List< labelPair > &baffles, labelHashSet *setPtr)
See primitiveMesh.
Definition: polyMeshGeometry.C:963
Foam::vectorField
Field< vector > vectorField
Specialisation of Field<T> for vector.
Definition: primitiveFieldsFwd.H:49
Foam::polyMeshGeometry::faceAreas_
vectorField faceAreas_
Uptodate copy of face areas.
Definition: polyMeshGeometry.H:58
Foam::label
intWM_LABEL_SIZE_t label
A label is an int32_t or int64_t as specified by the pre-processor macro WM_LABEL_SIZE.
Definition: label.H:59
Foam::polyMeshGeometry::affectedCells
static labelList affectedCells(const polyMesh &, const labelList &changedFaces)
Helper function: get affected cells from faces.
Definition: polyMeshGeometry.C:188
Foam::polyMeshGeometry::checkFaceArea
static bool checkFaceArea(const bool report, const scalar minArea, const polyMesh &, const vectorField &faceAreas, const labelList &checkFaces, labelHashSet *setPtr)
Small faces.
Definition: polyMeshGeometry.C:2039
Foam::Field
Pre-declare SubField and related Field type.
Definition: Field.H:57
Foam::polyMeshGeometry::mesh
const polyMesh & mesh() const
Definition: polyMeshGeometry.H:138
Foam::polyMeshGeometry::updateFaceCentresAndAreas
void updateFaceCentresAndAreas(const pointField &p, const labelList &changedFaces)
Update face areas and centres on selected faces.
Definition: polyMeshGeometry.C:45
HashSet.H
Foam
Namespace for OpenFOAM.
Definition: combustionModel.C:30
s
gmvFile<< "tracers "<< particles.size()<< nl;forAllConstIter(Cloud< passiveParticle >, particles, iter){ gmvFile<< iter().position().x()<< " ";}gmvFile<< nl;forAllConstIter(Cloud< passiveParticle >, particles, iter){ gmvFile<< iter().position().y()<< " ";}gmvFile<< nl;forAllConstIter(Cloud< passiveParticle >, particles, iter){ gmvFile<< iter().position().z()<< " ";}gmvFile<< nl;forAll(lagrangianScalarNames, i){ word name=lagrangianScalarNames[i];IOField< scalar > s(IOobject(name, runTime.timeName(), cloud::prefix, mesh, IOobject::MUST_READ, IOobject::NO_WRITE))
Foam::polyMeshGeometry::checkFaceTwist
static bool checkFaceTwist(const bool report, const scalar minTwist, const polyMesh &, const vectorField &cellCentres, const vectorField &faceAreas, const vectorField &faceCentres, const pointField &p, const labelList &checkFaces, labelHashSet *setPtr)
Triangle (from face-centre decomposition) normal v.s.
Definition: polyMeshGeometry.C:1606
Foam::polyMeshGeometry::checkFaceFlatness
static bool checkFaceFlatness(const bool report, const scalar minFlatness, const polyMesh &, const vectorField &faceAreas, const vectorField &faceCentres, const pointField &p, const labelList &checkFaces, labelHashSet *setPtr)
Area of faces v.s. sum of triangle areas.
Definition: polyMeshGeometry.C:1941
Foam::Vector< scalar >
Foam::List
A 1D array of objects of type <T>, where the size of the vector is known and used for subscript bound...
Definition: HashTable.H:59
Foam::polyMeshGeometry::mesh_
const polyMesh & mesh_
Reference to polyMesh.
Definition: polyMeshGeometry.H:55
points
const pointField & points
Definition: gmvOutputHeader.H:1
List
Definition: Test.C:19
Foam::polyMeshGeometry
Updateable mesh geometry and checking routines.
Definition: polyMeshGeometry.H:52
Foam::polyMeshGeometry::calcSkewness
static scalar calcSkewness(const point &ownCc, const point &neiCc, const point &fc)
Calculate skewness given two cell centres and one face centre.
Foam::polyMeshGeometry::checkFacePyramids
static bool checkFacePyramids(const bool report, const scalar minPyrVol, const polyMesh &, const vectorField &cellCentres, const pointField &p, const labelList &checkFaces, const List< labelPair > &baffles, labelHashSet *)
See primitiveMesh.
Definition: polyMeshGeometry.C:553
Foam::polyMeshGeometry::checkCellDeterminant
static bool checkCellDeterminant(const bool report, const scalar minDet, const polyMesh &, const vectorField &faceAreas, const labelList &checkFaces, const labelList &affectedCells, labelHashSet *setPtr)
Area of internal faces v.s. boundary faces.
Definition: polyMeshGeometry.C:2100
Foam::labelHashSet
HashSet< label, Hash< label > > labelHashSet
A HashSet with label keys.
Definition: HashSet.H:210
Foam::polyMeshGeometry::checkTriangleTwist
static bool checkTriangleTwist(const bool report, const scalar minTwist, const polyMesh &, const vectorField &faceAreas, const vectorField &faceCentres, const pointField &p, const labelList &checkFaces, labelHashSet *setPtr)
Consecutive triangle (from face-centre decomposition) normals.
Definition: polyMeshGeometry.C:1791
Foam::polyMeshGeometry::cellCentres
const vectorField & cellCentres() const
Definition: polyMeshGeometry.H:151
pointFields.H
Foam::polyMeshGeometry::checkVolRatio
static bool checkVolRatio(const bool report, const scalar warnRatio, const polyMesh &mesh, const scalarField &cellVolumes, const labelList &checkFaces, const List< labelPair > &baffles, labelHashSet *setPtr)
Cell volume ratio of neighbouring cells (1 for regular mesh)
Definition: polyMeshGeometry.C:1331
Foam::polyMeshGeometry::checkFaceAngles
static bool checkFaceAngles(const bool report, const scalar maxDeg, const polyMesh &mesh, const vectorField &faceAreas, const pointField &p, const labelList &checkFaces, labelHashSet *setPtr)
See primitiveMesh.
Definition: polyMeshGeometry.C:1473