From bfdf807537b54fe255e7df8641e4caad60a34c4b Mon Sep 17 00:00:00 2001 From: ignis Date: Mon, 10 Oct 2016 14:59:18 +0900 Subject: [PATCH] canteraTransport species diffusivity and dummy for the other transport models --- .../const/constAnIsoSolidTransport.H | 19 +++++++++++ .../transport/const/constIsoSolidTransport.H | 19 +++++++++++ .../exponential/exponentialSolidTransport.H | 19 +++++++++++ .../polynomial/polynomialSolidTransport.H | 19 +++++++++++ .../transport/cantera/canteraTransport.C | 34 +++++++++++++++++-- .../transport/cantera/canteraTransport.H | 16 ++++++++- .../transport/cantera/canteraTransportI.H | 22 ++++++++++++ .../specie/transport/const/constTransport.H | 18 +++++++++- .../polynomial/polynomialTransport.H | 18 +++++++++- .../sutherland/sutherlandTransport.H | 18 +++++++++- 10 files changed, 195 insertions(+), 7 deletions(-) diff --git a/src/thermophysicalModels/solidSpecie/transport/const/constAnIsoSolidTransport.H b/src/thermophysicalModels/solidSpecie/transport/const/constAnIsoSolidTransport.H index 31af54fe..06c9fc31 100644 --- a/src/thermophysicalModels/solidSpecie/transport/const/constAnIsoSolidTransport.H +++ b/src/thermophysicalModels/solidSpecie/transport/const/constAnIsoSolidTransport.H @@ -75,6 +75,9 @@ class constAnIsoSolidTransport //- Constant anisotropic thermal conductivity. vector kappa_; + //- Diffusivity cache + mutable scalar Dcache_; + // Private Member Functions @@ -126,6 +129,22 @@ public: //- Thermal diffusivity of enthalpy [kg/ms] inline vector alphah(const scalar p, const scalar T) const; + // Species diffusivity + void calculateDiffusivities(const scalar p, const scalar T) const + {Dcache_ = mu(p,T)/Thermo::rho(p,T);} + + // Species diffusivity + inline scalar D(const label i) const + {return Dcache_;} + + // Species mobility + inline void muk(const scalar p, const scalar T) const + {return D(p,T) * Thermo::z() * Thermo::e / Thermo::k / T;} + + // Species mobility + inline scalar muk(const label i) const + {return 0.0;} + //- Write to Ostream void write(Ostream& os) const; diff --git a/src/thermophysicalModels/solidSpecie/transport/const/constIsoSolidTransport.H b/src/thermophysicalModels/solidSpecie/transport/const/constIsoSolidTransport.H index d9c47ec4..a996a125 100644 --- a/src/thermophysicalModels/solidSpecie/transport/const/constIsoSolidTransport.H +++ b/src/thermophysicalModels/solidSpecie/transport/const/constIsoSolidTransport.H @@ -76,6 +76,9 @@ class constIsoSolidTransport //- Constant isotropic thermal conductivity scalar kappa_; + //- Diffusivity cache + mutable scalar Dcache_; + // Private Member Functions @@ -127,6 +130,22 @@ public: //- Thermal diffusivity of enthalpy [kg/ms] inline scalar alphah(const scalar p, const scalar T) const; + // Species diffusivity + void calculateDiffusivities(const scalar p, const scalar T) const + {Dcache_ = mu(p,T)/Thermo::rho(p,T);} + + // Species diffusivity + inline scalar D(const label i) const + {return Dcache_;} + + // Species mobility + inline void muk(const scalar p, const scalar T) const + {return D(p,T) * Thermo::z() * Thermo::e / Thermo::k / T;} + + // Species mobility + inline scalar muk(const label i) const + {return 0.0;} + //- Write to Ostream void write(Ostream& os) const; diff --git a/src/thermophysicalModels/solidSpecie/transport/exponential/exponentialSolidTransport.H b/src/thermophysicalModels/solidSpecie/transport/exponential/exponentialSolidTransport.H index 1ea9ffdc..c33f52a3 100644 --- a/src/thermophysicalModels/solidSpecie/transport/exponential/exponentialSolidTransport.H +++ b/src/thermophysicalModels/solidSpecie/transport/exponential/exponentialSolidTransport.H @@ -79,6 +79,9 @@ class exponentialSolidTransport //- Reference temperature scalar Tref_; + //- Diffusivity cache + mutable scalar Dcache_; + // Private Member Functions @@ -136,6 +139,22 @@ public: //- Thermal diffusivity of enthalpy [kg/ms] inline scalar alphah(const scalar p, const scalar T) const; + // Species diffusivity + void calculateDiffusivities(const scalar p, const scalar T) const + {Dcache_ = mu(p,T)/Thermo::rho(p,T);} + + // Species diffusivity + inline scalar D(const label i) const + {return Dcache_;} + + // Species mobility + inline void muk(const scalar p, const scalar T) const + {return D(p,T) * Thermo::z() * Thermo::e / Thermo::k / T;} + + // Species mobility + inline scalar muk(const label i) const + {return 0.0;} + //- Write to Ostream void write(Ostream& os) const; diff --git a/src/thermophysicalModels/solidSpecie/transport/polynomial/polynomialSolidTransport.H b/src/thermophysicalModels/solidSpecie/transport/polynomial/polynomialSolidTransport.H index 90a9e52f..5e77d94b 100644 --- a/src/thermophysicalModels/solidSpecie/transport/polynomial/polynomialSolidTransport.H +++ b/src/thermophysicalModels/solidSpecie/transport/polynomial/polynomialSolidTransport.H @@ -98,6 +98,9 @@ class polynomialSolidTransport // Note: input in [W/m/K] Polynomial kappaCoeffs_; + //- Diffusivity cache + mutable scalar Dcache_; + // Private Member Functions @@ -165,6 +168,22 @@ public: //- Thermal diffusivity of enthalpy [kg/ms] inline scalar alphah(const scalar p, const scalar T) const; + // Species diffusivity + void calculateDiffusivities(const scalar p, const scalar T) const + {Dcache_ = mu(p,T)/Thermo::rho(p,T);} + + // Species diffusivity + inline scalar D(const label i) const + {return Dcache_;} + + // Species mobility + inline void muk(const scalar p, const scalar T) const + {return D(p,T) * Thermo::z() * Thermo::e / Thermo::k / T;} + + // Species mobility + inline scalar muk(const label i) const + {return 0.0;} + //- Write to Ostream void write(Ostream& os) const; diff --git a/src/thermophysicalModels/specie/transport/cantera/canteraTransport.C b/src/thermophysicalModels/specie/transport/cantera/canteraTransport.C index 987ed6ec..6f4593e5 100644 --- a/src/thermophysicalModels/specie/transport/cantera/canteraTransport.C +++ b/src/thermophysicalModels/specie/transport/cantera/canteraTransport.C @@ -38,6 +38,7 @@ typename Foam::canteraTransport::canteraManager Foam::canteraTransport Foam::canteraTransport::canteraManager::canteraManager() : + ready_ (false), gas_ (NULL), tr_ (NULL), nCanteraSp_ (0) @@ -47,6 +48,7 @@ Foam::canteraTransport::canteraManager::canteraManager() gas_ = new Cantera::IdealGasMix("./cantera-transport.cti", "gas"); tr_ = Cantera::newTransportMgr("Mix", gas_); nCanteraSp_ = gas_->nSpecies(); + ready_ = true; } catch (Cantera::CanteraError e) { @@ -67,7 +69,8 @@ Foam::canteraTransport::canteraManager::~canteraManager() Foam::canteraTransport::canteraTransport(Istream& is) : Thermo(is), - X_(cm_.gas()->nSpecies()) + temp_(cm_.nCanteraSp()), + X_(cm_.nCanteraSp(), 0.0) { is.check("canteraTransport::canteraTransport(Istream&)"); } @@ -77,7 +80,8 @@ template Foam::canteraTransport::canteraTransport(const dictionary& dict) : Thermo(dict), - X_(cm_.gas()->nSpecies(), 0.0) + temp_(cm_.nCanteraSp()), + X_(cm_.nCanteraSp(), 0.0) { label si = cm_.gas()->speciesIndex(this->specie::name()); if (si >= 0) X_[si] = this->nMoles(); @@ -134,7 +138,7 @@ Foam::scalar Foam::canteraTransport::mu template -inline Foam::scalar Foam::canteraTransport::kappa +Foam::scalar Foam::canteraTransport::kappa ( const scalar p, const scalar T ) const @@ -145,4 +149,28 @@ inline Foam::scalar Foam::canteraTransport::kappa } +template +void Foam::canteraTransport::calculateDiffusivities +( + const scalar p, const scalar T + ) const +{ + cm_.gas()->setState_TPX(T, p, X_.cdata()); + cm_.tr()->getMixDiffCoeffsMass(temp_.data()); + return; +} + + +template +void Foam::canteraTransport::muk +( + const scalar p, const scalar T + ) const +{ + cm_.gas()->setState_TPX(T, p, X_.cdata()); + cm_.tr()->getMixDiffCoeffsMass(temp_.data()); + return; +} + + // ************************************************************************* // diff --git a/src/thermophysicalModels/specie/transport/cantera/canteraTransport.H b/src/thermophysicalModels/specie/transport/cantera/canteraTransport.H index 4b1bc912..d826b73f 100644 --- a/src/thermophysicalModels/specie/transport/cantera/canteraTransport.H +++ b/src/thermophysicalModels/specie/transport/cantera/canteraTransport.H @@ -110,6 +110,8 @@ class canteraTransport class canteraManager { + bool ready_; + Cantera::IdealGasMix *gas_; Cantera::Transport *tr_; label nCanteraSp_; @@ -128,6 +130,8 @@ class canteraTransport scalarField X_; + mutable scalarField temp_; + static canteraManager cm_; @@ -190,8 +194,18 @@ public: //- Thermal diffusivity of enthalpy [kg/ms] inline scalar alphah(const scalar p, const scalar T) const; + // Species diffusivity - //inline scalar D(const scalar p, const scalar T) const; + void calculateDiffusivities(const scalar p, const scalar T) const; + + // Species diffusivity + inline scalar D(const label i) const; + + // Species mobility + void muk(const scalar p, const scalar T) const; + + // Species mobility + inline scalar muk(const label i) const; //- Write to Ostream void write(Ostream& os) const; diff --git a/src/thermophysicalModels/specie/transport/cantera/canteraTransportI.H b/src/thermophysicalModels/specie/transport/cantera/canteraTransportI.H index e3cbf4a4..87600142 100644 --- a/src/thermophysicalModels/specie/transport/cantera/canteraTransportI.H +++ b/src/thermophysicalModels/specie/transport/cantera/canteraTransportI.H @@ -39,6 +39,7 @@ inline Foam::canteraTransport::canteraTransport ) : Thermo(t), + temp_(cm_.nCanteraSp()), X_(X) {} @@ -52,6 +53,7 @@ inline Foam::canteraTransport::canteraTransport ) : Thermo(t), + temp_(cm_.nCanteraSp()), X_(cm_.nCanteraSp()) { } @@ -65,6 +67,7 @@ inline Foam::canteraTransport::canteraTransport ) : Thermo(name, st), + temp_(cm_.nCanteraSp()), X_(st.X_) {} @@ -122,6 +125,25 @@ inline Foam::scalar Foam::canteraTransport::alphah } +template +inline Foam::scalar Foam::canteraTransport::D +( + const label i + ) const +{ + return temp_[i]; +} + + +template +inline Foam::scalar Foam::canteraTransport::muk +( + const label i + ) const +{ + return temp_[i]; +} + // * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * // template diff --git a/src/thermophysicalModels/specie/transport/const/constTransport.H b/src/thermophysicalModels/specie/transport/const/constTransport.H index 65cd3c8a..1e403107 100644 --- a/src/thermophysicalModels/specie/transport/const/constTransport.H +++ b/src/thermophysicalModels/specie/transport/const/constTransport.H @@ -100,6 +100,9 @@ class constTransport //- Reciprocal Prandtl Number [] scalar rPr_; + //- Diffusivity cache + mutable scalar Dcache_; + // Private Member Functions @@ -153,7 +156,20 @@ public: inline scalar alphah(const scalar p, const scalar T) const; // Species diffusivity - //inline scalar D(const scalar p, const scalar T) const; + void calculateDiffusivities(const scalar p, const scalar T) const + {Dcache_ = mu(p,T)/Thermo::rho(p,T);} + + // Species diffusivity + inline scalar D(const label i) const + {return Dcache_;} + + // Species mobility + inline void muk(const scalar p, const scalar T) const + {return D(p,T) * Thermo::z() * Thermo::e / Thermo::k / T;} + + // Species mobility + inline scalar muk(const label i) const + {return 0.0;} //- Write to Ostream void write(Ostream& os) const; diff --git a/src/thermophysicalModels/specie/transport/polynomial/polynomialTransport.H b/src/thermophysicalModels/specie/transport/polynomial/polynomialTransport.H index 85ec1672..9fc27f02 100644 --- a/src/thermophysicalModels/specie/transport/polynomial/polynomialTransport.H +++ b/src/thermophysicalModels/specie/transport/polynomial/polynomialTransport.H @@ -102,6 +102,9 @@ class polynomialTransport // Note: input in [W/m/K], but internally uses [W/m/K/kmol] Polynomial kappaCoeffs_; + //- Diffusivity cache + mutable scalar Dcache_; + // Private Member Functions @@ -158,7 +161,20 @@ public: inline scalar alphah(const scalar p, const scalar T) const; // Species diffusivity - //inline scalar D(const scalar p, const scalar T) const; + void calculateDiffusivities(const scalar p, const scalar T) const + {Dcache_ = mu(p,T)/Thermo::rho(p,T);} + + // Species diffusivity + inline scalar D(const label i) const + {return Dcache_;} + + // Species mobility + inline void muk(const scalar p, const scalar T) const + {return D(p,T) * Thermo::z() * Thermo::e / Thermo::k / T;} + + // Species mobility + inline scalar muk(const label i) const + {return 0.0;} //- Write to Ostream void write(Ostream& os) const; diff --git a/src/thermophysicalModels/specie/transport/sutherland/sutherlandTransport.H b/src/thermophysicalModels/specie/transport/sutherland/sutherlandTransport.H index 25973ac1..8daca63d 100644 --- a/src/thermophysicalModels/specie/transport/sutherland/sutherlandTransport.H +++ b/src/thermophysicalModels/specie/transport/sutherland/sutherlandTransport.H @@ -103,6 +103,9 @@ class sutherlandTransport // Sutherland's coefficients scalar As_, Ts_; + //- Diffusivity cache + mutable scalar Dcache_; + // Private Member Functions @@ -172,7 +175,20 @@ public: inline scalar alphah(const scalar p, const scalar T) const; // Species diffusivity - //inline scalar D(const scalar p, const scalar T) const; + void calculateDiffusivities(const scalar p, const scalar T) const + {Dcache_ = mu(p,T)/Thermo::rho(p,T);} + + // Species diffusivity + inline scalar D(const label i) const + {return Dcache_;} + + // Species mobility + inline void muk(const scalar p, const scalar T) const + {return D(p,T) * Thermo::z() * Thermo::e / Thermo::k / T;} + + // Species mobility + inline scalar muk(const label i) const + {return 0.0;} //- Write to Ostream void write(Ostream& os) const;