30 template <
class CloudType>
38 diffuseFraction_(
readScalar(this->coeffDict().lookup(
"diffuseFraction")))
44 template <
class CloudType>
51 template <
class CloudType>
61 label wppIndex = wpp.
index();
63 label wppLocalFace = wpp.
whichFace(faceId);
71 scalar U_dot_nw = U & nw;
73 CloudType& cloud(this->owner());
75 Random& rndGen(cloud.rndGen());
77 if (diffuseFraction_ > rndGen.scalar01())
82 vector Ut = U - U_dot_nw*nw;
84 while (
mag(Ut) < SMALL)
92 U.
x()*(0.8 + 0.2*rndGen.scalar01()),
93 U.
y()*(0.8 + 0.2*rndGen.scalar01()),
94 U.
z()*(0.8 + 0.2*rndGen.scalar01())
108 scalar
T = cloud.boundaryT().boundaryField()[wppIndex][wppLocalFace];
110 scalar mass = cloud.constProps(typeId).mass();
112 scalar iDof = cloud.constProps(typeId).internalDegreesOfFreedom();
115 sqrt(CloudType::kb*T/mass)
117 rndGen.GaussNormal()*tw1
118 + rndGen.GaussNormal()*tw2
119 -
sqrt(-2.0*
log(
max(1 - rndGen.scalar01(), VSMALL)))*nw
122 U += cloud.boundaryU().boundaryField()[wppIndex][wppLocalFace];
124 Ei = cloud.equipartitionInternalEnergy(T, iDof);
132 U -= 2.0*U_dot_nw*nw;