Merge branch 'master' of ssh://git.code.sf.net/p/foam-extend/foam-extend-3.2
[foam-extend-3.2.git] / src / tetFiniteElement / tetPolyPatchInterpolation / tetPolyPatchInterpolate.C
blobef530632ab28d8e1dc852434ac9048fd2a37c4cb
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 Description
26 \*---------------------------------------------------------------------------*/
28 #include "tetPolyPatchInterpolation.H"
29 #include "faceTetPolyPatch.H"
31 // * * * * * * * * * * * * * * * Member Functions  * * * * * * * * * * * * * //
34 template<class Type>
35 Foam::tmp<Foam::Field<Type> >
36 Foam::tetPolyPatchInterpolation::faceToPointInterpolate
38     const Field<Type>& ff
39 ) const
41     if (ff.size() != patch_.patch().size())
42     {
43         FatalErrorIn
44         (
45             "tmp<Foam::Field<Type> >\n"
46             "tetPolyPatchInterpolation::faceToPointInterpolate\n"
47             "(\n"
48             "    const Field<Type>& ff\n"
49             ") const"
50         )  << "Field size: " << ff.size() << " does not match number of faces: "
51            << patch_.patch().size()
52            << abort(FatalError);
53     }
55     tmp<Field<Type> > tresult
56     (
57         new Field<Type>(patch_.size())
58     );
59     Field<Type>& result = tresult();
61     // Insert the point values first
62     label i = 0;
64     const Field<Type> pointRes = interpolator_.faceToPointInterpolate(ff);
66     forAll (pointRes, pointI)
67     {
68         result[i] = pointRes[pointI];
69         i++;
70     }
72     // Insert the face centre values; no interpolation necessary
73     forAll (ff, faceI)
74     {
75         result[i] = ff[faceI];
76         i++;
77     }
79     return tresult;
83 template<class Type>
84 Foam::tmp<Foam::Field<Type> >
85 Foam::tetPolyPatchInterpolation::faceToPointInterpolate
87     const tmp<Field<Type> >& tff
88 ) const
90     tmp<Field<Type> > tint = this->faceToPointInterpolate(tff());
91     tff.clear();
92     return tint;
96 template<class Type>
97 Foam::tmp<Foam::Field<Type> >
98 Foam::tetPolyPatchInterpolation::pointToPointInterpolate
100     const Field<Type>& ff
101 ) const
103     if (ff.size() != patch_.patch().nPoints())
104     {
105         FatalErrorIn
106         (
107             "tmp<Foam::Field<Type> >\n"
108             "tetPolyPatchInterpolation::pointToPointInterpolate\n"
109             "(\n"
110             "    const Field<Type>& ff\n"
111             ") const"
112         )  << "Field size: " << ff.size()
113            << " does not match number of points: "
114            << patch_.patch().nPoints()
115            << abort(FatalError);
116     }
118     tmp<Field<Type> > tresult
119     (
120         new Field<Type>(patch_.size())
121     );
122     Field<Type>& result = tresult();
124     // Insert the point values first; no interpolation necessary
125     label i = 0;
127     forAll (ff, pointI)
128     {
129         result[i] = ff[pointI];
130         i++;
131     }
133     // Insert the face centre values
134     const Field<Type> faceRes = interpolator_.pointToFaceInterpolate(ff);
136     forAll (faceRes, faceI)
137     {
138         result[i] = faceRes[faceI];
139         i++;
140     }
142     return tresult;
146 template<class Type>
147 Foam::tmp<Foam::Field<Type> >
148 Foam::tetPolyPatchInterpolation::pointToPointInterpolate
150     const tmp<Field<Type> >& tff
151 ) const
153     tmp<Field<Type> > tint = this->pointToPointInterpolate(tff());
154     tff.clear();
155     return tint;
159 // ************************************************************************* //