FreeFOAM The Cross-Platform CFD Toolkit
Hosted by SourceForge:
Get FreeFOAM at SourceForge.net.
            Fast, secure and Free Open Source software downloads

filteredLinear.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-2010 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
00013     the Free Software Foundation, either version 3 of the License, or
00014     (at your 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, see <http://www.gnu.org/licenses/>.
00023 
00024 Class
00025     Foam::filteredLinearLimiter
00026 
00027 Description
00028     Class to generate weighting factors for the filteredLinear
00029     differencing scheme.
00030 
00031     The aim is to remove high-frequency modes with "staggering"
00032     characteristics by comparing the face gradient relative to the
00033     background distribution represented by the neighbouring cell gradients
00034     with those gradients and introduce small amounts of upwind in order to
00035     damp these modes.
00036 
00037     Used in conjunction with the template class LimitedScheme.
00038 
00039 SourceFiles
00040     filteredLinear.C
00041 
00042 \*---------------------------------------------------------------------------*/
00043 
00044 #ifndef filteredLinear_H
00045 #define filteredLinear_H
00046 
00047 #include <OpenFOAM/vector.H>
00048 
00049 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
00050 
00051 namespace Foam
00052 {
00053 
00054 /*---------------------------------------------------------------------------*\
00055                            Class filteredLinearWeight Declaration
00056 \*---------------------------------------------------------------------------*/
00057 
00058 template<class LimiterFunc>
00059 class filteredLinearLimiter
00060 :
00061     public LimiterFunc
00062 {
00063 
00064 public:
00065 
00066     filteredLinearLimiter(Istream&)
00067     {}
00068 
00069     scalar limiter
00070     (
00071         const scalar cdWeight,
00072         const scalar faceFlux,
00073         const typename LimiterFunc::phiType& phiP,
00074         const typename LimiterFunc::phiType& phiN,
00075         const typename LimiterFunc::gradPhiType& gradcP,
00076         const typename LimiterFunc::gradPhiType& gradcN,
00077         const vector& d
00078     ) const
00079     {
00080         scalar df = phiN - phiP;
00081 
00082         scalar dcP = d & gradcP;
00083         scalar dcN = d & gradcN;
00084 
00085         scalar limiter =
00086             2
00087           - 0.5*min(mag(df - dcP), mag(df - dcN))
00088            /(max(mag(dcP), mag(dcN)) + SMALL);
00089 
00090         // Limit the limiter between linear and 20% upwind
00091         return max(min(limiter, 1), 0.8);
00092     }
00093 };
00094 
00095 
00096 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
00097 
00098 } // End namespace Foam
00099 
00100 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
00101 
00102 #endif
00103 
00104 // ************************ vim: set sw=4 sts=4 et: ************************ //
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines