FreeFOAM The Cross-Platform CFD Toolkit
calcFaceAddressing.C
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) 1991-2010 OpenCFD Ltd.
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 Description
25 
26 \*---------------------------------------------------------------------------*/
27 
28 #include "calcFaceAddressing.H"
29 
30 using namespace Foam;
31 
32 // * * * * * * * * * * * * * * * Friend Functions * * * * * * * * * * * * * //
33 
34 // Returns the face labels of the shape in an order consistent with the
35 // shape.
37 (
38  const faceList& allFaces, // faces given faceLabels
39  const cellShape& shape,
40  const labelList& faces, // faceLabels for given cell
41  const label cellI
42 )
43 {
44  // return value.
45  labelList shapeToMesh(shape.nFaces(), -1);
46 
47  const faceList modelFaces(shape.faces());
48 
49  // Loop over all faces of cellShape
50  forAll(modelFaces, cellFaceI)
51  {
52  // face (vertex list)
53  const face& modelFace = modelFaces[cellFaceI];
54 
55  // Loop over all face labels
56  forAll(faces, faceI)
57  {
58  const face& vertLabels = allFaces[faces[faceI]];
59 
60  if (vertLabels == modelFace)
61  {
62  //Info<< "match:" << modelFace
63  // << " to " << vertLabels << endl;
64  shapeToMesh[cellFaceI] = faces[faceI];
65  break;
66  }
67  }
68 
69  if (shapeToMesh[cellFaceI] == -1)
70  {
71  FatalErrorIn("foamToFieldview : calcFaceAddressing")
72  << "calcFaceAddressing : can't match face to shape.\n"
73  << " shape face:" << modelFace << endl
74  << " face labels:" << faces << endl
75  << " cellI:" << cellI << endl;
76 
77  FatalError << "Faces consist of vertices:" << endl;
78  forAll(faces, faceI)
79  {
81  << " face:" << faces[faceI]
82  << allFaces[faces[faceI]] << endl;
83  }
85  }
86  }
87  return shapeToMesh;
88 }
89 
90 
91 // ************************ vim: set sw=4 sts=4 et: ************************ //