tmp<volScalarField> magSqrGradGrad ( const GeometricField<Type, fvPatchField, volMesh>& vf ) { tmp<volScalarField> tMagSqrGradGrad ( magSqr(fvc::grad(fvc::grad(vf.component(0)))) ); // Loop over other vector field components for (direction cmpt = 1; cmpt < pTraits<Type>::nComponents; cmpt++) { tMagSqrGradGrad() += magSqr(fvc::grad(fvc::grad(vf.component(cmpt))))(); } return tMagSqrGradGrad; }
tmp<GeometricField<Type, fvsPatchField, surfaceMesh> > correctedSnGrad<Type>::correction ( const GeometricField<Type, fvPatchField, volMesh>& vf ) const { const fvMesh& mesh = this->mesh(); // construct GeometricField<Type, fvsPatchField, surfaceMesh> tmp<GeometricField<Type, fvsPatchField, surfaceMesh> > tssf ( new GeometricField<Type, fvsPatchField, surfaceMesh> ( IOobject ( "snGradCorr("+vf.name()+')', vf.instance(), mesh, IOobject::NO_READ, IOobject::NO_WRITE ), mesh, vf.dimensions()*mesh.deltaCoeffs().dimensions() ) ); GeometricField<Type, fvsPatchField, surfaceMesh>& ssf = tssf(); for (direction cmpt = 0; cmpt < pTraits<Type>::nComponents; cmpt++) { ssf.replace ( cmpt, mesh.correctionVectors() & linear < typename outerProduct<vector, typename pTraits<Type>::cmptType>::type >(mesh).interpolate ( gradScheme<typename pTraits<Type>::cmptType>::New ( mesh, mesh.schemesDict().gradScheme(ssf.name()) )() //gaussGrad<typename pTraits<Type>::cmptType>(mesh) .grad(vf.component(cmpt)) ) ); } return tssf; }
tmp<GeometricField<Type, faePatchField, edgeMesh> > correctedLnGrad<Type>::correction ( const GeometricField<Type, faPatchField, areaMesh>& vf ) const { const faMesh& mesh = this->mesh(); // construct GeometricField<Type, faePatchField, edgeMesh> tmp<GeometricField<Type, faePatchField, edgeMesh> > tssf ( new GeometricField<Type, faePatchField, edgeMesh> ( IOobject ( "lnGradCorr("+vf.name()+')', vf.instance(), vf.db() ), mesh, vf.dimensions()*mesh.deltaCoeffs().dimensions() ) ); GeometricField<Type, faePatchField, edgeMesh>& ssf = tssf(); for (direction cmpt = 0; cmpt < pTraits<Type>::nComponents; cmpt++) { ssf.replace ( cmpt, mesh.correctionVectors() & linearEdgeInterpolation < typename outerProduct<vector, typename pTraits<Type>::cmptType>::type >(mesh).interpolate ( gradScheme<typename pTraits<Type>::cmptType>::New ( mesh, mesh.gradScheme(ssf.name()) )() // gaussGrad<typename pTraits<Type>::cmptType>(mesh) .grad(vf.component(cmpt)) ) ); } return tssf; }
Foam::tmp<Foam::GeometricField<Type, Foam::fvsPatchField, Foam::surfaceMesh>> Foam::fv::correctedSnGrad<Type>::correction ( const GeometricField<Type, fvPatchField, volMesh>& vf ) const { const fvMesh& mesh = this->mesh(); // construct GeometricField<Type, fvsPatchField, surfaceMesh> tmp<GeometricField<Type, fvsPatchField, surfaceMesh>> tssf ( new GeometricField<Type, fvsPatchField, surfaceMesh> ( IOobject ( "snGradCorr("+vf.name()+')', vf.instance(), mesh, IOobject::NO_READ, IOobject::NO_WRITE ), mesh, vf.dimensions()*mesh.nonOrthDeltaCoeffs().dimensions() ) ); GeometricField<Type, fvsPatchField, surfaceMesh>& ssf = tssf.ref(); for (direction cmpt = 0; cmpt < pTraits<Type>::nComponents; cmpt++) { ssf.replace ( cmpt, correctedSnGrad<typename pTraits<Type>::cmptType>(mesh) .fullGradCorrection(vf.component(cmpt)) ); } return tssf; }