30 template <
class CloudType>
38 Tref_(
readScalar(this->coeffDict().lookup(
"Tref")))
44 template <
class CloudType>
52 template <
class CloudType>
61 const CloudType& cloud(this->owner());
66 cloud.constProps(typeIdP).d()
67 + cloud.constProps(typeIdQ).d()
73 cloud.constProps(typeIdP).omega()
74 + cloud.constProps(typeIdQ).omega()
77 scalar cR =
mag(UP - UQ);
84 scalar mP = cloud.constProps(typeIdP).mass();
86 scalar mQ = cloud.constProps(typeIdQ).mass();
88 scalar mR = mP*mQ/(mP + mQ);
93 *
pow(2.0*CloudType::kb*Tref_/(mR*cR*cR), omegaPQ - 0.5)
100 template <
class CloudType>
111 CloudType& cloud(this->owner());
113 Random& rndGen(cloud.rndGen());
115 scalar mP = cloud.constProps(typeIdP).mass();
117 scalar mQ = cloud.constProps(typeIdQ).mass();
119 vector Ucm = (mP*UP + mQ*UQ)/(mP + mQ);
121 scalar cR =
mag(UP - UQ);
123 scalar cosTheta = 2.0*rndGen.scalar01() - 1.0;
125 scalar sinTheta =
sqrt(1.0 - cosTheta*cosTheta);
129 vector postCollisionRelU =
138 UP = Ucm + postCollisionRelU*mQ/(mP + mQ);
140 UQ = Ucm - postCollisionRelU*mP/(mP + mQ);