OpenFOAM logo
Open Source CFD Toolkit

Gamma.H

Go to the documentation of this file.
00001 /*---------------------------------------------------------------------------*\
00002   =========                 |
00003   \\      /  F ield         | OpenFOAM: The Open Source CFD Toolbox
00004    \\    /   O peration     |
00005     \\  /    A nd           | Copyright (C) 1991-2005 OpenCFD Ltd.
00006      \\/     M anipulation  |
00007 -------------------------------------------------------------------------------
00008 License
00009     This file is part of OpenFOAM.
00010 
00011     OpenFOAM is free software; you can redistribute it and/or modify it
00012     under the terms of the GNU General Public License as published by the
00013     Free Software Foundation; either version 2 of the License, or (at your
00014     option) any later version.
00015 
00016     OpenFOAM is distributed in the hope that it will be useful, but WITHOUT
00017     ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
00018     FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
00019     for more details.
00020 
00021     You should have received a copy of the GNU General Public License
00022     along with OpenFOAM; if not, write to the Free Software Foundation,
00023     Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
00024 
00025 Class
00026     GammaLimiter
00027 
00028 Description
00029     Class with limiter function which returns the limiter for the
00030     Gamma differencing scheme based on phict obtained from the LimiterFunc
00031     class.
00032 
00033     Used in conjunction with the template class LimitedScheme.
00034 
00035 SourceFiles
00036     Gamma.C
00037 
00038 \*---------------------------------------------------------------------------*/
00039 
00040 #ifndef Gamma_H
00041 #define Gamma_H
00042 
00043 #include "vector.H"
00044 
00045 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
00046 
00047 namespace Foam
00048 {
00049 
00050 /*---------------------------------------------------------------------------*\
00051                         Class GammaLimiter Declaration
00052 \*---------------------------------------------------------------------------*/
00053 
00054 template<class LimiterFunc>
00055 class GammaLimiter
00056 :
00057     public LimiterFunc
00058 {
00059     scalar k_;
00060 
00061 public:
00062 
00063     GammaLimiter(Istream& is)
00064     :
00065         k_(readScalar(is))
00066     {
00067         if (k_ < 0 || k_ > 1)
00068         {
00069             FatalIOErrorIn("GammaLimiter(Istream& is)", is)
00070                 << "coefficient = " << k_
00071                 << " should be >= 0 and <= 1"
00072                 << exit(FatalIOError);
00073         }
00074 
00075         // Rescale k_ to be >= 0 and <= 0.5 (TVD conformant)
00076         // and avoid the /0 when k_ = 0
00077         k_ = max(k_/2.0, SMALL);
00078     }
00079 
00080     scalar limiter
00081     (
00082         const scalar cdWeight,
00083         const scalar faceFlux,
00084         const typename LimiterFunc::phiType& phiP,
00085         const typename LimiterFunc::phiType& phiN,
00086         const typename LimiterFunc::gradPhiType& gradcP,
00087         const typename LimiterFunc::gradPhiType& gradcN,
00088         const vector& d
00089     ) const
00090     {
00091         scalar phict = LimiterFunc::phict
00092         (
00093             cdWeight, faceFlux, phiP, phiN, gradcP, gradcN, d
00094         );
00095 
00096         return min(max(phict/k_, 0), 1);
00097     }
00098 };
00099 
00100 
00101 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
00102 
00103 } // End namespace Foam
00104 
00105 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
00106 
00107 #endif
00108 
00109 // ************************************************************************* //
For further information go to www.openfoam.org