diff --git a/src/thermophysicalModels/specie/equationOfState/icoPolynomial/icoPolynomial.C b/src/thermophysicalModels/specie/equationOfState/icoPolynomial/icoPolynomial.C index 9fd15c2986..fcea63c7bb 100644 --- a/src/thermophysicalModels/specie/equationOfState/icoPolynomial/icoPolynomial.C +++ b/src/thermophysicalModels/specie/equationOfState/icoPolynomial/icoPolynomial.C @@ -39,7 +39,9 @@ icoPolynomial::icoPolynomial(Istream& is) : specie(is), rhoPolynomial_("rhoPolynomial", is) -{} +{ + rhoPolynomial_ *= this->W(); +} // * * * * * * * * * * * * * * * Ostream Operator * * * * * * * * * * * * * // @@ -47,7 +49,8 @@ icoPolynomial::icoPolynomial(Istream& is) template Ostream& operator<<(Ostream& os, const icoPolynomial& ip) { - os << static_cast(ip); + os << static_cast(ip) << tab + << "rhoPolynomial" << tab << ip.rhoPolynomial_/ip.W(); os.check ( diff --git a/src/thermophysicalModels/specie/equationOfState/icoPolynomial/icoPolynomial.H b/src/thermophysicalModels/specie/equationOfState/icoPolynomial/icoPolynomial.H index 3c66e03d42..6dbea13cd7 100644 --- a/src/thermophysicalModels/specie/equationOfState/icoPolynomial/icoPolynomial.H +++ b/src/thermophysicalModels/specie/equationOfState/icoPolynomial/icoPolynomial.H @@ -99,7 +99,8 @@ class icoPolynomial { // Private data - //- Density [kg/m^3] + //- Density + // Note: input in [kg/m3], but internally uses [kg/m3/kmol] Polynomial rhoPolynomial_; @@ -117,6 +118,9 @@ public: //- Construct from Istream icoPolynomial(Istream&); + //- Construct as copy + inline icoPolynomial(const icoPolynomial&); + //- Construct as named copy inline icoPolynomial(const word& name, const icoPolynomial&); @@ -141,6 +145,7 @@ public: // Member operators + inline icoPolynomial& operator=(const icoPolynomial&); inline void operator+=(const icoPolynomial&); inline void operator-=(const icoPolynomial&); diff --git a/src/thermophysicalModels/specie/equationOfState/icoPolynomial/icoPolynomialI.H b/src/thermophysicalModels/specie/equationOfState/icoPolynomial/icoPolynomialI.H index d174c57192..d85fd4a2a6 100644 --- a/src/thermophysicalModels/specie/equationOfState/icoPolynomial/icoPolynomialI.H +++ b/src/thermophysicalModels/specie/equationOfState/icoPolynomial/icoPolynomialI.H @@ -42,6 +42,17 @@ inline Foam::icoPolynomial::icoPolynomial // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // +template +inline Foam::icoPolynomial::icoPolynomial +( + const icoPolynomial& ip +) +: + specie(ip), + rhoPolynomial_(ip.rhoPolynomial_) +{} + + template inline Foam::icoPolynomial::icoPolynomial ( @@ -78,7 +89,7 @@ Foam::icoPolynomial::New(Istream& is) template inline Foam::scalar Foam::icoPolynomial::rho(scalar, scalar T) const { - return rhoPolynomial_.evaluate(T); + return rhoPolynomial_.evaluate(T)/this->W(); } @@ -98,6 +109,20 @@ inline Foam::scalar Foam::icoPolynomial::Z(scalar, scalar) const // * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * // +template +inline Foam::icoPolynomial& Foam::icoPolynomial::operator= +( + const icoPolynomial& ip +) +{ + specie::operator=(ip); + + rhoPolynomial_ = ip.rhoPolynomial_; + + return *this; +} + + template inline void Foam::icoPolynomial::operator+= ( @@ -122,6 +147,7 @@ inline void Foam::icoPolynomial::operator-= ) { scalar molr1 = this->nMoles(); + specie::operator-=(ip); molr1 /= this->nMoles(); @@ -147,15 +173,15 @@ Foam::icoPolynomial Foam::operator+ const icoPolynomial& ip2 ) { - scalar mol1 = ip1.nMoles(); - scalar mol2 = ip2.nMoles(); - scalar nMoles = mol1 + mol2; + scalar nMoles = ip1.nMoles() + ip2.nMoles(); + scalar molr1 = ip1.nMoles()/nMoles; + scalar molr2 = ip2.nMoles()/nMoles; return icoPolynomial ( static_cast(ip1) + static_cast(ip2), - (mol1/nMoles)*ip1.rhoPolynomial_ + (mol2/nMoles)*ip2.rhoPolynomial_ + molr1*ip1.rhoPolynomial_ + molr2*ip2.rhoPolynomial_ ); } @@ -167,15 +193,15 @@ Foam::icoPolynomial Foam::operator- const icoPolynomial& ip2 ) { - scalar mol1 = ip1.nMoles(); - scalar mol2 = ip2.nMoles(); - scalar nMoles = mol1 + mol2; + scalar nMoles = ip1.nMoles() + ip2.nMoles(); + scalar molr1 = ip1.nMoles()/nMoles; + scalar molr2 = ip2.nMoles()/nMoles; return icoPolynomial ( static_cast(ip1) - static_cast(ip2), - (mol1/nMoles)*ip1.rhoPolynomial_ - (mol2/nMoles)*ip2.rhoPolynomial_ + molr1*ip1.rhoPolynomial_ - molr2*ip2.rhoPolynomial_ ); } diff --git a/src/thermophysicalModels/specie/thermo/hPolynomial/hPolynomialThermo.C b/src/thermophysicalModels/specie/thermo/hPolynomial/hPolynomialThermo.C index 497dc7c757..95504e7df4 100644 --- a/src/thermophysicalModels/specie/thermo/hPolynomial/hPolynomialThermo.C +++ b/src/thermophysicalModels/specie/thermo/hPolynomial/hPolynomialThermo.C @@ -39,11 +39,21 @@ Foam::hPolynomialThermo::hPolynomialThermo Hf_(readScalar(is)), Sf_(readScalar(is)), cpPolynomial_("cpPolynomial", is), - dhPolynomial_(cpPolynomial_.integrate()), - dsPolynomial_(cpPolynomial_.integrateMinus1()) + hPolynomial_(), + sPolynomial_() { - // Offset dh poly so that it is relative to the enthalpy at Tstd - dhPolynomial_[0] -= dhPolynomial_.evaluate(specie::Tstd); + Hf_ *= this->W(); + Sf_ *= this->W(); + cpPolynomial_ *= this->W(); + + hPolynomial_ = cpPolynomial_.integrate(); + sPolynomial_ = cpPolynomial_.integrateMinus1(); + + // Offset h poly so that it is relative to the enthalpy at Tstd + hPolynomial_[0] += Hf_ - hPolynomial_.evaluate(specie::Tstd); + + // Offset s poly so that it is relative to the entropy at Tstd + sPolynomial_[0] += Sf_ - sPolynomial_.evaluate(specie::Tstd); } @@ -57,15 +67,17 @@ Foam::Ostream& Foam::operator<< ) { os << static_cast(pt) << tab - << pt.Hf_ << tab + << pt.Hf_/pt.W() << tab << pt.Sf_ << tab - << pt.cpPolynomial_ << tab - << pt.dhPolynomial_ << tab - << pt.dsPolynomial; + << "cpPolynomial" << tab << pt.cpPolynomial_/pt.W(); os.check ( - "operator<<(Ostream& os, const hPolynomialThermo& pt)" + "operator<<" + "(" + "Ostream&, " + "const hPolynomialThermo&" + ")" ); return os; diff --git a/src/thermophysicalModels/specie/thermo/hPolynomial/hPolynomialThermo.H b/src/thermophysicalModels/specie/thermo/hPolynomial/hPolynomialThermo.H index a15d05adfe..52b4482fa9 100644 --- a/src/thermophysicalModels/specie/thermo/hPolynomial/hPolynomialThermo.H +++ b/src/thermophysicalModels/specie/thermo/hPolynomial/hPolynomialThermo.H @@ -100,20 +100,22 @@ class hPolynomialThermo { // Private data - //- Heat of formation [J/kg] + //- Heat of formation + // Note: input in [J/kg], but internally uses [J/kmol] scalar Hf_; - //- Standard entropy [J/(kg.K)] + //- Standard entropy + // Note: input in [J/kg/K], but internally uses [J/kmol/K] scalar Sf_; //- Specific heat at constant pressure [J/(kg.K)] Polynomial cpPolynomial_; //- Enthalpy - derived from cp [J/kg] - relative to Tstd - typename Polynomial::intPolyType dhPolynomial_; + typename Polynomial::intPolyType hPolynomial_; - //- Entropy - derived from cp [J/(kg.K)] - Polynomial dsPolynomial_; + //- Entropy - derived from cp [J/(kg.K)] - relative to Tstd + Polynomial sPolynomial_; // Private member functions @@ -125,8 +127,8 @@ class hPolynomialThermo const scalar Hf, const scalar Sf, const Polynomial& cpPoly, - const typename Polynomial::intPolyType& dhPoly, - const Polynomial& dsPoly + const typename Polynomial::intPolyType& hPoly, + const Polynomial& sPoly ); @@ -137,6 +139,9 @@ public: //- Construct from dictionary hPolynomialThermo(Istream& is); + //- Construct as copy + inline hPolynomialThermo(const hPolynomialThermo&); + //- Construct as a named copy inline hPolynomialThermo(const word&, const hPolynomialThermo&); @@ -161,8 +166,10 @@ public: // Member operators + inline hPolynomialThermo& operator=(const hPolynomialThermo&); inline void operator+=(const hPolynomialThermo&); inline void operator-=(const hPolynomialThermo&); + inline void operator*=(const scalar); // Friend operators diff --git a/src/thermophysicalModels/specie/thermo/hPolynomial/hPolynomialThermoI.H b/src/thermophysicalModels/specie/thermo/hPolynomial/hPolynomialThermoI.H index 21e2171ec0..9714724955 100644 --- a/src/thermophysicalModels/specie/thermo/hPolynomial/hPolynomialThermoI.H +++ b/src/thermophysicalModels/specie/thermo/hPolynomial/hPolynomialThermoI.H @@ -35,21 +35,36 @@ inline Foam::hPolynomialThermo::hPolynomialThermo const scalar Hf, const scalar Sf, const Polynomial& cpPoly, - const typename Polynomial::intPolyType& dhPoly, - const Polynomial& dsPoly + const typename Polynomial::intPolyType& hPoly, + const Polynomial& sPoly ) : EquationOfState(pt), Hf_(Hf), Sf_(Sf), cpPolynomial_(cpPoly), - dhPolynomial_(dhPoly), - dsPolynomial_(dsPoly) + hPolynomial_(hPoly), + sPolynomial_(sPoly) {} // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // +template +inline Foam::hPolynomialThermo::hPolynomialThermo +( + const hPolynomialThermo& pt +) +: + EquationOfState(pt), + Hf_(pt.Hf_), + Sf_(pt.Sf_), + cpPolynomial_(pt.cpPolynomial_), + hPolynomial_(pt.hPolynomial_), + sPolynomial_(pt.sPolynomial_) +{} + + template inline Foam::hPolynomialThermo::hPolynomialThermo ( @@ -61,8 +76,8 @@ inline Foam::hPolynomialThermo::hPolynomialThermo Hf_(pt.Hf_), Sf_(pt.Sf_), cpPolynomial_(pt.cpPolynomial_), - dhPolynomial_(pt.dhPolynomial_), - dsPolynomial_(pt.dsPolynomial_) + hPolynomial_(pt.hPolynomial_), + sPolynomial_(pt.sPolynomial_) {} @@ -74,7 +89,7 @@ inline Foam::scalar Foam::hPolynomialThermo::cp const scalar T ) const { - return cpPolynomial_.evaluate(T)*this->W(); + return cpPolynomial_.evaluate(T); } @@ -84,7 +99,7 @@ inline Foam::scalar Foam::hPolynomialThermo::h const scalar T ) const { - return (dhPolynomial_.evaluate(T) + Hf_)*this->W(); + return hPolynomial_.evaluate(T); } @@ -94,7 +109,7 @@ inline Foam::scalar Foam::hPolynomialThermo::hs const scalar T ) const { - return dhPolynomial_.evaluate(T)*this->W(); + return h(T) - hc(); } @@ -102,7 +117,7 @@ template inline Foam::scalar Foam::hPolynomialThermo::hc() const { - return Hf_*this->W(); + return Hf_; } @@ -112,12 +127,31 @@ inline Foam::scalar Foam::hPolynomialThermo::s const scalar T ) const { - return (dsPolynomial_.evaluate(T) + Sf_)*this->W(); + return sPolynomial_.evaluate(T); } // * * * * * * * * * * * * * * * Member Operators * * * * * * * * * * * * * // +template +inline Foam::hPolynomialThermo& +Foam::hPolynomialThermo::operator= +( + const hPolynomialThermo& pt +) +{ + EquationOfState::operator=(pt); + + Hf_ = pt.Hf_; + Sf_ = pt.Sf_; + cpPolynomial_ = pt.cpPolynomial_; + hPolynomial_ = pt.hPolynomial_; + sPolynomial_ = pt.sPolynomial_; + + return *this; +} + + template inline void Foam::hPolynomialThermo::operator+= ( @@ -134,8 +168,8 @@ inline void Foam::hPolynomialThermo::operator+= Hf_ = molr1*Hf_ + molr2*pt.Hf_; Sf_ = molr1*Sf_ + molr2*pt.Sf_; cpPolynomial_ = molr1*cpPolynomial_ + molr2*pt.cpPolynomial_; - dhPolynomial_ = molr1*dhPolynomial_ + molr2*pt.dhPolynomial_; - dsPolynomial_ = molr1*dsPolynomial_ + molr2*pt.dsPolynomial_; + hPolynomial_ = molr1*hPolynomial_ + molr2*pt.hPolynomial_; + sPolynomial_ = molr1*sPolynomial_ + molr2*pt.sPolynomial_; } @@ -155,8 +189,18 @@ inline void Foam::hPolynomialThermo::operator-= Hf_ = molr1*Hf_ - molr2*pt.Hf_; Sf_ = molr1*Sf_ - molr2*pt.Sf_; cpPolynomial_ = molr1*cpPolynomial_ - molr2*pt.cpPolynomial_; - dhPolynomial_ = molr1*dhPolynomial_ - molr2*pt.dhPolynomial_; - dsPolynomial_ = molr1*dsPolynomial_ - molr2*pt.dsPolynomial_; + hPolynomial_ = molr1*hPolynomial_ - molr2*pt.hPolynomial_; + sPolynomial_ = molr1*sPolynomial_ - molr2*pt.sPolynomial_; +} + + +template +inline void Foam::hPolynomialThermo::operator*= +( + const scalar s +) +{ + EquationOfState::operator*=(s); } @@ -169,22 +213,20 @@ inline Foam::hPolynomialThermo Foam::operator+ const hPolynomialThermo& pt2 ) { - EquationOfState eofs - ( - static_cast(pt1) - + static_cast(pt2) - ); + EquationOfState eofs = pt1; + eofs += pt2; scalar molr1 = pt1.nMoles()/eofs.nMoles(); scalar molr2 = pt2.nMoles()/eofs.nMoles(); + return hPolynomialThermo ( eofs, molr1*pt1.Hf_ + molr2*pt2.Hf_, molr1*pt1.Sf_ + molr2*pt2.Sf_, molr1*pt1.cpPolynomial_ + molr2*pt2.cpPolynomial_, - molr1*pt1.dhPolynomial_ + molr2*pt2.dhPolynomial_, - molr1*pt1.dsPolynomial_ + molr2*pt2.dsPolynomial_ + molr1*pt1.hPolynomial_ + molr2*pt2.hPolynomial_, + molr1*pt1.sPolynomial_ + molr2*pt2.sPolynomial_ ); } @@ -196,22 +238,20 @@ inline Foam::hPolynomialThermo Foam::operator- const hPolynomialThermo& pt2 ) { - EquationOfState eofs - ( - static_cast(pt1) - - static_cast(pt2) - ); + EquationOfState eofs = pt1; + eofs -= pt2; scalar molr1 = pt1.nMoles()/eofs.nMoles(); scalar molr2 = pt2.nMoles()/eofs.nMoles(); + return hPolynomialThermo ( eofs, molr1*pt1.Hf_ - molr2*pt2.Hf_, molr1*pt1.Sf_ - molr2*pt2.Sf_, molr1*pt1.cpPolynomial_ - molr2*pt2.cpPolynomial_, - molr1*pt1.dhPolynomial_ - molr2*pt2.dhPolynomial_, - molr1*pt1.dsPolynomial_ - molr2*pt2.dsPolynomial_ + molr1*pt1.hPolynomial_ - molr2*pt2.hPolynomial_, + molr1*pt1.sPolynomial_ - molr2*pt2.sPolynomial_ ); } @@ -229,8 +269,8 @@ inline Foam::hPolynomialThermo Foam::operator* pt.Hf_, pt.Sf_, pt.cpPolynomial_, - pt.dhPolynomial_, - pt.dsPolynomial_ + pt.hPolynomial_, + pt.sPolynomial_ ); } diff --git a/src/thermophysicalModels/specie/transport/polynomial/polynomialTransport.C b/src/thermophysicalModels/specie/transport/polynomial/polynomialTransport.C index 2744d4a979..0b6e912b0a 100644 --- a/src/thermophysicalModels/specie/transport/polynomial/polynomialTransport.C +++ b/src/thermophysicalModels/specie/transport/polynomial/polynomialTransport.C @@ -35,7 +35,10 @@ Foam::polynomialTransport::polynomialTransport(Istream& is) Thermo(is), muPolynomial_("muPolynomial", is), kappaPolynomial_("kappaPolynomial", is) -{} +{ + muPolynomial_ *= this->W(); + kappaPolynomial_ *= this->W(); +} // * * * * * * * * * * * * * * * IOstream Operators * * * * * * * * * * * * // @@ -47,7 +50,9 @@ Foam::Ostream& Foam::operator<< const polynomialTransport& pt ) { - os << static_cast(pt); + os << static_cast(pt) << tab + << "muPolynomial" << tab << pt.muPolynomial_/pt.W() << tab + << "kappaPolynomial" << tab << pt.kappaPolynomial_/pt.W(); os.check ( diff --git a/src/thermophysicalModels/specie/transport/polynomial/polynomialTransport.H b/src/thermophysicalModels/specie/transport/polynomial/polynomialTransport.H index 3ab3879e64..0e8066f9d4 100644 --- a/src/thermophysicalModels/specie/transport/polynomial/polynomialTransport.H +++ b/src/thermophysicalModels/specie/transport/polynomial/polynomialTransport.H @@ -96,9 +96,11 @@ class polynomialTransport // Private data //- Dynamic viscosity + // Note: input in [Pa.s], but internally uses [Pa.s/kmol] Polynomial muPolynomial_; //- Thermal conductivity + // Note: input in [W/m/K], but internally uses [W/m/K/kmol] Polynomial kappaPolynomial_; @@ -117,6 +119,9 @@ public: // Constructors + //- Construct copy + inline polynomialTransport(const polynomialTransport&); + //- Construct as named copy inline polynomialTransport(const word&, const polynomialTransport&); @@ -148,6 +153,9 @@ public: // Member operators inline polynomialTransport& operator=(const polynomialTransport&); + inline void operator+=(const polynomialTransport&); + inline void operator-=(const polynomialTransport&); + inline void operator*=(const scalar); // Friend operators diff --git a/src/thermophysicalModels/specie/transport/polynomial/polynomialTransportI.H b/src/thermophysicalModels/specie/transport/polynomial/polynomialTransportI.H index 9e6e00e6e3..ba891b0062 100644 --- a/src/thermophysicalModels/specie/transport/polynomial/polynomialTransportI.H +++ b/src/thermophysicalModels/specie/transport/polynomial/polynomialTransportI.H @@ -28,6 +28,18 @@ License // * * * * * * * * * * * * * * * * Constructors * * * * * * * * * * * * * * // +template +inline Foam::polynomialTransport::polynomialTransport +( + const polynomialTransport& pt +) +: + Thermo(pt), + muPolynomial_(pt.muPolynomial_), + kappaPolynomial_(pt.kappaPolynomial_) +{} + + template inline Foam::polynomialTransport::polynomialTransport ( @@ -85,7 +97,7 @@ inline Foam::scalar Foam::polynomialTransport::mu const scalar T ) const { - return muPolynomial_.evaluate(T); + return muPolynomial_.evaluate(T)/this->W(); } @@ -95,7 +107,7 @@ inline Foam::scalar Foam::polynomialTransport::kappa const scalar T ) const { - return kappaPolynomial_.evaluate(T); + return kappaPolynomial_.evaluate(T)/this->W(); } @@ -132,6 +144,52 @@ Foam::polynomialTransport::operator= } +template +inline void Foam::polynomialTransport::operator+= +( + const polynomialTransport& pt +) +{ + scalar molr1 = this->nMoles(); + + Thermo::operator+=(pt); + + molr1 /= this->nMoles(); + scalar molr2 = pt.nMoles()/this->nMoles(); + + muPolynomial_ = molr1*muPolynomial_ + molr2*pt.muPolynomial_; + kappaPolynomial_ = molr1*kappaPolynomial_ + molr2*pt.kappaPolynomial_; +} + + +template +inline void Foam::polynomialTransport::operator-= +( + const polynomialTransport& pt +) +{ + scalar molr1 = this->nMoles(); + + Thermo::operator-=(pt); + + molr1 /= this->nMoles(); + scalar molr2 = pt.nMoles()/this->nMoles(); + + muPolynomial_ = molr1*muPolynomial_ - molr2*pt.muPolynomial_; + kappaPolynomial_ = molr1*kappaPolynomial_ - molr2*pt.kappaPolynomial_; +} + + +template +inline void Foam::polynomialTransport::operator*= +( + const scalar s +) +{ + Thermo::operator*=(s); +} + + // * * * * * * * * * * * * * * * Friend Operators * * * * * * * * * * * * * // template @@ -146,7 +204,6 @@ inline Foam::polynomialTransport Foam::operator+ static_cast(pt1) + static_cast(pt2) ); - scalar molr1 = pt1.nMoles()/t.nMoles(); scalar molr2 = pt2.nMoles()/t.nMoles();