30 template<
class CloudType>
45 if (!this->defaultCoeffs(
true))
47 this->coeffDict().lookup(
"B0") >> b0_;
48 this->coeffDict().lookup(
"B1") >> b1_;
49 this->coeffDict().lookup(
"Ctau") >> cTau_;
50 this->coeffDict().lookup(
"CRT") >> cRT_;
51 this->coeffDict().lookup(
"msLimit") >> msLimit_;
52 this->coeffDict().lookup(
"WeberLimit") >> weberLimit_;
57 template<
class CloudType>
65 msLimit_(bum.msLimit_),
66 weberLimit_(bum.weberLimit_)
72 template<
class CloudType>
79 template<
class CloudType>
105 bool addParcel =
false;
107 const scalar averageParcelMass =
108 this->
owner().injectors().averageParcelMass();
112 scalar d03 =
pow3(d0);
115 scalar mass = nParticle*d3*rhopi6;
116 scalar mass0 = nParticle*d03*rhopi6;
118 scalar weGas = 0.5*rhoc*
sqr(Urmag)*d/
sigma;
119 scalar weLiquid = 0.5*rho*
sqr(Urmag)*d/
sigma;
122 scalar reLiquid = rho*Urmag*r/
mu;
123 scalar ohnesorge =
sqrt(weLiquid)/(reLiquid + vSmall);
124 scalar taylor = ohnesorge*
sqrt(weGas);
126 vector acceleration = Urel/tMom;
128 scalar gt = (g + acceleration) & trajectory;
132 (0.34 + 0.38*
pow(weGas, 1.5))
133 /((1.0 + ohnesorge)*(1.0 + 1.4*
pow(taylor, 0.6)))
140 *(1.0 + 0.45*
sqrt(ohnesorge))
141 *(1.0 + 0.4*
pow(taylor, 0.7))
142 /
pow(1.0 + 0.865*
pow(weGas, 1.67), 0.6);
145 scalar tauKH = 3.726*b1_*r/(omegaKH*lambdaKH);
148 scalar dc = 2.0*b0_*lambdaKH;
151 scalar helpVariable =
mag(gt*(rho - rhoc));
152 scalar omegaRT =
sqrt 154 2.0*
pow(helpVariable, 1.5)
155 /(3.0*
sqrt(3.0*sigma)*(rhoc + rho))
159 scalar KRT =
sqrt(helpVariable/(3.0*sigma + vSmall));
166 if ((tc > 0) || (lambdaRT < d) )
172 scalar tauRT = cTau_/(omegaRT + vSmall);
175 if ((tc > tauRT) && (lambdaRT < d))
179 scalar nDrops = d/lambdaRT;
186 if (weGas > weberLimit_)
188 scalar fraction = dt/tauKH;
191 d = (fraction*dc + d)/(1.0 + fraction);
194 scalar ms0 = mass0*(1.0 -
pow3(d/d0));
197 if (ms/averageParcelMass > msLimit_)
208 scalar de3 = d*d*(dc - d);
210 pow3(be3/(3.0*ae3)) - be3*ce3/(6.0*ae3*ae3) + de3/(2.0*ae3);
211 scalar pe3 = (3.0*ae3*ce3 - be3*be3)/(9.0*ae3*ae3);
212 scalar D3 = qe3*qe3 + pe3*pe3*pe3;
214 if (D3 < 0) br3 =
false;
219 scalar ue3 =
cbrt(-qe3 + D3);
220 scalar ve3 =
cbrt(-qe3 - D3);
221 scalar dParenDrops = ue3 + ve3 - be3/3.;
222 scalar mc = nParticle*(
pow3(d) -
pow3(dParenDrops));
223 scalar nChildDrops = mc/
pow3(dc);
225 if (nChildDrops >= nParticle)
231 massChild = mc*rhopi6;
240 else if (KHindex < 0.5)
247 scalar diameterLargerDrop =
cbrt(1.5*d*d*lengthScale);
248 d = diameterLargerDrop;
254 scalar massDrop =
pow3(d)*rhopi6;
255 nParticle = mass/massDrop;
secondary breakup model which uses the Kelvin-Helmholtz instability theory to predict the 'stripped' ...
A list of keyword definitions, which are a keyword followed by any number of values (e...
virtual bool update(const scalar dt, const vector &g, scalar &d, scalar &tc, scalar &ms, scalar &nParticle, scalar &KHindex, scalar &y, scalar &yDot, const scalar d0, const scalar rho, const scalar mu, const scalar sigma, const vector &U, const scalar rhoc, const scalar muc, const vector &Urel, const scalar Urmag, const scalar tMom, scalar &dChild, scalar &massChild)
Update the parcel diameter.
dimensionedSymmTensor sqr(const dimensionedVector &dv)
dimensionedScalar sqrt(const dimensionedScalar &ds)
const CloudType & owner() const
Return const access to the owner cloud.
const dimensionedScalar sigma
Stefan-Boltzmann constant: default SI units: [W/m^2/K^4].
dimensionedScalar cbrt(const dimensionedScalar &ds)
layerAndWeight min(const layerAndWeight &a, const layerAndWeight &b)
const scalar twoPi(2 *pi)
const dimensionedScalar mu
Atomic mass unit.
ReitzKHRT(const dictionary &, CloudType &)
Construct from dictionary.
dimensionedScalar pow(const dimensionedScalar &ds, const dimensionedScalar &expt)
dimensionedScalar pow3(const dimensionedScalar &ds)
dimensioned< scalar > mag(const dimensioned< Type > &)
Templated break-up model class.
Templated base class for dsmc cloud.
virtual ~ReitzKHRT()
Destructor.