diff --git a/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/LiquidEvaporationBoil/LiquidEvaporationBoil.C b/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/LiquidEvaporationBoil/LiquidEvaporationBoil.C index ced9a982216ff9503944d46a73ddd91fe1c4279e..9887cf3897341ee8d60182e42f18d7b37e44c311 100644 --- a/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/LiquidEvaporationBoil/LiquidEvaporationBoil.C +++ b/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/LiquidEvaporationBoil/LiquidEvaporationBoil.C @@ -157,19 +157,12 @@ void Foam::LiquidEvaporationBoil<CloudType>::calculate // liquid volume fraction const scalarField X(liquids_.X(Yl)); - // droplet vapour surface pressure + // droplet surface pressure assumed to surface vapour pressure scalar ps = liquids_.pv(pc, Ts, X); // vapour density at droplet surface [kg/m3] scalar rhos = ps*liquids_.W(X)/(specie::RR*Ts); - // thermal conductivity of carrier [W/m/K] - scalar kappac = 0.0; - forAll(this->owner().thermo().carrier().Y(), i) - { - const scalar Yc = this->owner().thermo().carrier().Y()[i][cellI]; - kappac += Yc*this->owner().thermo().carrier().kappa(i, Ts); - } // calculate mass transfer of each specie in liquid forAll(activeLiquids_, i) @@ -178,13 +171,13 @@ void Foam::LiquidEvaporationBoil<CloudType>::calculate const label lid = liqToLiqMap_[i]; // boiling temperature at cell pressure for liquid species lid [K] - const scalar TBoil = liquids_.properties()[lid].pvInvert(ps); + const scalar TBoil = liquids_.properties()[lid].pvInvert(pc); // limit droplet temperature to boiling/critical temperature const scalar Td = min(T, 0.999*TBoil); // saturation pressure for liquid species lid [Pa] - const scalar pSat = liquids_.properties()[lid].pv(ps, Td); + const scalar pSat = liquids_.properties()[lid].pv(pc, Td); // carrier phase concentration const scalar Xc = XcMix[gid]; @@ -197,7 +190,7 @@ void Foam::LiquidEvaporationBoil<CloudType>::calculate else { // vapour diffusivity [m2/s] - const scalar Dab = liquids_.properties()[lid].D(ps, Td); + const scalar Dab = liquids_.properties()[lid].D(ps, Ts); // Schmidt number const scalar Sc = nu/(Dab + ROOTVSMALL); @@ -212,35 +205,82 @@ void Foam::LiquidEvaporationBoil<CloudType>::calculate const scalar deltaT = max(T - TBoil, 0.5); - // liquid specific heat capacity - const scalar Cp = liquids_.properties()[lid].Cp(pc, Td); + scalar Hsc = 0.0; + scalar Hc = 0.0; + scalar Cpc = 0.0; + scalar kappac = 0.0; + forAll(this->owner().thermo().carrier().Y(), i) + { + scalar Yc = this->owner().thermo().carrier().Y()[i][cellI]; + Hc += Yc*this->owner().thermo().carrier().H(i, Tc); + Hsc += Yc*this->owner().thermo().carrier().H(i, Ts); + Cpc += Yc*this->owner().thermo().carrier().Cp(i, Ts); + kappac += Yc*this->owner().thermo().carrier().kappa(i, Ts); + } // vapour heat of formation const scalar hv = liquids_.properties()[lid].hl(pc, Td); - const scalar lg = log(1.0 + Cp*deltaT/max(SMALL, hv)); + // empirical heat transfer coefficient W/m2/K + scalar alphaS = 0.0; + if (deltaT < 5.0) + { + alphaS = 760.0*pow(deltaT, 0.26); + } + else if (deltaT < 25.0) + { + alphaS = 27.0*pow(deltaT, 2.33); + } + else + { + alphaS = 13800.0*pow(deltaT, 0.39); + } + + // flash-boil vaporisation rate + const scalar Gf = alphaS*deltaT*pi*sqr(d)/hv; + + // model constants + // NOTE: using Sherwood number instead of Nusselt number + const scalar A = (Hc - Hsc)/hv; + const scalar B = pi*kappac/Cpc*d*Sh; - // mass transfer [kg] - // NOTE: Using Sherwood number instead of Nusselt number - dMassPC[lid] += pi*kappac*Sh*lg*d/Cp*dt; + scalar G = 0.0; + if (A > 0.0) + { + // heat transfer from the surroundings contributes + // to the vaporisation process + scalar Gr = 1e-5; + + for (label i=0; i<50; i++) + { + scalar GrDash = Gr; + + G = B/(1.0 + Gr)*log(1.0 + A*(1.0 + Gr)); + Gr = Gf/G; + + if (mag(Gr - GrDash)/GrDash < 1e-3) + { + break; + } + } + } + + dMassPC[lid] += (G + Gf)*dt; } else { // evaporation // surface molar fraction - Raoult's Law - const scalar Xs = X[lid]*pSat/ps; + const scalar Xs = X[lid]*pSat/pc; // molar ratio const scalar Xr = (Xs - Xc)/max(SMALL, 1.0 - Xs); if (Xr > 0) { - // mass transfer coefficient [m/s] - const scalar kc = Sh*Dab/(d + ROOTVSMALL); - // mass transfer [kg] - dMassPC[lid] += pi*sqr(d)*kc*rhos*log(1.0 + Xr)*dt; + dMassPC[lid] += pi*d*Sh*Dab*rhos*log(1.0 + Xr)*dt; } } } @@ -291,7 +331,7 @@ Foam::scalar Foam::LiquidEvaporationBoil<CloudType>::dh "const label, " "const label, " "const label" - ")" + ") const" ) << "Unknown enthalpyTransfer type" << abort(FatalError); } } diff --git a/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/LiquidEvaporationBoil/LiquidEvaporationBoil.H b/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/LiquidEvaporationBoil/LiquidEvaporationBoil.H index f16ea47be91521cc2e3b108e4aa7293884096b6a..48d92292cdcd890a46699dc9f7847651512eaf1b 100644 --- a/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/LiquidEvaporationBoil/LiquidEvaporationBoil.H +++ b/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/LiquidEvaporationBoil/LiquidEvaporationBoil.H @@ -27,7 +27,16 @@ Class Description Liquid evaporation model - uses ideal gas assumption - - includes boiling model + - includes boiling model based on: + + \verbatim + "Studies of Superheated Fuel Spray Structures and Vaporization in + GDI Engines" + + Zuo, B., Gomes, A. M. and Rutland C. J. + + International Journal of Engine Research, 2000, Vol. 1(4), pp. 321-336 + \endverbatim \*---------------------------------------------------------------------------*/