Initial commit for version 2.0.x patch release
[OpenFOAM-2.0.x.git] / src / finiteVolume / interpolation / surfaceInterpolation / limitedSchemes / Limited / Limited.H
blob7d24691aa6bc2367a608f1bed0a3db5615cd5142
1 /*---------------------------------------------------------------------------*\
2   =========                 |
3   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
4    \\    /   O peration     |
5     \\  /    A nd           | Copyright (C) 2004-2010 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
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::LimitedLimiter
27 Description
28     Foam::LimitedLimiter
30 \*---------------------------------------------------------------------------*/
32 #ifndef Limited_H
33 #define Limited_H
35 #include "vector.H"
37 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
39 namespace Foam
42 /*---------------------------------------------------------------------------*\
43                        Class LimitedLimiter Declaration
44 \*---------------------------------------------------------------------------*/
46 template<class LimitedScheme>
47 class LimitedLimiter
49     public LimitedScheme
51     //- Lower and upper bound of the variable
52     scalar lowerBound_, upperBound_;
54     void checkParameters(Istream& is)
55     {
56         if (lowerBound_ > upperBound_)
57         {
58             FatalIOErrorIn("checkParameters()", is)
59                 << "Invalid bounds.  Lower = " << lowerBound_
60                 << "  Upper = " << upperBound_
61                 << ".  Lower bound is higher than the upper bound."
62                 << exit(FatalIOError);
63         }
64     }
67 public:
69     LimitedLimiter
70     (
71         const scalar lowerBound,
72         const scalar upperBound,
73         Istream& is
74     )
75     :
76         LimitedScheme(is),
77         lowerBound_(lowerBound),
78         upperBound_(upperBound)
79     {
80         checkParameters(is);
81     }
83     LimitedLimiter(Istream& is)
84     :
85         LimitedScheme(is),
86         lowerBound_(readScalar(is)),
87         upperBound_(readScalar(is))
88     {
89         checkParameters(is);
90     }
93     scalar limiter
94     (
95         const scalar cdWeight,
96         const scalar faceFlux,
97         const scalar phiP,
98         const scalar phiN,
99         const vector& gradcP,
100         const vector& gradcN,
101         const vector& d
102     ) const
103     {
104         // If not between the lower and upper bounds use upwind
105         if
106         (
107             (faceFlux > 0 && (phiP < lowerBound_ || phiN > upperBound_))
108          || (faceFlux < 0 && (phiN < lowerBound_ || phiP > upperBound_))
109          /*
110             phiP < lowerBound_
111          || phiP > upperBound_
112          || phiN < lowerBound_
113          || phiN > upperBound_
114          */
115         )
116         {
117             return 0;
118         }
119         else
120         {
121             return LimitedScheme::limiter
122             (
123                 cdWeight,
124                 faceFlux,
125                 phiP,
126                 phiN,
127                 gradcP,
128                 gradcN,
129                 d
130             );
131         }
132     }
136 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
138 } // End namespace Foam
140 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
142 #endif
144 // ************************************************************************* //