OpenFOAM logo
Open Source CFD Toolkit

QUICK.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     QUICKLimiter
00027 
00028 Description
00029     Class with limiter function which returns the limiter for the
00030     quadratic-upwind differencing scheme.  Note that the weighting factors are
00031     not bounded between upwind and central-differencing, some downwind
00032     contribution is possible although the interpolate is limited to be between
00033     the upwind and downwind cell values.
00034 
00035     Used in conjunction with the template class LimitedScheme.
00036 
00037 SourceFiles
00038     QUICK.C
00039 
00040 \*---------------------------------------------------------------------------*/
00041 
00042 #ifndef QUICK_H
00043 #define QUICK_H
00044 
00045 #include "vector.H"
00046 
00047 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
00048 
00049 namespace Foam
00050 {
00051 
00052 /*---------------------------------------------------------------------------*\
00053                            Class QUICKWeight Declaration
00054 \*---------------------------------------------------------------------------*/
00055 
00056 template<class LimiterFunc>
00057 class QUICKLimiter
00058 :
00059     public LimiterFunc
00060 {
00061 
00062 public:
00063 
00064     QUICKLimiter(Istream&)
00065     {}
00066 
00067     scalar limiter
00068     (
00069         const scalar cdWeight,
00070         const scalar faceFlux,
00071         const typename LimiterFunc::phiType& phiP,
00072         const typename LimiterFunc::phiType& phiN,
00073         const typename LimiterFunc::gradPhiType& gradcP,
00074         const typename LimiterFunc::gradPhiType& gradcN,
00075         const vector& d
00076     ) const
00077     {
00078         scalar phif = 0.5*(cdWeight*phiP + (1 - cdWeight)*phiN);
00079         scalar phiU;
00080 
00081         if (faceFlux > 0)
00082         {
00083             phif += 0.5*(phiP + (1 - cdWeight)*(d & gradcP));
00084             phiU = phiP;
00085         }
00086         else
00087         {
00088             phif += 0.5*(phiN - cdWeight*(d & gradcN));
00089             phiU = phiN;
00090         }
00091 
00092         scalar phiCD = cdWeight*phiP + (1 - cdWeight)*phiN;
00093 
00094         // Calculate the effective limiter for the linearUpwind interpolation
00095         scalar QLimiter = (phif - phiU)/stabilise(phiCD - phiU, SMALL);
00096 
00097         // Limit the limiter between upwind and downwind
00098         return max(min(QLimiter, 2), 0);
00099     }
00100 };
00101 
00102 
00103 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
00104 
00105 } // End namespace Foam
00106 
00107 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
00108 
00109 #endif
00110 
00111 // ************************************************************************* //
For further information go to www.openfoam.org