initial commit for version 1.6.x patch release
[OpenFOAM-1.6.x.git] / src / finiteVolume / interpolation / surfaceInterpolation / schemes / localMax / localMax.H
blob3fe3f21001a11999df814de5c08ed892868a6822
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::localMax
28 Description
29     LocalMax-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     localMax.C
37 \*---------------------------------------------------------------------------*/
39 #ifndef localMax_H
40 #define localMax_H
42 #include "surfaceInterpolationScheme.H"
43 #include "volFields.H"
44 #include "surfaceFields.H"
46 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
48 namespace Foam
51 /*---------------------------------------------------------------------------*\
52                            Class localMax Declaration
53 \*---------------------------------------------------------------------------*/
55 template<class Type>
56 class localMax
58     public surfaceInterpolationScheme<Type>
60     // Private Member Functions
62         //- Disallow default bitwise assignment
63         void operator=(const localMax&);
66 public:
68     //- Runtime type information
69     TypeName("localMax");
72     // Constructors
74         //- Construct from mesh
75         localMax(const fvMesh& mesh)
76         :
77             surfaceInterpolationScheme<Type>(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         localMax
84         (
85             const fvMesh& mesh,
86             Istream& is
87         )
88         :
89             surfaceInterpolationScheme<Type>(mesh)
90         {}
92         //- Construct from faceFlux and Istream
93         localMax
94         (
95             const fvMesh& mesh,
96             const surfaceScalarField& faceFlux,
97             Istream& is
98         )
99         :
100             surfaceInterpolationScheme<Type>(mesh)
101         {}
104     // Member Functions
106         //- Return the interpolation weighting factors
107         virtual tmp<surfaceScalarField> weights
108         (
109             const GeometricField<Type, fvPatchField, volMesh>&
110         ) const
111         {
112             notImplemented
113             (
114                 "localMax::weights"
115                 "(const GeometricField<Type, fvPatchField, volMesh>&)"
116             );
118             return tmp<surfaceScalarField>(NULL);
119         }
121         //- Return the face-interpolate of the given cell field
122         virtual tmp<GeometricField<Type, fvsPatchField, surfaceMesh> >
123         interpolate
124         (
125             const GeometricField<Type, fvPatchField, volMesh>& vf
126         ) const
127         {
128             const fvMesh& mesh = vf.mesh();
130             tmp<GeometricField<Type, fvsPatchField, surfaceMesh> > tvff
131             (
132                 new GeometricField<Type, fvsPatchField, surfaceMesh>
133                 (
134                     IOobject
135                     (
136                         vf.name(),
137                         mesh.time().timeName(),
138                         mesh
139                     ),
140                     mesh,
141                     vf.dimensions()
142                 )
143             );
144             GeometricField<Type, fvsPatchField, surfaceMesh>& vff = tvff();
146             forAll(vff.boundaryField(), patchi)
147             {
148                 vff.boundaryField()[patchi] = vf.boundaryField()[patchi];
149             }
151             const unallocLabelList& own = mesh.owner();
152             const unallocLabelList& nei = mesh.neighbour();
154             forAll(vff, facei)
155             {
156                 vff[facei] = max(vf[own[facei]], vf[nei[facei]]);
157             }
159             return tvff;
160         }
164 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
166 } // End namespace Foam
168 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
170 #endif
172 // ************************************************************************* //