31 template<
class ParcelType>
32 template<
class TrackData>
38 ParcelType&
p =
static_cast<ParcelType&
>(*this);
40 td.switchProcessor =
false;
41 td.keepParticle =
true;
47 scalar tEnd = (1.0 - p.stepFraction())*deltaT;
48 const scalar dtMax = tEnd;
56 while (td.keepParticle && !td.switchProcessor && tEnd > ROOTVSMALL)
68 scalar dt =
min(dtMax, tEnd);
70 dt *= p.trackToFace(p.position() + dt*Utracking, td);
74 p.stepFraction() = 1.0 - tEnd/deltaT;
76 if (p.onBoundary() && td.keepParticle)
78 if (isA<processorPolyPatch>(pbMesh[p.patch(p.face())]))
80 td.switchProcessor =
true;
85 return td.keepParticle;
89 template<
class ParcelType>
90 template<
class TrackData>
102 template<
class ParcelType>
103 template<
class TrackData>
110 td.switchProcessor =
true;
114 template<
class ParcelType>
123 template<
class ParcelType>
124 template<
class TrackData>
131 label wppIndex = wpp.
index();
137 const scalar deltaT = td.cloud().pMesh().time().deltaTValue();
141 scalar m = constProps.
mass();
146 scalar U_dot_nw = U_ & nw;
148 vector Ut = U_ - U_dot_nw*nw;
150 scalar invMagUnfA = 1/
max(
mag(U_dot_nw)*fA, VSMALL);
152 td.cloud().rhoNBF()[wppIndex][wppLocalFace] += invMagUnfA;
154 td.cloud().rhoMBF()[wppIndex][wppLocalFace] += m*invMagUnfA;
156 td.cloud().linearKEBF()[wppIndex][wppLocalFace] +=
157 0.5*m*(U_ & U_)*invMagUnfA;
159 td.cloud().internalEBF()[wppIndex][wppLocalFace] += Ei_*invMagUnfA;
161 td.cloud().iDofBF()[wppIndex][wppLocalFace] +=
162 constProps.internalDegreesOfFreedom()*invMagUnfA;
164 td.cloud().momentumBF()[wppIndex][wppLocalFace] += m*Ut*invMagUnfA;
167 scalar preIE = 0.5*m*(U_ & U_) + Ei_;
172 td.cloud().wallInteraction().correct
183 Ut = U_ - U_dot_nw*nw;
185 invMagUnfA = 1/
max(
mag(U_dot_nw)*fA, VSMALL);
187 td.cloud().rhoNBF()[wppIndex][wppLocalFace] += invMagUnfA;
189 td.cloud().rhoMBF()[wppIndex][wppLocalFace] += m*invMagUnfA;
191 td.cloud().linearKEBF()[wppIndex][wppLocalFace] +=
192 0.5*m*(U_ & U_)*invMagUnfA;
194 td.cloud().internalEBF()[wppIndex][wppLocalFace] += Ei_*invMagUnfA;
196 td.cloud().iDofBF()[wppIndex][wppLocalFace] +=
197 constProps.internalDegreesOfFreedom()*invMagUnfA;
199 td.cloud().momentumBF()[wppIndex][wppLocalFace] += m*Ut*invMagUnfA;
202 scalar postIE = 0.5*m*(U_ & U_) + Ei_;
207 scalar deltaQ = td.cloud().nParticle()*(preIE - postIE)/(deltaT*fA);
209 vector deltaFD = td.cloud().nParticle()*(preIMom - postIMom)/(deltaT*fA);
211 td.cloud().qBF()[wppIndex][wppLocalFace] += deltaQ;
213 td.cloud().fDBF()[wppIndex][wppLocalFace] += deltaFD;
218 template<
class ParcelType>
227 template<
class ParcelType>
228 template<
class TrackData>
235 td.keepParticle =
false;
239 template<
class ParcelType>
248 template<
class ParcelType>
259 template<
class ParcelType>