tmp<GeometricField<Type, fvsPatchField, surfaceMesh> > snGradScheme<Type>::snGrad ( const GeometricField<Type, fvPatchField, volMesh>& vf, const tmp<surfaceScalarField>& tdeltaCoeffs, const word& snGradName ) { const fvMesh& mesh = vf.mesh(); // construct GeometricField<Type, fvsPatchField, surfaceMesh> tmp<GeometricField<Type, fvsPatchField, surfaceMesh> > tssf ( new GeometricField<Type, fvsPatchField, surfaceMesh> ( IOobject ( snGradName + "("+vf.name()+')', vf.instance(), vf.mesh(), IOobject::NO_READ, IOobject::NO_WRITE ), mesh, vf.dimensions()*tdeltaCoeffs().dimensions() ) ); GeometricField<Type, fvsPatchField, surfaceMesh>& ssf = tssf(); // set reference to difference factors array const scalarField& deltaCoeffs = tdeltaCoeffs().internalField(); // owner/neighbour addressing const unallocLabelList& owner = mesh.owner(); const unallocLabelList& neighbour = mesh.neighbour(); forAll(owner, faceI) { ssf[faceI] = deltaCoeffs[faceI]*(vf[neighbour[faceI]] - vf[owner[faceI]]); }
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; }