initial commit for version 1.6.x patch release
[OpenFOAM-1.6.x.git] / src / sampling / sampledSurface / sampledSurface / sampledSurfaceTemplates.C
blob3aff356cef21ce74cc1faf1245baf1d50aa8dd41
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright (C) 1991-2009 OpenCFD Ltd.
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 #include "sampledSurface.H"
29 template<class Type>
30 bool Foam::sampledSurface::checkFieldSize(const Field<Type>& field) const
32     if (faces().empty() || field.empty())
33     {
34         return false;
35     }
37     if (field.size() != faces().size())
38     {
39         FatalErrorIn
40         (
41             "sampledSurface::checkFieldSize(const Field<Type>&) const"
42         )
43             << "size mismatch: "
44             << "field (" << field.size()
45             << ") != surface (" << faces().size() << ")"
46             << exit(FatalError);
47     }
49     return true;
53 template<class Type>
54 Type Foam::sampledSurface::integrate(const Field<Type>& field) const
56     Type value = pTraits<Type>::zero;
58     if (checkFieldSize(field))
59     {
60         value = sum(field * magSf());
61     }
63     reduce(value, sumOp<Type>());
64     return value;
68 template<class Type>
69 Type Foam::sampledSurface::integrate(const tmp<Field<Type> >& field) const
71     Type value = integrate(field());
72     field.clear();
73     return value;
77 template<class Type>
78 Type Foam::sampledSurface::average(const Field<Type>& field) const
80     Type value = pTraits<Type>::zero;
82     if (checkFieldSize(field))
83     {
84         value = sum(field * magSf());
85     }
87     reduce(value, sumOp<Type>());
89     // avoid divide-by-zero
90     if (area())
91     {
92         return value / area();
93     }
94     else
95     {
96         return pTraits<Type>::zero;
97     }
101 template<class Type>
102 Type Foam::sampledSurface::average(const tmp<Field<Type> >& field) const
104     Type value = average(field());
105     field.clear();
106     return value;
110 template<class ReturnType, class Type>
111 void Foam::sampledSurface::project
113     Field<ReturnType>& res,
114     const Field<Type>& field
115 ) const
117     if (checkFieldSize(field))
118     {
119         const vectorField& norm = Sf();
121         forAll(norm, faceI)
122         {
123             res[faceI] = field[faceI] & (norm[faceI] / mag(norm[faceI]));
124         }
125     }
126     else
127     {
128         res.clear();
129     }
133 template<class ReturnType, class Type>
134 void Foam::sampledSurface::project
136     Field<ReturnType>& res,
137     const tmp<Field<Type> >& field
138 ) const
140     project(res, field());
141     field.clear();
145 template<class ReturnType, class Type>
146 Foam::tmp<Foam::Field<ReturnType> >
147 Foam::sampledSurface::project
149     const tmp<Field<Type> >& field
150 ) const
152     tmp<Field<ReturnType> > tRes(new Field<ReturnType>(faces().size()));
153     project(tRes(), field);
154     return tRes;
158 // ************************************************************************* //