void Foam::solidParticle::hitWallPatch ( const wallPolyPatch& wpp, solidParticle::trackData& td ) { vector nw = wpp.faceAreas()[wpp.whichFace(face())]; nw /= mag(nw); scalar Un = U_ & nw; vector Ut = U_ - Un*nw; if (Un > 0) { U_ -= (1.0 + td.spc().e())*Un*nw; } U_ -= td.spc().mu()*Ut; }
void Foam::SpecularReflection<CloudType>::correct ( const wallPolyPatch& wpp, const label faceId, vector& U, scalar& Ei, label typeId ) { vector nw = wpp.faceAreas()[wpp.whichFace(faceId)]; nw /= mag(nw); scalar magUn = U & nw; if (magUn > 0.0) { U -= 2.0*magUn*nw; } }
void Foam::StandardWallInteraction<CloudType>::correct ( const wallPolyPatch& wpp, const label faceId, vector& U ) const { vector nw = wpp.faceAreas()[wpp.whichFace(faceId)]; nw /= mag(nw); scalar Un = U & nw; vector Ut = U - Un*nw; if (Un > 0) { U -= (1.0 + e_)*Un*nw; } U -= mu_*Ut; }
void Foam::DsmcParcel<ParcelType>::hitWallPatch ( const wallPolyPatch& wpp, TrackData& td, const tetIndices& tetIs ) { label wppIndex = wpp.index(); label wppLocalFace = wpp.whichFace(this->face()); const scalar fA = mag(wpp.faceAreas()[wppLocalFace]); const scalar deltaT = td.cloud().pMesh().time().deltaTValue(); const constantProperties& constProps(td.cloud().constProps(typeId_)); scalar m = constProps.mass(); vector nw = wpp.faceAreas()[wppLocalFace]; nw /= mag(nw); scalar U_dot_nw = U_ & nw; vector Ut = U_ - U_dot_nw*nw; scalar invMagUnfA = 1/max(mag(U_dot_nw)*fA, VSMALL); td.cloud().rhoNBF()[wppIndex][wppLocalFace] += invMagUnfA; td.cloud().rhoMBF()[wppIndex][wppLocalFace] += m*invMagUnfA; td.cloud().linearKEBF()[wppIndex][wppLocalFace] += 0.5*m*(U_ & U_)*invMagUnfA; td.cloud().internalEBF()[wppIndex][wppLocalFace] += Ei_*invMagUnfA; td.cloud().iDofBF()[wppIndex][wppLocalFace] += constProps.internalDegreesOfFreedom()*invMagUnfA; td.cloud().momentumBF()[wppIndex][wppLocalFace] += m*Ut*invMagUnfA; // pre-interaction energy scalar preIE = 0.5*m*(U_ & U_) + Ei_; // pre-interaction momentum vector preIMom = m*U_; td.cloud().wallInteraction().correct ( static_cast<DsmcParcel<ParcelType> &>(*this), wpp ); U_dot_nw = U_ & nw; Ut = U_ - U_dot_nw*nw; invMagUnfA = 1/max(mag(U_dot_nw)*fA, VSMALL); td.cloud().rhoNBF()[wppIndex][wppLocalFace] += invMagUnfA; td.cloud().rhoMBF()[wppIndex][wppLocalFace] += m*invMagUnfA; td.cloud().linearKEBF()[wppIndex][wppLocalFace] += 0.5*m*(U_ & U_)*invMagUnfA; td.cloud().internalEBF()[wppIndex][wppLocalFace] += Ei_*invMagUnfA; td.cloud().iDofBF()[wppIndex][wppLocalFace] += constProps.internalDegreesOfFreedom()*invMagUnfA; td.cloud().momentumBF()[wppIndex][wppLocalFace] += m*Ut*invMagUnfA; // post-interaction energy scalar postIE = 0.5*m*(U_ & U_) + Ei_; // post-interaction momentum vector postIMom = m*U_; scalar deltaQ = td.cloud().nParticle()*(preIE - postIE)/(deltaT*fA); vector deltaFD = td.cloud().nParticle()*(preIMom - postIMom)/(deltaT*fA); td.cloud().qBF()[wppIndex][wppLocalFace] += deltaQ; td.cloud().fDBF()[wppIndex][wppLocalFace] += deltaFD; }