OpenFOAM logo
Open Source CFD Toolkit

linearUpwind.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     linearUpwind
00027 
00028 Description
00029     Class with operator() which returns the weighting factors for the
00030     linear-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 NVDscheme although this scheme
00036     is not NVD.
00037 
00038 SourceFiles
00039     linearUpwindMake.C
00040 
00041 \*---------------------------------------------------------------------------*/
00042 
00043 #ifndef linearUpwind_H
00044 #define linearUpwind_H
00045 
00046 #include "scalar.H"
00047 #include "vector.H"
00048 
00049 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
00050 
00051 namespace Foam
00052 {
00053 
00054 /*---------------------------------------------------------------------------*\
00055                            Class linearUpwindWeight Declaration
00056 \*---------------------------------------------------------------------------*/
00057 
00058 class linearUpwindWeight
00059 {
00060 
00061 public:
00062 
00063     linearUpwindWeight(Istream&)
00064     {}
00065 
00066     scalar weight
00067     (
00068         scalar cdWeight,
00069         scalar faceFlux,
00070         scalar phiP,
00071         scalar phiN,
00072         const vector& gradcP,
00073         const vector& gradcN,
00074         const vector& d
00075     ) const
00076     {
00077         scalar phif;
00078         if (faceFlux > 0)
00079         {
00080             phif = phiP + (1 - cdWeight)*(d & gradcP);
00081         }
00082         else
00083         {
00084             phif = phiN - cdWeight*(d & gradcN);
00085         }
00086 
00087         // Limit the estimated face value between the upwind and downwind cell
00088         // values
00089         phif = min(phif, max(phiN, phiP));
00090         phif = max(phif, min(phiN, phiP));
00091 
00092         return (phif - phiN)/stabilise(phiP - phiN, SMALL);
00093     }
00094 };
00095 
00096 
00097 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
00098 
00099 } // End namespace Foam
00100 
00101 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
00102 
00103 #endif
00104 
00105 // ************************************************************************* //
For further information go to www.openfoam.org