BUG: UListIO: byteSize overflowing on really big faceLists
[OpenFOAM-2.0.x.git] / src / finiteVolume / interpolation / surfaceInterpolation / limitedSchemes / upwind / upwind.H
blobd3fbdb7cb4b5f97c73cea7680bdc1191e4bbc189
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright (C) 2011 OpenFOAM Foundation
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
13     the Free Software Foundation, either version 3 of the License, or
14     (at your 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, see <http://www.gnu.org/licenses/>.
24 Class
25     Foam::upwind
27 Description
28     Upwind differencing scheme class.
30 SourceFiles
31     upwind.C
33 \*---------------------------------------------------------------------------*/
35 #ifndef upwind_H
36 #define upwind_H
38 #include "limitedSurfaceInterpolationScheme.H"
39 #include "volFields.H"
40 #include "surfaceFields.H"
42 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
44 namespace Foam
47 /*---------------------------------------------------------------------------*\
48                            Class upwind Declaration
49 \*---------------------------------------------------------------------------*/
51 template<class Type>
52 class upwind
54     public limitedSurfaceInterpolationScheme<Type>
56     // Private Member Functions
58         //- Disallow default bitwise assignment
59         void operator=(const upwind&);
62 public:
64     //- Runtime type information
65     TypeName("upwind");
68     // Constructors
70         //- Construct from faceFlux
71         upwind
72         (
73             const fvMesh& mesh,
74             const surfaceScalarField& faceFlux
75         )
76         :
77             limitedSurfaceInterpolationScheme<Type>(mesh, faceFlux)
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         upwind
84         (
85             const fvMesh& mesh,
86             Istream& is
87         )
88         :
89             limitedSurfaceInterpolationScheme<Type>(mesh, is)
90         {}
92         //- Construct from faceFlux and Istream
93         upwind
94         (
95             const fvMesh& mesh,
96             const surfaceScalarField& faceFlux,
97             Istream&
98         )
99         :
100             limitedSurfaceInterpolationScheme<Type>(mesh, faceFlux)
101         {}
104     // Member Functions
106         //- Return the interpolation limiter
107         virtual tmp<surfaceScalarField> limiter
108         (
109             const GeometricField<Type, fvPatchField, volMesh>&
110         ) const
111         {
112             return tmp<surfaceScalarField>
113             (
114                 new surfaceScalarField
115                 (
116                     IOobject
117                     (
118                         "upwindLimiter",
119                         this->mesh().time().timeName(),
120                         this->mesh()
121                     ),
122                     this->mesh(),
123                     dimensionedScalar("upwindLimiter", dimless, 0.0)
124                 )
125             );
126         }
128         //- Return the interpolation weighting factors
129         tmp<surfaceScalarField> weights() const
130         {
131             return pos(this->faceFlux_);
132         }
134         //- Return the interpolation weighting factors
135         virtual tmp<surfaceScalarField> weights
136         (
137             const GeometricField<Type, fvPatchField, volMesh>&
138         ) const
139         {
140             return weights();
141         }
145 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
147 } // End namespace Foam
149 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
151 #endif
153 // ************************************************************************* //