33 template<
class CloudType>
42 Random&
rndGen(cloud.rndGen());
44 scalar ChiAMinusOne = ChiA - 1;
45 scalar ChiBMinusOne = ChiB - 1;
47 if (ChiAMinusOne < small && ChiBMinusOne < small)
59 energyRatio =
rndGen.scalar01();
61 if (ChiAMinusOne < small)
63 P = 1.0 -
pow(energyRatio, ChiB);
65 else if (ChiBMinusOne < small)
67 P = 1.0 -
pow(energyRatio, ChiA);
74 (ChiAMinusOne + ChiBMinusOne)*energyRatio/ChiAMinusOne,
79 (ChiAMinusOne + ChiBMinusOne)*(1 - energyRatio)
84 }
while (P <
rndGen.scalar01());
92 template<
class CloudType>
102 relaxationCollisionNumber_
111 template<
class CloudType>
119 template<
class CloudType>
126 template<
class CloudType>
135 label typeIdP = pP.typeId();
136 label typeIdQ = pQ.typeId();
152 scalar cR =
mag(pP.U() - pQ.U());
161 scalar mR = mP*mQ/(mP + mQ);
173 template<
class CloudType>
182 label typeIdP = pP.typeId();
183 label typeIdQ = pQ.typeId();
186 scalar& EiP = pP.Ei();
187 scalar& EiQ = pQ.Ei();
191 scalar inverseCollisionNumber = 1/relaxationCollisionNumber_;
197 scalar preCollisionEiP = EiP;
198 scalar preCollisionEiQ = EiQ;
212 scalar mR = mP*mQ/(mP + mQ);
213 vector Ucm = (mP*UP + mQ*UQ)/(mP + mQ);
214 scalar cRsqr =
magSqr(UP - UQ);
215 scalar availableEnergy = 0.5*mR*cRsqr;
216 scalar ChiB = 2.5 - omegaPQ;
220 if (inverseCollisionNumber >
rndGen.scalar01())
222 availableEnergy += preCollisionEiP;
226 scalar energyRatio = 1.0 -
pow(
rndGen.scalar01(), (1.0/ChiB));
227 EiP = energyRatio*availableEnergy;
231 scalar ChiA = 0.5*iDofP;
232 EiP = energyRatio(ChiA, ChiB)*availableEnergy;
235 availableEnergy -= EiP;
241 if (inverseCollisionNumber >
rndGen.scalar01())
243 availableEnergy += preCollisionEiQ;
247 scalar energyRatio = 1.0 -
pow(
rndGen.scalar01(), (1.0/ChiB));
248 EiQ = energyRatio*availableEnergy;
252 scalar ChiA = 0.5*iDofQ;
253 EiQ = energyRatio(ChiA, ChiB)*availableEnergy;
256 availableEnergy -= EiQ;
261 scalar cR =
sqrt(2.0*availableEnergy/mR);
264 scalar cosTheta = 2.0*
rndGen.scalar01() - 1.0;
265 scalar sinTheta =
sqrt(1.0 - cosTheta*cosTheta);
268 vector postCollisionRelU =
277 UP = Ucm + postCollisionRelU*mQ/(mP + mQ);
278 UQ = Ucm - postCollisionRelU*mP/(mP + mQ);
virtual void collide(typename CloudType::parcelType &pP, typename CloudType::parcelType &pQ)
Apply collision.
intWM_LABEL_SIZE_t label
A label is an int32_t or int64_t as specified by the pre-processor macro WM_LABEL_SIZE.
DSMCCloud< dsmcParcel > CloudType
virtual scalar sigmaTcR(const typename CloudType::parcelType &pP, const typename CloudType::parcelType &pQ) const
Return the collision cross section * relative velocity product.
A list of keyword definitions, which are a keyword followed by any number of values (e...
virtual bool active() const
Flag to indicate whether model activates collision model.
Templated DSMC particle collision class.
dimensionedScalar sqrt(const dimensionedScalar &ds)
Vector< scalar > vector
A scalar version of the templated Vector.
virtual ~LarsenBorgnakkeVariableHardSphere()
Destructor.
stressControl lookup("compactNormalStress") >> compactNormalStress
dimensionedScalar cos(const dimensionedScalar &ds)
dimensionedScalar exp(const dimensionedScalar &ds)
Random & rndGen()
Return references to the random object.
bool readScalar(const char *buf, doubleScalar &s)
Read whole of buf as a scalar. Return true if successful.
const scalar twoPi(2 *pi)
ParcelType parcelType
Type of parcel the cloud was instantiated for.
dimensioned< scalar > magSqr(const dimensioned< Type > &)
dimensionedScalar sin(const dimensionedScalar &ds)
dimensionedScalar lgamma(const dimensionedScalar &ds)
dimensionedScalar pow(const dimensionedScalar &ds, const dimensionedScalar &expt)
const dimensionedScalar k
Boltzmann constant.
LarsenBorgnakkeVariableHardSphere(const dictionary &dict, CloudType &cloud)
Construct from dictionary.
dimensioned< scalar > mag(const dimensioned< Type > &)
Templated base class for dsmc cloud.
const List< typename ParcelType::constantProperties > & constProps() const
Return all of the constant properties.
Variable Hard Sphere BinaryCollision Model with Larsen Borgnakke internal energy redistribution. Based on the INELRS subroutine in Bird's DSMC0R.FOR.