From f613354d3d57363512489738e838d4c50433ecbd Mon Sep 17 00:00:00 2001 From: andy <a.heather@opencfd.co.uk> Date: Fri, 27 Feb 2009 18:59:45 +0000 Subject: [PATCH] phase change update --- .../ReactingMultiphaseParcel.C | 8 +-- .../Templates/ReactingParcel/ReactingParcel.C | 42 ++++++---------- .../Templates/ReactingParcel/ReactingParcel.H | 1 + .../phaseProperties/phasePropertiesIO.C | 1 - .../CompositionModel/CompositionModel.C | 50 +++++++++++++++++++ .../CompositionModel/CompositionModel.H | 8 +++ .../NoPhaseChange/NoPhaseChange.C | 4 +- .../NoPhaseChange/NoPhaseChange.H | 4 +- .../PhaseChangeModel/PhaseChangeModel.H | 4 +- .../liquidEvaporation/liquidEvaporation.C | 12 +++-- .../liquidEvaporation/liquidEvaporation.H | 4 +- 11 files changed, 97 insertions(+), 41 deletions(-) diff --git a/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcel.C b/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcel.C index 35d969714f8..0ab68ded742 100644 --- a/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcel.C +++ b/src/lagrangian/intermediate/parcels/Templates/ReactingMultiphaseParcel/ReactingMultiphaseParcel.C @@ -100,7 +100,8 @@ void Foam::ReactingMultiphaseParcel<ParcelType>::calcCoupled // ~~~~~~~~~~~~~~~~~~~~~~ // Calculate phase change // ~~~~~~~~~~~~~~~~~~~~~~ - calcPhaseChange(td, dt, T0, dMassMT); + scalarField X = td.cloud().composition().X(idLiquid, YLiquid_); + calcPhaseChange(td, dt, T0, X, dMassMT); // ~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -271,7 +272,8 @@ void Foam::ReactingMultiphaseParcel<ParcelType>::calcUncoupled // ~~~~~~~~~~~~~~~~~~~~~~ // Calculate phase change // ~~~~~~~~~~~~~~~~~~~~~~ - calcPhaseChange(td, dt, T0, dMassMT); + scalarField X = td.cloud().composition().X(idLiquid, YLiquid_); + calcPhaseChange(td, dt, T0, YLiquid_, dMassMT); // ~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -347,7 +349,7 @@ void Foam::ReactingMultiphaseParcel<ParcelType>::calcDevolatilisation ( "void Foam::ReactingMultiphaseParcel<ParcelType>::" "calcDevolatilisation \n" - "(" + "(\n" " TrackData&,\n" " const scalar,\n" " const scalar,\n" diff --git a/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcel.C b/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcel.C index daaa9ac66af..266f6e25301 100644 --- a/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcel.C +++ b/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcel.C @@ -97,7 +97,8 @@ void Foam::ReactingParcel<ParcelType>::calcCoupled // ~~~~~~~~~~~~~~~~~~~~~~ // Calculate phase change // ~~~~~~~~~~~~~~~~~~~~~~ - calcPhaseChange(td, dt, T, dMassMT); + scalarField X = td.cliud().composition().X(0, YMixture_); + calcPhaseChange(td, dt, T, X, dMassMT); // ~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -229,7 +230,8 @@ void Foam::ReactingParcel<ParcelType>::calcUncoupled // ~~~~~~~~~~~~~~~~~~~~~~ // Calculate phase change // ~~~~~~~~~~~~~~~~~~~~~~ - calcPhaseChange(td, dt, T, dMassMT); + scalarField X = td.cloud().composition().X(0, YMixture_); + calcPhaseChange(td, dt, T, X, dMassMT); // ~~~~~~~~~~~~~~~~~~~~~~~~~~~ @@ -286,6 +288,7 @@ void Foam::ReactingParcel<ParcelType>::calcPhaseChange TrackData& td, const scalar dt, const scalar T, + scalarField& X, scalarList& dMassMT ) { @@ -296,35 +299,22 @@ void Foam::ReactingParcel<ParcelType>::calcPhaseChange // TODO: separate treatment for boiling - /* - // Determine mass to add to carrier phase - const scalar mass = this->mass(); - const scalar dMassTot = td.cloud().devolatilisation().calculate + scalar dMassTot = td.cloud().phaseChange().calculate ( - dt, - mass0_, - mass, - td.cloud().composition().YMixture0(), - YMixture_, - T0, - canCombust_ + T, + this->d_, + X, + dMassMT, + this->U_ - this->Uc_, + this->Tc_, + pc_, + this->muc_/this->rhoc_, + dt ); - // Update (total) mass fractions - YMixture_[0] = (YMixture_[0]*mass - dMassTot)/(mass - dMassTot); - YMixture_[1] = YMixture_[1]*mass/(mass - dMassTot); - YMixture_[2] = 1.0 - YMixture_[0] - YMixture_[1]; + // TODO: Re-calculate mass fractions - // Add to cummulative mass transfer - forAll (YGas_, i) - { - label id = td.cloud().composition().gasGlobalIds()[i]; - // Volatiles mass transfer - scalar volatileMass = YGas_[i]*dMassTot; - dMassMT[id] += volatileMass; - } - */ } diff --git a/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcel.H b/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcel.H index 763f1e2a6c1..194ffc2d386 100644 --- a/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcel.H +++ b/src/lagrangian/intermediate/parcels/Templates/ReactingParcel/ReactingParcel.H @@ -175,6 +175,7 @@ protected: TrackData& td, const scalar dt, const scalar T, + scalarField& X, scalarList& dMassMT ); diff --git a/src/lagrangian/intermediate/phaseProperties/phaseProperties/phasePropertiesIO.C b/src/lagrangian/intermediate/phaseProperties/phaseProperties/phasePropertiesIO.C index 34641fe4d4b..192136ed8d0 100644 --- a/src/lagrangian/intermediate/phaseProperties/phaseProperties/phasePropertiesIO.C +++ b/src/lagrangian/intermediate/phaseProperties/phaseProperties/phasePropertiesIO.C @@ -29,7 +29,6 @@ License // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // - Foam::phaseProperties::phaseProperties(Istream& is) : phase_(UNKNOWN), diff --git a/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/CompositionModel/CompositionModel.C b/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/CompositionModel/CompositionModel.C index 5d1de160e8d..df898464fda 100644 --- a/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/CompositionModel/CompositionModel.C +++ b/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/CompositionModel/CompositionModel.C @@ -241,6 +241,56 @@ const Foam::scalarField& Foam::CompositionModel<CloudType>::Y0 } +template<class CloudType> +Foam::scalarField Foam::CompositionModel<CloudType>::X +( + const label phaseI, + const scalarField& Y +) const +{ + const phaseProperties& props = phaseProps_[phaseI]; + scalarField X(Y.size(), 0.0); + scalar WInv = 0.0; + switch (props.phase()) + { + case phaseProperties::GAS: + { + forAll(Y, i) + { + label gid = props.globalIds()[i]; + WInv += Y[i]/this->gases()[gid].W(); + X[i] = Y[i]/this->gases()[gid].W(); + } + break; + } + case phaseProperties::LIQUID: + { + forAll(Y, i) + { + label gid = props.globalIds()[i]; + WInv += Y[i]/this->liquids().properties()[gid].W(); + X[i] += Y[i]/this->liquids().properties()[gid].W(); + } + break; + } + default: + { + FatalErrorIn + ( + "Foam::scalarField Foam::CompositionModel<CloudType>::X\n" + "(\n" + " const label phaseI,\n" + " const scalarField Y\n" + ") const" + ) << "Only possible to convert gas and liquid mass fractions" + << nl << abort(FatalError); + } + } + + return X/WInv; +} + + template<class CloudType> Foam::scalar Foam::CompositionModel<CloudType>::H ( diff --git a/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/CompositionModel/CompositionModel.H b/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/CompositionModel/CompositionModel.H index 9dd21529c89..5be0e2c1b92 100644 --- a/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/CompositionModel/CompositionModel.H +++ b/src/lagrangian/intermediate/submodels/Reacting/CompositionModel/CompositionModel/CompositionModel.H @@ -187,6 +187,14 @@ public: //- Return the list of phase phaseI mass fractions const scalarField& Y0(const label phaseI) const; + //- Return the list of phase phaseI volume fractions fractions + // based on supplied mass fractions Y + scalarField X + ( + const label phaseI, + const scalarField& Y + ) const; + // Mixture properties diff --git a/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/NoPhaseChange/NoPhaseChange.C b/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/NoPhaseChange/NoPhaseChange.C index 791512789c4..4029aa05708 100644 --- a/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/NoPhaseChange/NoPhaseChange.C +++ b/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/NoPhaseChange/NoPhaseChange.C @@ -61,8 +61,8 @@ Foam::scalar Foam::NoPhaseChange<CloudType>::calculate const scalar, const scalar, const scalarField&, - const scalarField&, - const vector, + const scalarList&, + const vector&, const scalar, const scalar, const scalar, diff --git a/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/NoPhaseChange/NoPhaseChange.H b/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/NoPhaseChange/NoPhaseChange.H index 07341719db5..74b065b75a8 100644 --- a/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/NoPhaseChange/NoPhaseChange.H +++ b/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/NoPhaseChange/NoPhaseChange.H @@ -79,8 +79,8 @@ public: const scalar T, const scalar d, const scalarField& Xc, - const scalarField& dMassMT, - const vector Ur, + const scalarList& dMassMT, + const vector& Ur, const scalar Tc, const scalar pc, const scalar nuc, diff --git a/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/PhaseChangeModel/PhaseChangeModel.H b/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/PhaseChangeModel/PhaseChangeModel.H index b06506d8281..1a97370529e 100644 --- a/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/PhaseChangeModel/PhaseChangeModel.H +++ b/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/PhaseChangeModel/PhaseChangeModel.H @@ -138,8 +138,8 @@ public: const scalar T, const scalar d, const scalarField& Xc, - const scalarField& dMassMT, - const vector Ur, + const scalarList& dMassMT, + const vector& Ur, const scalar Tc, const scalar pc, const scalar nuc, diff --git a/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/liquidEvaporation/liquidEvaporation.C b/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/liquidEvaporation/liquidEvaporation.C index 792ae89c640..8bba9d784d1 100644 --- a/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/liquidEvaporation/liquidEvaporation.C +++ b/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/liquidEvaporation/liquidEvaporation.C @@ -146,14 +146,16 @@ Foam::scalar Foam::liquidEvaporation<CloudType>::calculate const scalar T, const scalar d, const scalarField& Xc, - const scalarField& dMassMT, - const vector Ur + const scalarList& dMassMT, + const vector& Ur const scalar Tc, const scalar pc, const scalar nuc const scalar dt, ) const { + scalar dMassTot = 0.0; + if (T < Tvap_) { // not reached temperature threshold @@ -192,9 +194,13 @@ Foam::scalar Foam::liquidEvaporation<CloudType>::calculate scalar Ni = max(kc*(Cs - Cinf), 0.0); // mass transfer - dMassMT[i] -= Ni*A*liquids_.properies()[i].W()*dt; + scalar dm = Ni*A*liquids_.properies()[i].W()*dt; + dMassMT[i] -= dm; + dMassTot += dm; } } + + return dMassTot; } diff --git a/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/liquidEvaporation/liquidEvaporation.H b/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/liquidEvaporation/liquidEvaporation.H index efc97fecabf..a7e2325f17b 100644 --- a/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/liquidEvaporation/liquidEvaporation.H +++ b/src/lagrangian/intermediate/submodels/Reacting/PhaseChangeModel/liquidEvaporation/liquidEvaporation.H @@ -111,8 +111,8 @@ public: const scalar T, const scalar d, const scalarField& Xc, - const scalarField& dMassMT, - const vector Ur, + const scalarList& dMassMT, + const vector& Ur, const scalar Tc, const scalar pc, const scalar nuc, -- GitLab