tmp<GeometricField<Type, fvPatchField, volMesh> > average ( const GeometricField<Type, fvsPatchField, surfaceMesh>& ssf ) { const fvMesh& mesh = ssf.mesh(); tmp<GeometricField<Type, fvPatchField, volMesh> > taverage ( new GeometricField<Type, fvPatchField, volMesh> ( IOobject ( "average("+ssf.name()+')', ssf.instance(), mesh, IOobject::NO_READ, IOobject::NO_WRITE ), mesh, ssf.dimensions() ) ); GeometricField<Type, fvPatchField, volMesh>& av = taverage(); av.internalField() = ( surfaceSum(mesh.magSf()*ssf)/surfaceSum(mesh.magSf()) )().internalField(); typename GeometricField<Type, fvPatchField, volMesh>:: GeometricBoundaryField& bav = av.boundaryField(); forAll(bav, patchi) { bav[patchi] = ssf.boundaryField()[patchi]; } av.correctBoundaryConditions(); return taverage; }
tmp < GeometricField < typename outerProduct<vector,Type>::type, fvPatchField, volMesh > > reconstruct ( const GeometricField<Type, fvsPatchField, surfaceMesh>& ssf ) { typedef typename outerProduct<vector, Type>::type GradType; const fvMesh& mesh = ssf.mesh(); tmp<GeometricField<GradType, fvPatchField, volMesh> > treconField ( new GeometricField<GradType, fvPatchField, volMesh> ( IOobject ( "volIntegrate("+ssf.name()+')', ssf.instance(), mesh, IOobject::NO_READ, IOobject::NO_WRITE ), inv(surfaceSum(sqr(mesh.Sf())/mesh.magSf())) & surfaceSum((mesh.Sf()/mesh.magSf())*ssf), zeroGradientFvPatchField<GradType>::typeName ) ); treconField().correctBoundaryConditions(); return treconField; }