Loading...
Searching...
No Matches
faPatchMapper.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 | www.openfoam.com
6 \\/ M anipulation |
7-------------------------------------------------------------------------------
8 Copyright (C) 2016-2017 Wikki Ltd
9-------------------------------------------------------------------------------
10License
11 This file is part of OpenFOAM.
12
13 OpenFOAM is free software: you can redistribute it and/or modify it
14 under the terms of the GNU General Public License as published by
15 the Free Software Foundation, either version 3 of the License, or
16 (at your option) any later version.
17
18 OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
19 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
20 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
21 for more details.
22
23 You should have received a copy of the GNU General Public License
24 along with OpenFOAM. If not, see <http://www.gnu.org/licenses/>.
25
26\*---------------------------------------------------------------------------*/
27
28#include "faPatchMapper.H"
29#include "mapPolyMesh.H"
30
31// * * * * * * * * * * * * * Private Member Functions * * * * * * * * * * * //
32
33void Foam::faPatchMapper::calcAddressing() const
34{
35 if (directAddrPtr_)
36 {
38 << "Addressing already calculated"
39 << abort(FatalError);
40 }
41
42 // Compatibility change HJ, 12/Aug/2017
43 hasUnmapped_ = false;
44
45 directAddrPtr_ = std::make_unique<labelList>(patch_.size(), Foam::zero{});
46 auto& addr = *directAddrPtr_;
47
48 // Make a map of old edgeFaces, giving edge index in patch given the new
49 // face label next to the patch
50
51 // Create edge index lookup
52 Map<label> edgeIndexLookup;
53
54 const labelList& reverseFaceMap = mpm_.reverseFaceMap();
55
56 forAll(oldEdgeFaces_, oefI)
57 {
58 if (reverseFaceMap[oldEdgeFaces_[oefI]] > -1)
59 {
60 // Face has survived. Insert its label under new face index
61 edgeIndexLookup.insert(reverseFaceMap[oldEdgeFaces_[oefI]], oefI);
62 }
63 }
64
65 // Go through new edgeFaces and for each edge try to locate old index
66 const labelUList& ef = patch_.edgeFaces();
67
68 forAll(ef, efI)
69 {
70 const auto iter = edgeIndexLookup.cfind(ef[efI]);
71
72 if (iter.good())
73 {
74 addr[efI] = iter.val();
75 }
76 else
77 {
78 // Not found: map from zero
79 addr[efI] = 0;
80
81 // Compatibility change HJ, 12/Aug/2017
82 hasUnmapped_ = true;
83 }
84 }
85}
86
87
88// void Foam::faPatchMapper::clearOut()
89// {
90// directAddrPtr_.reset(nullptr);
91// hasUnmapped_ = false;
92// }
93
94
95// * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * //
96
98(
99 const faPatch& patch,
100 const mapPolyMesh& mpm
101)
102:
103 patch_(patch),
104 mpm_(mpm),
105 sizeBeforeMapping_(patch.size()),
106 oldEdgeFaces_(patch.edgeFaces()),
107 hasUnmapped_(false)
108{}
109
110
111// * * * * * * * * * * * * * * * * Destructor * * * * * * * * * * * * * * * //
114{}
115
116
117// * * * * * * * * * * * * * * * Member Functions * * * * * * * * * * * * * //
118
120{
121 if (!directAddrPtr_)
122 {
123 calcAddressing();
124 }
125
126 return *directAddrPtr_;
127}
128
129
131{
133 << "Requested interpolative addressing for a direct mapper."
134 << abort(FatalError);
135
136 return labelListList::null();
137}
138
139
141{
143 << "Requested interpolative weights for a direct mapper."
144 << abort(FatalError);
145
146 return scalarListList::null();
147}
148
149
150// ************************************************************************* //
static const List< labelList > & null() noexcept
Definition List.H:138
virtual label size() const
Return size.
virtual const labelListList & addressing() const
Return interpolated addressing.
virtual const scalarListList & weights() const
Return interpolation weights.
faPatchMapper(const faPatchMapper &)=delete
No copy construct.
virtual const labelUList & directAddressing() const
Return direct addressing.
virtual ~faPatchMapper()
Destructor.
Finite area patch class. Used for 2-D non-Euclidian finite area method.
Definition faPatch.H:76
Class containing mesh-to-mesh mapping information after a change in polyMesh topology.
#define FatalErrorInFunction
Report an error message using Foam::FatalError.
Definition error.H:600
List< scalarList > scalarListList
List of scalarList.
Definition scalarList.H:35
List< labelList > labelListList
List of labelList.
Definition labelList.H:38
List< label > labelList
A List of labels.
Definition List.H:62
errorManip< error > abort(error &err)
Definition errorManip.H:139
error FatalError
Error stream (stdout output on all processes), with additional 'FOAM FATAL ERROR' header text and sta...
UList< label > labelUList
A UList of labels.
Definition UList.H:75
#define forAll(list, i)
Loop across all elements in list.
Definition stdFoam.H:299