![]() |
|
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 // ************************************************************************* //