Type Foam::sampledSurface::average(const Field<Type>& field) const { Type value = pTraits<Type>::zero; if (checkFieldSize(field)) { value = sum(field * magSf()); } reduce(value, sumOp<Type>()); // avoid divide-by-zero if (area()) { return value / area(); } else { return pTraits<Type>::zero; } }
void Foam::cyclicACMIFvPatch::updateAreas() const { if (cyclicACMIPolyPatch_.updated()) { if (debug) { Pout<< "cyclicACMIFvPatch::updateAreas() : updating fv areas for " << name() << " and " << this->nonOverlapPatch().name() << endl; } // owner couple const_cast<vectorField&>(Sf()) = patch().faceAreas(); const_cast<scalarField&>(magSf()) = mag(patch().faceAreas()); // owner non-overlapping const fvPatch& nonOverlapPatch = this->nonOverlapPatch(); const_cast<vectorField&>(nonOverlapPatch.Sf()) = nonOverlapPatch.patch().faceAreas(); const_cast<scalarField&>(nonOverlapPatch.magSf()) = mag(nonOverlapPatch.patch().faceAreas()); // neighbour couple const cyclicACMIFvPatch& nbrACMI = neighbPatch(); const_cast<vectorField&>(nbrACMI.Sf()) = nbrACMI.patch().faceAreas(); const_cast<scalarField&>(nbrACMI.magSf()) = mag(nbrACMI.patch().faceAreas()); // neighbour non-overlapping const fvPatch& nbrNonOverlapPatch = nbrACMI.nonOverlapPatch(); const_cast<vectorField&>(nbrNonOverlapPatch.Sf()) = nbrNonOverlapPatch.patch().faceAreas(); const_cast<scalarField&>(nbrNonOverlapPatch.magSf()) = mag(nbrNonOverlapPatch.patch().faceAreas()); // set the updated flag cyclicACMIPolyPatch_.setUpdated(false); } }
void dynamicLagrangian<BasicTurbulenceModel>::correct() { if (!this->turbulence_) { return; } // Local references const surfaceScalarField& phi = this->phi_; const volVectorField& U = this->U_; LESeddyViscosity<BasicTurbulenceModel>::correct(); tmp<volTensorField> tgradU(fvc::grad(U)); const volTensorField& gradU = tgradU(); volSymmTensorField S(dev(symm(gradU))); volScalarField magS(mag(S)); volVectorField Uf(filter_(U)); volSymmTensorField Sf(dev(symm(fvc::grad(Uf)))); volScalarField magSf(mag(Sf)); volSymmTensorField L(dev(filter_(sqr(U)) - (sqr(filter_(U))))); volSymmTensorField M ( 2.0*sqr(this->delta())*(filter_(magS*S) - 4.0*magSf*Sf) ); volScalarField invT ( (1.0/(theta_.value()*this->delta()))*pow(flm_*fmm_, 1.0/8.0) ); volScalarField LM(L && M); fvScalarMatrix flmEqn ( fvm::ddt(flm_) + fvm::div(phi, flm_) == invT*LM - fvm::Sp(invT, flm_) ); flmEqn.relax(); flmEqn.solve(); bound(flm_, flm0_); volScalarField MM(M && M); fvScalarMatrix fmmEqn ( fvm::ddt(fmm_) + fvm::div(phi, fmm_) == invT*MM - fvm::Sp(invT, fmm_) ); fmmEqn.relax(); fmmEqn.solve(); bound(fmm_, fmm0_); correctNut(gradU); }