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 
00027 
00028 
00029 #include "correctedSnGrad.H"
00030 #include <finiteVolume/volFields.H>
00031 #include <finiteVolume/surfaceFields.H>
00032 #include <finiteVolume/linear.H>
00033 #include <finiteVolume/fvcGrad.H>
00034 #include <finiteVolume/gaussGrad.H>
00035 
00036 
00037 
00038 namespace Foam
00039 {
00040 
00041 
00042 
00043 namespace fv
00044 {
00045 
00046 
00047 
00048 template<class Type>
00049 correctedSnGrad<Type>::~correctedSnGrad()
00050 {}
00051 
00052 
00053 
00054 
00055 template<class Type>
00056 tmp<GeometricField<Type, fvsPatchField, surfaceMesh> >
00057 correctedSnGrad<Type>::correction
00058 (
00059     const GeometricField<Type, fvPatchField, volMesh>& vf
00060 ) const
00061 {
00062     const fvMesh& mesh = this->mesh();
00063 
00064     
00065     tmp<GeometricField<Type, fvsPatchField, surfaceMesh> > tssf
00066     (
00067         new GeometricField<Type, fvsPatchField, surfaceMesh>
00068         (
00069             IOobject
00070             (
00071                 "snGradCorr("+vf.name()+')',
00072                 vf.instance(),
00073                 mesh,
00074                 IOobject::NO_READ,
00075                 IOobject::NO_WRITE
00076             ),
00077             mesh,
00078             vf.dimensions()*mesh.deltaCoeffs().dimensions()
00079         )
00080     );
00081     GeometricField<Type, fvsPatchField, surfaceMesh>& ssf = tssf();
00082 
00083     for (direction cmpt = 0; cmpt < pTraits<Type>::nComponents; cmpt++)
00084     {
00085         ssf.replace
00086         (
00087             cmpt,
00088             mesh.correctionVectors()
00089           & linear
00090             <
00091                 typename
00092                 outerProduct<vector, typename pTraits<Type>::cmptType>::type
00093             >(mesh).interpolate
00094             (
00095                 gradScheme<typename pTraits<Type>::cmptType>::New
00096                 (
00097                     mesh,
00098                     mesh.gradScheme(ssf.name())
00099                 )()
00100                 
00101                .grad(vf.component(cmpt))
00102             )
00103         );
00104     }
00105 
00106     return tssf;
00107 }
00108 
00109 
00110 
00111 
00112 } 
00113 
00114 
00115 
00116 } 
00117 
00118