From e28694fe1529743bc7fb476f03434161c2921954 Mon Sep 17 00:00:00 2001 From: andy <andy> Date: Fri, 9 Aug 2013 12:40:31 +0100 Subject: [PATCH] BUG: LiquidEvaporation[Boil] - immediately evaporate mass if reached critical condition - mantis #950 --- .../LiquidEvaporation/LiquidEvaporation.C | 60 ++++++++++++++++++- .../LiquidEvaporation/LiquidEvaporation.H | 5 +- .../LiquidEvaporationBoil.C | 60 +++++++++++++++++-- .../LiquidEvaporationBoil.H | 5 +- 4 files changed, 121 insertions(+), 9 deletions(-) diff --git a/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/LiquidEvaporation/LiquidEvaporation.C b/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/LiquidEvaporation/LiquidEvaporation.C index 8bd8a4d1400..61dfb6c6ee6 100644 --- a/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/LiquidEvaporation/LiquidEvaporation.C +++ b/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/LiquidEvaporation/LiquidEvaporation.C @@ -151,6 +151,44 @@ void Foam::LiquidEvaporation<CloudType>::calculate scalarField& dMassPC ) const { + // liquid volume fraction + const scalarField X(liquids_.X(Yl)); + + // immediately evaporate mass that has reached critical condition + if (mag(T - liquids_.Tc(X)) < SMALL) + { + if (debug) + { + WarningIn + ( + "void Foam::LiquidEvaporation<CloudType>::calculate" + "(" + "const scalar, " + "const label, " + "const scalar, " + "const scalar, " + "const scalar, " + "const scalar, " + "const scalar, " + "const scalar, " + "const scalar, " + "const scalar, " + "const scalarField&, " + "scalarField&" + ") const" + ) << "Parcel reached critical conditions: " + << "evaporating all avaliable mass" << endl; + } + + forAll(activeLiquids_, i) + { + const label lid = liqToLiqMap_[i]; + dMassPC[lid] = GREAT; + } + + return; + } + // construct carrier phase species volume fractions for cell, cellI const scalarField Xc(calcXc(cellI)); @@ -242,9 +280,27 @@ Foam::scalar Foam::LiquidEvaporation<CloudType>::dh template<class CloudType> -Foam::scalar Foam::LiquidEvaporation<CloudType>::TMax(const scalar pIn) const +Foam::scalar Foam::LiquidEvaporation<CloudType>::Tvap +( + const scalarField& Y +) const +{ + const scalarField X(liquids_.X(Y)); + + return liquids_.Tpt(X); +} + + +template<class CloudType> +Foam::scalar Foam::LiquidEvaporation<CloudType>::TMax +( + const scalar p, + const scalarField& Y +) const { - return liquids_.TMax(pIn); + const scalarField X(liquids_.X(Y)); + + return liquids_.pvInvert(p, X); } diff --git a/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/LiquidEvaporation/LiquidEvaporation.H b/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/LiquidEvaporation/LiquidEvaporation.H index fb2e2cdd9c8..3d5334cd884 100644 --- a/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/LiquidEvaporation/LiquidEvaporation.H +++ b/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/LiquidEvaporation/LiquidEvaporation.H @@ -131,8 +131,11 @@ public: const scalar T ) const; + //- Return vapourisation temperature + virtual scalar Tvap(const scalarField& Y) const; + //- Return maximum/limiting temperature - virtual scalar TMax(const scalar pIn) const; + virtual scalar TMax(const scalar p, const scalarField& Y) const; }; diff --git a/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/LiquidEvaporationBoil/LiquidEvaporationBoil.C b/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/LiquidEvaporationBoil/LiquidEvaporationBoil.C index 6436d396053..d78d6b110b4 100644 --- a/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/LiquidEvaporationBoil/LiquidEvaporationBoil.C +++ b/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/LiquidEvaporationBoil/LiquidEvaporationBoil.C @@ -151,18 +151,53 @@ void Foam::LiquidEvaporationBoil<CloudType>::calculate scalarField& dMassPC ) const { - // construct carrier phase species volume fractions for cell, cellI - const scalarField XcMix(calcXc(cellI)); - // liquid volume fraction const scalarField X(liquids_.X(Yl)); + // immediately evaporate mass that has reached critical condition + if (mag(T - liquids_.Tc(X)) < SMALL) + { + if (debug) + { + WarningIn + ( + "void Foam::LiquidEvaporationBoil<CloudType>::calculate" + "(" + "const scalar, " + "const label, " + "const scalar, " + "const scalar, " + "const scalar, " + "const scalar, " + "const scalar, " + "const scalar, " + "const scalar, " + "const scalar, " + "const scalarField&, " + "scalarField&" + ") const" + ) << "Parcel reached critical conditions: " + << "evaporating all avaliable mass" << endl; + } + + forAll(activeLiquids_, i) + { + const label lid = liqToLiqMap_[i]; + dMassPC[lid] = GREAT; + } + + return; + } + // 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); + // construct carrier phase species volume fractions for cell, cellI + const scalarField XcMix(calcXc(cellI)); + // carrier thermo properties scalar Hsc = 0.0; scalar Hc = 0.0; @@ -340,13 +375,28 @@ Foam::scalar Foam::LiquidEvaporationBoil<CloudType>::dh } +template<class CloudType> +Foam::scalar Foam::LiquidEvaporationBoil<CloudType>::Tvap +( + const scalarField& Y +) const +{ + const scalarField X(liquids_.X(Y)); + + return liquids_.Tpt(X); +} + + template<class CloudType> Foam::scalar Foam::LiquidEvaporationBoil<CloudType>::TMax ( - const scalar pIn + const scalar p, + const scalarField& Y ) const { - return liquids_.TMax(pIn); + const scalarField X(liquids_.X(Y)); + + return liquids_.pvInvert(p, X); } diff --git a/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/LiquidEvaporationBoil/LiquidEvaporationBoil.H b/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/LiquidEvaporationBoil/LiquidEvaporationBoil.H index 2d11f55f320..f3b532dff58 100644 --- a/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/LiquidEvaporationBoil/LiquidEvaporationBoil.H +++ b/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/LiquidEvaporationBoil/LiquidEvaporationBoil.H @@ -141,8 +141,11 @@ public: const scalar T ) const; + //- Return vapourisation temperature + virtual scalar Tvap(const scalarField& Y) const; + //- Return maximum/limiting temperature - virtual scalar TMax(const scalar pIn) const; + virtual scalar TMax(const scalar p, const scalarField& Y) const; }; -- GitLab