Merge branch 'master' of ssh://git.code.sf.net/p/foam-extend/foam-extend-3.2
[foam-extend-3.2.git] / src / foam / meshes / primitiveMesh / primitiveMeshCellPoints.C
blob08c197fc38bcdfaf6a18313cf4195d068ae56266
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 \*---------------------------------------------------------------------------*/
26 #include "primitiveMesh.H"
27 #include "ListOps.H"
29 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
31 const Foam::labelListList& Foam::primitiveMesh::cellPoints() const
33     if (!cpPtr_)
34     {
35         if (debug)
36         {
37             Pout<< "primitiveMesh::cellPoints() : "
38                 << "calculating cellPoints" << endl;
40             if (debug == -1)
41             {
42                 // For checking calls:abort so we can quickly hunt down
43                 // origin of call
44                 FatalErrorIn("primitiveMesh::cellPoints()")
45                     << abort(FatalError);
46             }
47         }
49         // Invert pointCells
50         cpPtr_ = new labelListList(nCells());
51         invertManyToMany(nCells(), pointCells(), *cpPtr_);
52     }
54     return *cpPtr_;
58 const Foam::labelList& Foam::primitiveMesh::cellPoints
60     const label cellI,
61     dynamicLabelList& storage
62 ) const
64     if (hasCellPoints())
65     {
66         return cellPoints()[cellI];
67     }
68     else
69     {
70         const faceList& fcs = faces();
71         const labelList& cFaces = cells()[cellI];
73         labelSet_.clear();
75         forAll(cFaces, i)
76         {
77             const labelList& f = fcs[cFaces[i]];
79             forAll(f, fp)
80             {
81                 labelSet_.insert(f[fp]);
82             }
83         }
85         storage.clear();
86         if (labelSet_.size() > storage.capacity())
87         {
88             storage.setCapacity(labelSet_.size());
89         }
91         forAllConstIter(labelHashSet, labelSet_, iter)
92         {
93             storage.append(iter.key());
94         }
96         return storage;
97     }
101 const Foam::labelList& Foam::primitiveMesh::cellPoints(const label cellI) const
103     return cellPoints(cellI, labels_);
107 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
109 // ************************************************************************* //