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

multivariateScheme.C

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 \*---------------------------------------------------------------------------*/
00025 
00026 #include <finiteVolume/volFields.H>
00027 #include <finiteVolume/surfaceFields.H>
00028 #include <finiteVolume/upwind.H>
00029 
00030 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
00031 
00032 namespace Foam
00033 {
00034 
00035 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
00036 
00037 template<class Type, class Scheme>
00038 multivariateScheme<Type, Scheme>::multivariateScheme
00039 (
00040     const fvMesh& mesh,
00041     const typename multivariateSurfaceInterpolationScheme<Type>::
00042         fieldTable& fields,
00043     const surfaceScalarField& faceFlux,
00044     Istream& schemeData
00045 )
00046 :
00047     multivariateSurfaceInterpolationScheme<Type>
00048     (
00049         mesh,
00050         fields,
00051         faceFlux,
00052         schemeData
00053     ),
00054     Scheme::LimiterType(schemeData),
00055     faceFlux_(faceFlux),
00056     weights_
00057     (
00058         IOobject
00059         (
00060             "multivariateWeights",
00061             mesh.time().timeName(),
00062             mesh
00063         ),
00064         mesh,
00065         dimless
00066     )
00067 {
00068     typename multivariateSurfaceInterpolationScheme<Type>::
00069         fieldTable::const_iterator iter = this->fields().begin();
00070 
00071     surfaceScalarField limiter = 
00072         Scheme(mesh, faceFlux_, *this).limiter(*iter());
00073 
00074     for (++iter; iter != this->fields().end(); ++iter)
00075     {
00076         limiter = min
00077         (
00078             limiter,
00079             Scheme(mesh, faceFlux_, *this).limiter(*iter())
00080         );
00081     }
00082 
00083     weights_ = 
00084         limiter*mesh.surfaceInterpolation::weights()
00085       + (scalar(1) - limiter)*upwind<Type>(mesh, faceFlux_).weights();
00086 }
00087 
00088 
00089 // * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //
00090 
00091 } // End namespace Foam
00092 
00093 // ************************ vim: set sw=4 sts=4 et: ************************ //
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines