initial commit for version 1.6.x patch release
[OpenFOAM-1.6.x.git] / src / finiteVolume / interpolation / surfaceInterpolation / limitedSchemes / Limited / Limited.H
blobba6bdb8ed959f7c41a7c1f42cd77a7c23d132315
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::LimitedLimiter
28 Description
29     Foam::LimitedLimiter
31 \*---------------------------------------------------------------------------*/
33 #ifndef Limited_H
34 #define Limited_H
36 #include "vector.H"
38 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
40 namespace Foam
43 /*---------------------------------------------------------------------------*\
44                        Class LimitedLimiter Declaration
45 \*---------------------------------------------------------------------------*/
47 template<class LimitedScheme>
48 class LimitedLimiter
50     public LimitedScheme
52     //- Lower and upper bound of the variable
53     scalar lowerBound_, upperBound_;
55     void checkParameters(Istream& is)
56     {
57         if (lowerBound_ > upperBound_)
58         {
59             FatalIOErrorIn("checkParameters()", is)
60                 << "Invalid bounds.  Lower = " << lowerBound_
61                 << "  Upper = " << upperBound_
62                 << ".  Lower bound is higher than the upper bound."
63                 << exit(FatalIOError);
64         }
65     }
68 public:
70     LimitedLimiter
71     (
72         const scalar lowerBound,
73         const scalar upperBound,
74         Istream& is
75     )
76     :
77         LimitedScheme(is),
78         lowerBound_(lowerBound),
79         upperBound_(upperBound)
80     {
81         checkParameters(is);
82     }
84     LimitedLimiter(Istream& is)
85     :
86         LimitedScheme(is),
87         lowerBound_(readScalar(is)),
88         upperBound_(readScalar(is))
89     {
90         checkParameters(is);
91     }
94     scalar limiter
95     (
96         const scalar cdWeight,
97         const scalar faceFlux,
98         const scalar phiP,
99         const scalar phiN,
100         const vector& gradcP,
101         const vector& gradcN,
102         const vector& d
103     ) const
104     {
105         // If not between the lower and upper bounds use upwind
106         if
107         (
108             (faceFlux > 0 && (phiP < lowerBound_ || phiN > upperBound_))
109          || (faceFlux < 0 && (phiN < lowerBound_ || phiP > upperBound_))
110          /*
111             phiP < lowerBound_
112          || phiP > upperBound_
113          || phiN < lowerBound_
114          || phiN > upperBound_
115          */
116         )
117         {
118             return 0;
119         }
120         else
121         {
122             return LimitedScheme::limiter
123             (
124                 cdWeight,
125                 faceFlux,
126                 phiP,
127                 phiN,
128                 gradcP,
129                 gradcN,
130                 d
131             );
132         }
133     }
137 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
139 } // End namespace Foam
141 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
143 #endif
145 // ************************************************************************* //