Merge branch 'master' of ssh://git.code.sf.net/p/foam-extend/foam-extend-3.2
[foam-extend-3.2.git] / src / mesh / cfMesh / utilities / meshes / polyMeshGen / polyMeshGenFacesI.H
blob6a86878afe1ef932f226d79a448ead0f9eb60848
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | cfMesh: A library for mesh generation
4    \\    /   O peration     |
5     \\  /    A nd           | Author: Franjo Juretic (franjo.juretic@c-fields.com)
6      \\/     M anipulation  | Copyright (C) Creative Fields, Ltd.
7 -------------------------------------------------------------------------------
8 License
9     This file is part of cfMesh.
11     cfMesh 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     cfMesh 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 cfMesh.  If not, see <http://www.gnu.org/licenses/>.
24 Description
27 \*---------------------------------------------------------------------------*/
30 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
32 #include "polyMeshGenFaces.H"
34 # ifdef USE_OMP
35 #include <omp.h>
36 # endif
38 namespace Foam
41 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
43 inline const faceListPMG& polyMeshGenFaces::faces() const
45     return faces_;
48 inline label polyMeshGenFaces::nInternalFaces() const
50     if( !(ownerPtr_ && neighbourPtr_) )
51     {
52         # ifdef USE_OMP
53         if( omp_in_parallel() )
54             FatalErrorIn
55             (
56                 "inline label polyMeshGenFaces::nInternalFaces() const"
57             ) << "Calculating addressing inside a parallel region."
58                 << " This is not thread safe" << exit(FatalError);
59         # endif
61         calculateOwnersAndNeighbours();
62     }
64     return nIntFaces_;
67 inline const labelList& polyMeshGenFaces::owner() const
69     if( !ownerPtr_ )
70     {
71         # ifdef USE_OMP
72         if( omp_in_parallel() )
73             FatalErrorIn
74             (
75                 "inline label polyMeshGenFaces::owner() const"
76             ) << "Calculating addressing inside a parallel region."
77                 << " This is not thread safe" << exit(FatalError);
78         # endif
80         calculateOwnersAndNeighbours();
81     }
83     return *ownerPtr_;
86 inline const labelList& polyMeshGenFaces::neighbour() const
88     if( !neighbourPtr_ )
89     {
90         # ifdef USE_OMP
91         if( omp_in_parallel() )
92             FatalErrorIn
93             (
94                 "inline label polyMeshGenFaces::neighbour() const"
95             ) << "Calculating addressing inside a parallel region."
96                 << " This is not thread safe" << exit(FatalError);
97         # endif
99         calculateOwnersAndNeighbours();
100     }
102     return *neighbourPtr_;
105 inline const PtrList<processorBoundaryPatch>&
106 polyMeshGenFaces::procBoundaries() const
108     return procBoundaries_;
111 inline const PtrList<boundaryPatch>& polyMeshGenFaces::boundaries() const
113     return boundaries_;
116 inline void polyMeshGenFaces::addFaceToSubset
118     const label setID,
119     const label faceI
122     std::map<label, meshSubset>::iterator it = faceSubsets_.find(setID);
123     if( it == faceSubsets_.end() )
124         return;
126     it->second.addElement(faceI);
129 inline void polyMeshGenFaces::removeFaceFromSubset
131     const label setI,
132     const label faceI)
134     std::map<label, meshSubset>::iterator it = faceSubsets_.find(setI);
135     if( it == faceSubsets_.end() )
136         return;
138     it->second.removeElement(faceI);
141 inline void polyMeshGenFaces::faceInSubsets
143     const label faceI,
144     DynList<label>& faceSubsets
145 ) const
147     faceSubsets.clear();
149     std::map<label, meshSubset>::const_iterator it;
150     for
151     (
152         it=faceSubsets_.begin();
153         it!=faceSubsets_.end();
154         ++it
155     )
156     {
157         if( it->second.contains(faceI) )
158             faceSubsets.append(it->first);
159     }
162 inline void polyMeshGenFaces::faceSubsetIndices(DynList<label>& indices) const
164     indices.clear();
166     std::map<label, meshSubset>::const_iterator it;
167     for
168     (
169         it=faceSubsets_.begin();
170         it!=faceSubsets_.end();
171         ++it
172     )
173         indices.append(it->first);
176 template<class ListType>
177 inline void polyMeshGenFaces::facesInSubset
179     const label setI,
180     ListType& faceLabels
181 ) const
183     faceLabels.clear();
185     std::map<label, meshSubset>::const_iterator it =
186         faceSubsets_.find(setI);
187     if( it == faceSubsets_.end() )
188         return;
190     it->second.containedElements(faceLabels);
193 template<class ListType>
194 inline void polyMeshGenFaces::updateFaceSubsets(const ListType& newFaceLabels)
196     for
197     (
198         std::map<label, meshSubset>::iterator it=faceSubsets_.begin();
199         it!=faceSubsets_.end();
200         ++it
201     )
202         it->second.updateSubset(newFaceLabels);
205 inline void polyMeshGenFaces::updateFaceSubsets(const VRWGraph& newFacesForFace)
207     for
208     (
209         std::map<label, meshSubset>::iterator it=faceSubsets_.begin();
210         it!=faceSubsets_.end();
211         ++it
212     )
213         it->second.updateSubset(newFacesForFace);
216 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
218 } // End namespace Foam
220 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //