intersection with triangle plane for miss
[OpenFOAM-1.5.x.git] / src / OpenFOAM / meshes / primitiveMesh / primitiveMeshPointCells.C
blob55d877902a6fa1e9301d77ce429a3adf71717a33
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright (C) 1991-2008 OpenCFD Ltd.
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 the
13     Free Software Foundation; either version 2 of the License, or (at your
14     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, write to the Free Software Foundation,
23     Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
25 \*---------------------------------------------------------------------------*/
27 #include "primitiveMesh.H"
28 #include "cell.H"
30 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
32 namespace Foam
35 // * * * * * * * * * * * * * Private Member Functions  * * * * * * * * * * * //
37 void primitiveMesh::calcPointCells() const
39     // Loop through cells and mark up points
41     if (debug)
42     {
43         Pout<< "primitiveMesh::calcPointCells() : "
44             << "calculating pointCells"
45             << endl;
46     }
48     // It is an error to attempt to recalculate pointCells
49     // if the pointer is already set
50     if (pcPtr_)
51     {
52         FatalErrorIn("primitiveMesh::calcPointCells() const")
53             << "pointCells already calculated"
54             << abort(FatalError);
55     }
56     else
57     {
58         const cellList& cf = cells();
60         // Count number of cells per point
62         labelList npc(nPoints(), 0);
64         forAll (cf, cellI)
65         {
66             const labelList curPoints = cf[cellI].labels(faces());
68             forAll (curPoints, pointI)
69             {
70                 label ptI = curPoints[pointI];
72                 npc[ptI]++;
73             }
74         }
77         // Size and fill cells per point
79         pcPtr_ = new labelListList(npc.size());
80         labelListList& pointCellAddr = *pcPtr_;
82         forAll (pointCellAddr, pointI)
83         {
84             pointCellAddr[pointI].setSize(npc[pointI]);
85         }
86         npc = 0;
89         forAll (cf, cellI)
90         {
91             const labelList curPoints = cf[cellI].labels(faces());
93             forAll (curPoints, pointI)
94             {
95                 label ptI = curPoints[pointI];
97                 pointCellAddr[ptI][npc[ptI]++] = cellI;
98             }
99         }
100     }
104 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
106 const labelListList& primitiveMesh::pointCells() const
108     if (!pcPtr_)
109     {
110         calcPointCells();
111     }
113     return *pcPtr_;
117 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
119 } // End namespace Foam
121 // ************************************************************************* //