31 template<
class ParcelType>
32 template<
class TrackData>
35 typename TrackData::cloudType::parcelType&
p =
36 static_cast<typename TrackData::cloudType::parcelType&
>(*this);
38 td.switchProcessor =
false;
39 td.keepParticle =
true;
44 scalar tEnd = (1.0 -
p.stepFraction())*trackTime;
45 const scalar dtMax = tEnd;
53 while (td.keepParticle && !td.switchProcessor && tEnd > ROOTVSMALL)
65 scalar dt =
min(dtMax, tEnd);
67 dt *=
p.trackToFace(
p.position() + dt*Utracking, td);
71 p.stepFraction() = 1.0 - tEnd/trackTime;
73 if (
p.onBoundary() && td.keepParticle)
75 if (isA<processorPolyPatch>(pbMesh[
p.patch(
p.face())]))
77 td.switchProcessor =
true;
82 return td.keepParticle;
86 template<
class ParcelType>
87 template<
class TrackData>
101 template<
class ParcelType>
102 template<
class TrackData>
109 td.switchProcessor =
true;
113 template<
class ParcelType>
114 template<
class TrackData>
128 const scalar deltaT = td.cloud().pMesh().time().deltaTValue();
132 scalar m = constProps.
mass();
137 scalar U_dot_nw = U_ &
nw;
141 scalar invMagUnfA = 1/
max(
mag(U_dot_nw)*fA, VSMALL);
143 td.cloud().rhoNBF()[wppIndex][wppLocalFace] += invMagUnfA;
145 td.cloud().rhoMBF()[wppIndex][wppLocalFace] += m*invMagUnfA;
147 td.cloud().linearKEBF()[wppIndex][wppLocalFace] +=
148 0.5*m*(U_ & U_)*invMagUnfA;
150 td.cloud().internalEBF()[wppIndex][wppLocalFace] += Ei_*invMagUnfA;
152 td.cloud().iDofBF()[wppIndex][wppLocalFace] +=
155 td.cloud().momentumBF()[wppIndex][wppLocalFace] += m*Ut*invMagUnfA;
158 scalar preIE = 0.5*m*(U_ & U_) + Ei_;
163 td.cloud().wallInteraction().correct
171 Ut = U_ - U_dot_nw*
nw;
173 invMagUnfA = 1/
max(
mag(U_dot_nw)*fA, VSMALL);
175 td.cloud().rhoNBF()[wppIndex][wppLocalFace] += invMagUnfA;
177 td.cloud().rhoMBF()[wppIndex][wppLocalFace] += m*invMagUnfA;
179 td.cloud().linearKEBF()[wppIndex][wppLocalFace] +=
180 0.5*m*(U_ & U_)*invMagUnfA;
182 td.cloud().internalEBF()[wppIndex][wppLocalFace] += Ei_*invMagUnfA;
184 td.cloud().iDofBF()[wppIndex][wppLocalFace] +=
187 td.cloud().momentumBF()[wppIndex][wppLocalFace] += m*Ut*invMagUnfA;
190 scalar postIE = 0.5*m*(U_ & U_) + Ei_;
195 scalar deltaQ = td.cloud().nParticle()*(preIE - postIE)/(deltaT*fA);
197 vector deltaFD = td.cloud().nParticle()*(preIMom - postIMom)/(deltaT*fA);
199 td.cloud().qBF()[wppIndex][wppLocalFace] += deltaQ;
201 td.cloud().fDBF()[wppIndex][wppLocalFace] += deltaFD;
206 template<
class ParcelType>
207 template<
class TrackData>
210 td.keepParticle =
false;
214 template<
class ParcelType>
217 ParcelType::transformProperties(
T);
222 template<
class ParcelType>
228 ParcelType::transformProperties(separation);