initial commit for version 1.5.x patch release
[OpenFOAM-1.5.x.git] / src / finiteVolume / finiteVolume / fvc / fvcReconstruct.C
blob38662f47042900a4e256cb639bb595bfd0925fcb
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright (C) 1991-2008 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 "fvcReconstruct.H"
28 #include "fvMesh.H"
29 #include "zeroGradientFvPatchFields.H"
31 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
33 namespace Foam
36 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
38 namespace fvc
41 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
43 template<class Type>
44 tmp
46     GeometricField
47     <
48         typename outerProduct<vector,Type>::type, fvPatchField, volMesh
49     >
51 reconstruct
53     const GeometricField<Type, fvsPatchField, surfaceMesh>& ssf
56     typedef typename outerProduct<vector, Type>::type GradType;
58     const fvMesh& mesh = ssf.mesh();
60     tmp<GeometricField<GradType, fvPatchField, volMesh> > treconField
61     (
62         new GeometricField<GradType, fvPatchField, volMesh>
63         (
64             IOobject
65             (
66                 "volIntegrate("+ssf.name()+')',
67                 ssf.instance(),
68                 mesh,
69                 IOobject::NO_READ,
70                 IOobject::NO_WRITE
71             ),
72             inv(surfaceSum(sqr(mesh.Sf())/mesh.magSf()))
73           & surfaceSum((mesh.Sf()/mesh.magSf())*ssf),
74             zeroGradientFvPatchField<GradType>::typeName
75         )
76     );
78     treconField().correctBoundaryConditions();
80     return treconField;
84 template<class Type>
85 tmp
87     GeometricField
88     <
89         typename outerProduct<vector, Type>::type, fvPatchField, volMesh
90     >
92 reconstruct
94     const tmp<GeometricField<Type, fvsPatchField, surfaceMesh> >& tssf
97     typedef typename outerProduct<vector, Type>::type GradType;
98     tmp<GeometricField<GradType, fvPatchField, volMesh> > tvf
99     (
100         fvc::reconstruct(tssf())
101     );
102     tssf.clear();
103     return tvf;
107 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
109 } // End namespace fvc
111 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
113 } // End namespace Foam
115 // ************************************************************************* //