Foam::forceSuSp Foam::BrownianMotionForce<CloudType>::calcCoupled ( const typename CloudType::parcelType& p, const scalar dt, const scalar mass, const scalar Re, const scalar muc ) const { forceSuSp value(vector::zero, 0.0); const scalar dp = p.d(); const scalar Tc = p.Tc(); const scalar eta = rndGen_.sample01<scalar>(); const scalar alpha = 2.0*lambda_/dp; const scalar cc = 1.0 + alpha*(1.257 + 0.4*exp(-1.1/alpha)); const scalar sigma = physicoChemical::sigma.value(); scalar f = 0.0; if (turbulence_) { const label cellI = p.cell(); const volScalarField& k = *kPtr_; const scalar kc = k[cellI]; const scalar Dp = sigma*Tc*cc/(3*mathematical::pi*muc*dp); f = eta/mass*sqrt(2.0*sqr(kc)*sqr(Tc)/(Dp*dt)); } else { const scalar rhoRatio = p.rho()/p.rhoc(); const scalar s0 = 216*muc*sigma*Tc/(sqr(mathematical::pi)*pow5(dp)*(rhoRatio)*cc); f = eta*sqrt(mathematical::pi*s0/dt); } const scalar sqrt2 = sqrt(2.0); for (label i = 0; i < 3; i++) { const scalar x = rndGen_.sample01<scalar>(); const scalar eta = sqrt2*erfInv(2*x - 1.0); value.Su()[i] = mass*f*eta; } return value; }