34 template<
class CloudType>
48 scalar m1 = p1.nParticle()*p1.mass();
49 scalar m2 = p2.nParticle()*p2.mass();
51 bool massChanged = collideParcels(dt, p1, p2, m1, m2);
58 p1.rho() = liquids_.rho(p1.pc(), p1.T(), X);
59 p1.Cp() = liquids_.Cp(p1.pc(), p1.T(), X);
60 p1.sigma() = liquids_.sigma(p1.pc(), p1.T(), X);
61 p1.mu() = liquids_.mu(p1.pc(), p1.T(), X);
62 p1.d() =
cbrt(6.0*m1/(p1.nParticle()*p1.rho()*
pi));
68 p2.rho() = liquids_.rho(p2.pc(), p2.T(), X);
69 p2.Cp() = liquids_.Cp(p2.pc(), p2.T(), X);
70 p2.sigma() = liquids_.sigma(p2.pc(), p2.T(), X);
71 p2.mu() = liquids_.mu(p2.pc(), p2.T(), X);
72 p2.d() =
cbrt(6.0*m2/(p2.nParticle()*p2.rho()*
pi));
85 scalar mass =
p.nParticle()*
p.mass();
87 if (mass < this->owner().constProps().minParcelMass())
95 template<
class CloudType>
105 const label cell1 = p1.cell();
106 const label cell2 = p2.cell();
109 if ((cell1 != cell2) || (m1 < ROOTVSMALL) || (m2 < ROOTVSMALL))
114 bool coalescence =
false;
116 const scalar Vc = this->owner().
mesh().
V()[cell1];
117 const scalar d1 = p1.d();
118 const scalar d2 = p2.d();
120 scalar magUrel =
mag(p1.U() - p2.U());
121 scalar sumD = d1 + d2;
123 scalar nMin =
min(p1.nParticle(), p2.nParticle());
124 scalar
nu = nMin*nu0;
125 scalar collProb =
exp(-
nu);
126 scalar xx = this->owner().
rndGen().template sample01<scalar>();
133 coalescence = collideSorted(dt, p1, p2, m1, m2);
137 coalescence = collideSorted(dt, p2, p1, m2, m1);
145 template<
class CloudType>
155 bool coalescence =
false;
157 const scalar sigma1 = p1.sigma();
158 const scalar sigma2 = p2.sigma();
160 const scalar d1 = p1.d();
161 const scalar d2 = p2.d();
163 const scalar T1 = p1.T();
164 const scalar T2 = p2.T();
166 const scalar
rho1 = p1.rho();
167 const scalar
rho2 = p2.rho();
172 const label& nP1 = p1.nParticle();
173 const label& nP2 = p2.nParticle();
177 scalar magURel =
mag(URel);
179 scalar
mTot = m1 + m2;
181 scalar gamma = d1/
max(ROOTVSMALL, d2);
182 scalar
f =
pow3(gamma) + 2.7*gamma - 2.4*
sqr(gamma);
185 scalar Tave = (T1*m1 + T2*m2)/
mTot;
188 scalar sigmaAve = sigma1 + (sigma2 - sigma1)*(Tave - T1)/(T2 - T1);
191 scalar rhoAve =
mTot/Vtot;
193 scalar dAve =
sqrt(d1*d2);
194 scalar WeColl = 0.5*rhoAve*
sqr(magURel)*dAve/
max(ROOTVSMALL, sigmaAve);
196 scalar coalesceProb =
min(1.0, 2.4*
f/
max(ROOTVSMALL, WeColl));
198 scalar prob = this->owner().
rndGen().template sample01<scalar>();
201 if (prob < coalesceProb && coalescence_)
206 scalar nProb = prob*nP2/nP1;
212 scalar dm = nP1*nProb*m2/scalar(nP2);
217 p1.T() = (Tave*
mTot - m2*T2)/m1;
219 p1.U() = (m1*
U1 + (1.0 - m2/m2Org)*m2*
U2)/m1;
221 p1.Y() = (m1Org*p1.Y() + dm*p2.Y())/m1;
223 p2.nParticle() = m2/(
rho2*p2.volume());
228 scalar gf =
sqrt(prob) -
sqrt(coalesceProb);
229 scalar denom = 1.0 -
sqrt(coalesceProb);
250 p2.U() = (nP1*v2p + (nP2 - nP1)*
U2)/nP2;
254 p1.U() = (nP2*v1p + (nP1 - nP2)*
U1)/nP1;
265 template<
class CloudType>
270 const word& modelName
276 owner.db().template lookupObject<SLGThermo>(
"SLGThermo").liquids()
278 coalescence_(this->coeffDict().
lookup(
"coalescence"))
282 template<
class CloudType>
296 template<
class CloudType>