BUGFIX: Illegal use of uninitialised value (backport)
[foam-extend-3.2.git] / src / dynamicMesh / dynamicFvMesh / dynamicTopoFvMesh / coupleMapI.H
bloba71f6ff6c2a479fb354ca0c7fb4d95b8877f280f
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright held by original author
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 namespace Foam
30 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
32 //- Interpolate point field
33 template<class Type>
34 tmp<Field<Type> >
35 coupleMap::pointInterpolate
37     const Map<label>& mPointMap,
38     const Map<label>& sPointMap,
39     const Field<Type>& pf,
40     bool reverse
41 ) const
43     const Map<label>& pointMap = entityMap(coupleMap::POINT);
45     if (pf.size() != pointMap.size())
46     {
47         FatalErrorIn
48         (
49             "coupleMap::pointInterpolate"
50             "(const Field<Type> pf)"
51         )   << "given field does not correspond to patch. Patch size: "
52             << pointMap.size() << " field size: " << pf.size()
53             << abort(FatalError);
54     }
56     tmp<Field<Type> > tresult
57     (
58         new Field<Type>
59         (
60             pointMap.size(),
61             pTraits<Type>::zero
62         )
63     );
65     Field<Type>& result = tresult();
67     if (reverse)
68     {
69         forAllConstIter(Map<label>, pointMap, pIter)
70         {
71             result[mPointMap[pIter.key()]] = pf[sPointMap[pIter()]];
72         }
73     }
74     else
75     {
76         forAllConstIter(Map<label>, pointMap, pIter)
77         {
78             result[sPointMap[pIter()]] = pf[mPointMap[pIter.key()]];
79         }
80     }
82     return tresult;
86 template<class Type>
87 tmp<Field<Type> >
88 coupleMap::pointInterpolate
90     const Map<label>& mPointMap,
91     const Map<label>& sPointMap,
92     const tmp<Field<Type> >& tpf,
93     bool reverse
94 ) const
96     tmp<Field<Type> > tint =
97     (
98         pointInterpolate<Type>(mPointMap, sPointMap, tpf(), reverse)
99     );
100     tpf.clear();
101     return tint;
105 //- Interpolate point field
106 template<class Type>
107 tmp<Field<Type> >
108 coupleMap::faceInterpolate
110     const label mStart,
111     const label sStart,
112     const Field<Type>& pf,
113     bool reverse
114 ) const
116     const Map<label>& faceMap = entityMap(coupleMap::FACE);
118     if (pf.size() != faceMap.size())
119     {
120         FatalErrorIn
121         (
122             "coupleMap::faceInterpolate"
123             "(const Field<Type> pf)"
124         )   << "given field does not correspond to patch. Patch size: "
125             << faceMap.size() << " field size: " << pf.size()
126             << abort(FatalError);
127     }
129     tmp<Field<Type> > tresult
130     (
131         new Field<Type>
132         (
133             faceMap.size(),
134             pTraits<Type>::zero
135         )
136     );
138     Field<Type>& result = tresult();
140     if (reverse)
141     {
142         forAllConstIter(Map<label>, faceMap, fIter)
143         {
144             result[fIter.key() - mStart] = pf[fIter() - sStart];
145         }
146     }
147     else
148     {
149         forAllConstIter(Map<label>, faceMap, fIter)
150         {
151             result[fIter() - sStart] = pf[fIter.key() - mStart];
152         }
153     }
155     return tresult;
159 template<class Type>
160 tmp<Field<Type> >
161 coupleMap::faceInterpolate
163     const label mStart,
164     const label sStart,
165     const tmp<Field<Type> >& tpf,
166     bool reverse
167 ) const
169     tmp<Field<Type> > tint =
170     (
171         faceInterpolate<Type>(mStart, sStart, tpf(), reverse)
172     );
173     tpf.clear();
174     return tint;
178 inline label& coupleMap::patchIndex() const
180     return patchIndex_;
184 inline label coupleMap::masterIndex() const
186     return masterIndex_;
190 inline label coupleMap::slaveIndex() const
192     return slaveIndex_;
196 inline bool coupleMap::isTwoDMesh() const
198     return twoDMesh_;
202 inline bool coupleMap::isLocal() const
204     return isLocal_;
208 inline bool coupleMap::isProcessor() const
210     return !isLocal_;
214 inline bool coupleMap::isSend() const
216     return isSend_;
220 inline bool coupleMap::isRecv() const
222     return !isSend_;
226 inline FixedList<label,10>& coupleMap::nEntities() const
228     return nEntities_;
232 inline label& coupleMap::nEntities(const label eType) const
234     return nEntities_[eType];
238 inline Map<label>& coupleMap::entityMap(const label eType) const
240     return entityMap_[eType];
244 inline Map<label>& coupleMap::reverseEntityMap(const label eType) const
246     return reverseEntityMap_[eType];
250 inline FixedList<labelList,12>& coupleMap::entityBuffer() const
252     return entityBuffer_;
256 inline labelList& coupleMap::entityBuffer(const label eType) const
258     return entityBuffer_[eType];
262 inline labelList& coupleMap::entityIndices() const
264     return entityIndices_;
268 inline List<coupleMap::opType>& coupleMap::entityOperations() const
270     return entityOperations_;
274 inline pointField& coupleMap::moveNewPoints() const
276     return moveNewPoints_;
280 inline pointField& coupleMap::moveOldPoints() const
282     return moveOldPoints_;
286 } // End namespace Foam
288 // ************************************************************************* //