Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026 #include "multivariateSelectionScheme.H"
00027 #include <finiteVolume/limitedSurfaceInterpolationScheme.H>
00028 #include <finiteVolume/volFields.H>
00029 #include <finiteVolume/surfaceFields.H>
00030 #include <finiteVolume/upwind.H>
00031
00032
00033
00034 namespace Foam
00035 {
00036
00037
00038
00039 template<class Type>
00040 multivariateSelectionScheme<Type>::multivariateSelectionScheme
00041 (
00042 const fvMesh& mesh,
00043 const typename multivariateSurfaceInterpolationScheme<Type>::
00044 fieldTable& fields,
00045 const surfaceScalarField& faceFlux,
00046 Istream& schemeData
00047 )
00048 :
00049 multivariateSurfaceInterpolationScheme<Type>
00050 (
00051 mesh,
00052 fields,
00053 faceFlux,
00054 schemeData
00055 ),
00056 schemes_(schemeData),
00057 faceFlux_(faceFlux),
00058 weights_
00059 (
00060 IOobject
00061 (
00062 "multivariateWeights",
00063 mesh.time().timeName(),
00064 mesh
00065 ),
00066 mesh,
00067 dimless
00068 )
00069 {
00070 typename multivariateSurfaceInterpolationScheme<Type>::
00071 fieldTable::const_iterator iter = this->fields().begin();
00072
00073 surfaceScalarField limiter =
00074 (
00075 limitedSurfaceInterpolationScheme<Type>::New
00076 (
00077 mesh,
00078 faceFlux_,
00079 schemes_.lookup(iter()->name())
00080 )().limiter(*iter())
00081 );
00082
00083 for (++iter; iter != this->fields().end(); ++iter)
00084 {
00085 limiter = min
00086 (
00087 limiter,
00088 limitedSurfaceInterpolationScheme<Type>::New
00089 (
00090 mesh,
00091 faceFlux_,
00092 schemes_.lookup(iter()->name())
00093 )().limiter(*iter())
00094 );
00095 }
00096
00097 weights_ =
00098 limiter*mesh.surfaceInterpolation::weights()
00099 + (scalar(1) - limiter)*upwind<Type>(mesh, faceFlux_).weights();
00100 }
00101
00102
00103
00104
00105 }
00106
00107