initial commit for version 1.6.x patch release
[OpenFOAM-1.6.x.git] / src / finiteVolume / interpolation / surfaceInterpolation / schemes / harmonic / harmonic.H
blob594c3fcd43879371e79aa9d671e4ab7d137a4dee
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 Class
26     Foam::harmonic
28 Description
29     Harmonic-mean differencing scheme class.
31     This scheme interpolates 1/field using a scheme specified at run-time
32     and return the reciprocal of the interpolate.
34 SourceFiles
35     harmonic.C
37 \*---------------------------------------------------------------------------*/
39 #ifndef harmonic_H
40 #define harmonic_H
42 #include "surfaceInterpolationScheme.H"
43 #include "volFields.H"
44 #include "surfaceFields.H"
45 #include "reverseLinear.H"
47 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
49 namespace Foam
52 /*---------------------------------------------------------------------------*\
53                            Class harmonic Declaration
54 \*---------------------------------------------------------------------------*/
56 class harmonic
58     public surfaceInterpolationScheme<scalar>
60     // Private Member Functions
62         //- Disallow default bitwise assignment
63         void operator=(const harmonic&);
66 public:
68     //- Runtime type information
69     TypeName("harmonic");
72     // Constructors
74         //- Construct from mesh
75         harmonic(const fvMesh& mesh)
76         :
77             surfaceInterpolationScheme<scalar>(mesh)
78         {}
80         //- Construct from Istream.
81         //  The name of the flux field is read from the Istream and looked-up
82         //  from the mesh objectRegistry
83         harmonic
84         (
85             const fvMesh& mesh,
86             Istream& is
87         )
88         :
89             surfaceInterpolationScheme<scalar>(mesh)
90         {}
92         //- Construct from faceFlux and Istream
93         harmonic
94         (
95             const fvMesh& mesh,
96             const surfaceScalarField& faceFlux,
97             Istream& is
98         )
99         :
100             surfaceInterpolationScheme<scalar>(mesh)
101         {}
104     // Member Functions
106         //- Return the interpolation weighting factors
107         virtual tmp<surfaceScalarField> weights
108         (
109             const GeometricField<scalar, fvPatchField, volMesh>&
110         ) const
111         {
112             notImplemented
113             (
114                 "harmonic::weights"
115                 "(const GeometricField<scalar, fvPatchField, volMesh>&)"
116             );
118             return tmp<surfaceScalarField>(NULL);
119         }
121         //- Return the face-interpolate of the given cell field
122         virtual tmp<GeometricField<scalar, fvsPatchField, surfaceMesh> >
123         interpolate
124         (
125             const GeometricField<scalar, fvPatchField, volMesh>& vf
126         ) const
127         {
128             return 1.0/(reverseLinear<scalar>(vf.mesh()).interpolate(1.0/vf));
129         }
133 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
135 } // End namespace Foam
137 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
139 #endif
141 // ************************************************************************* //