[Thermo] Add simpler constructors for SpeciesThermoInterpType objects

These objects do not need to know the index of the species within the phase, so
the new constructors do not take that as an argument.

For the NASA polynomial constructors, the order of the coefficients arrays in
the new constructors has been modified to match the conventional ordering of the
coefficients as written in thermo database files.
This commit is contained in:
Ray Speth 2015-01-22 00:04:06 +00:00
parent 8d9f59a042
commit 0a3332aa43
17 changed files with 266 additions and 58 deletions

View file

@ -41,6 +41,8 @@ public:
* @param tlow output - Minimum temperature
* @param thigh output - Maximum temperature
* @param pref output - reference pressure (Pa).
* @deprecated Use the constructor which does not require the species index.
* To be removed after Cantera 2.2.
*/
Adsorbate(size_t n, doublereal tlow, doublereal thigh, doublereal pref,
const doublereal* coeffs)
@ -52,6 +54,21 @@ public:
std::copy(coeffs+2, coeffs + 2 + m_nFreqs, m_freq.begin());
}
//! Full Constructor
/*!
* @param tlow output - Minimum temperature
* @param thigh output - Maximum temperature
* @param pref output - reference pressure (Pa).
*/
Adsorbate(double tlow, double thigh, double pref, const double* coeffs)
: SpeciesThermoInterpType(tlow, thigh, pref)
{
m_nFreqs = int(coeffs[0]);
m_be = coeffs[1];
m_freq.resize(m_nFreqs);
std::copy(coeffs+2, coeffs + 2 + m_nFreqs, m_freq.begin());
}
/// Copy Constructor
Adsorbate(const Adsorbate& b) :
m_be(b.m_be) {

View file

@ -63,11 +63,28 @@ public:
* - c[1] = \f$ H_k^o(T_0, p_{ref}) \f$ (J/kmol)
* - c[2] = \f$ S_k^o(T_0, p_{ref}) \f$ (J/kmol K)
* - c[3] = \f$ {Cp}_k^o(T_0, p_{ref}) \f$ (J(kmol K)
* @deprecated Use the constructor which does not take the species index. To
* be removed after Cantera 2.2.
*/
ConstCpPoly(size_t n, doublereal tlow, doublereal thigh,
doublereal pref,
const doublereal* coeffs);
//! Normal constructor
/*!
* @param tlow Minimum temperature
* @param thigh Maximum temperature
* @param pref reference pressure (Pa).
* @param coeffs Vector of coefficients used to set the
* parameters for the standard state for species n.
* There are 4 coefficients for the ConstCpPoly parameterization.
* - c[0] = \f$ T_0 \f$(Kelvin)
* - c[1] = \f$ H_k^o(T_0, p_{ref}) \f$ (J/kmol)
* - c[2] = \f$ S_k^o(T_0, p_{ref}) \f$ (J/kmol K)
* - c[3] = \f$ {Cp}_k^o(T_0, p_{ref}) \f$ (J(kmol K)
*/
ConstCpPoly(double tlow, double thigh, double pref, const double* coeffs);
//! copy constructor
ConstCpPoly(const ConstCpPoly&);

View file

@ -99,10 +99,38 @@ public:
* - coeffs[7] = \f$ \mu^o(T_3) \f$ (J/kmol)
* - ........
* .
* @deprecated Use the constructor which does not require the species index.
* To be removed after Cantera 2.2.
*/
Mu0Poly(size_t n, doublereal tlow, doublereal thigh,
doublereal pref, const doublereal* coeffs);
//! Normal constructor
/*!
* In the constructor, we calculate and store the piecewise linear
* approximation to the thermodynamic functions.
*
* @param tlow Minimum temperature
* @param thigh Maximum temperature
* @param pref reference pressure (Pa).
* @param coeffs Vector of coefficients used to set the
* parameters for the standard state for species n.
* There are \f$ 2+npoints*2 \f$ coefficients, where
* \f$ npoints \f$ are the number of temperature points.
* Their identity is further broken down:
* - coeffs[0] = number of points (integer)
* - coeffs[1] = \f$ h^o(298.15 K) \f$ (J/kmol)
* - coeffs[2] = \f$ T_1 \f$ (Kelvin)
* - coeffs[3] = \f$ \mu^o(T_1) \f$ (J/kmol)
* - coeffs[4] = \f$ T_2 \f$ (Kelvin)
* - coeffs[5] = \f$ \mu^o(T_2) \f$ (J/kmol)
* - coeffs[6] = \f$ T_3 \f$ (Kelvin)
* - coeffs[7] = \f$ \mu^o(T_3) \f$ (J/kmol)
* - ........
* .
*/
Mu0Poly(double tlow, double thigh, double pref, const double* coeffs);
//! Copy constructor
Mu0Poly(const Mu0Poly&);

View file

@ -82,10 +82,22 @@ public:
* @param pref reference pressure (Pa).
* @param coeffs Vector of coefficients used to set the
* parameters for the standard state.
* @deprecated Use the constructor whic hdoes not require the species
* index. To be removed after Cantera 2.2.
*/
Nasa9Poly1(size_t n, doublereal tlow, doublereal thigh, doublereal pref,
const doublereal* coeffs);
//! Normal constructor
/*!
* @param tlow Minimum temperature
* @param thigh Maximum temperature
* @param pref reference pressure (Pa).
* @param coeffs Vector of coefficients used to set the
* parameters for the standard state.
*/
Nasa9Poly1(double tlow, double thigh, double pref, const double* coeffs);
//! copy constructor
/*!
* @param b object to be copied

View file

@ -58,6 +58,8 @@ public:
* @param pref reference pressure (Pa).
* @param coeffs Vector of coefficients used to set the parameters for the
* standard state, in the order [a5,a6,a0,a1,a2,a3,a4]
* @deprecated Use the constructor which does not take species index. To be
* removed after Cantera 2.2.
*/
NasaPoly1(size_t n, doublereal tlow, doublereal thigh, doublereal pref,
const doublereal* coeffs) :
@ -71,6 +73,20 @@ public:
m_coeff[6] = coeffs[1];
}
//! Normal constructor
/*!
* @param tlow Minimum temperature
* @param thigh Maximum temperature
* @param pref reference pressure (Pa).
* @param coeffs Vector of coefficients used to set the parameters for the
* standard state, in the order [a0,a1,a2,a3,a4,a5,a6]
*/
NasaPoly1(double tlow, double thigh, double pref, const double* coeffs)
: SpeciesThermoInterpType(tlow, thigh, pref)
, m_coeff(coeffs, coeffs+7)
{
}
//! copy constructor
/*!
* @param b object to be copied

View file

@ -60,8 +60,10 @@ public:
* @param tlow output - Minimum temperature
* @param thigh output - Maximum temperature
* @param pref output - reference pressure (Pa).
* @param coeffs Vector of coefficients used to set the
* parameters for the standard state.
* @param coeffs Vector of coefficients used to set the parameters for
* the standard state [Tmid, 7 low-T coeffs, 7 high-T coeffs]
* @deprecated Use constructor without species index. To be removed after
* Cantera 2.2.
*/
NasaPoly2(size_t n, doublereal tlow, doublereal thigh, doublereal pref,
const doublereal* coeffs) :
@ -72,6 +74,25 @@ public:
m_coeff(coeffs, coeffs + 15) {
}
//! Full Constructor
/*!
* @param tlow output - Minimum temperature
* @param thigh output - Maximum temperature
* @param pref output - reference pressure (Pa).
* @param coeffs Vector of coefficients used to set the parameters for
* the standard state [Tmid, 7 high-T coeffs, 7 low-T
* coeffs]. This is the coefficient order used in the
* standard NASA format.
*/
NasaPoly2(doublereal tlow, doublereal thigh, doublereal pref,
const doublereal* coeffs) :
SpeciesThermoInterpType(tlow, thigh, pref),
m_midT(coeffs[0]),
mnp_low(tlow, coeffs[0], pref, coeffs + 8),
mnp_high(coeffs[0], thigh, pref, coeffs + 1),
m_coeff(coeffs, coeffs + 15) {
}
//! Copy Constructor
/*!
* @param b object to be copied.

View file

@ -78,6 +78,9 @@ public:
*
* See the class description for the polynomial representation of the
* thermo functions in terms of \f$ A, \dots, G \f$.
*
* @deprecated Use the alternate constructor which does not take the
* species index. To be removed after Cantera 2.2.
*/
ShomatePoly(size_t n, doublereal tlow, doublereal thigh, doublereal pref,
const doublereal* coeffs) :
@ -86,6 +89,23 @@ public:
{
}
//! Normal constructor
/*!
* @param tlow Minimum temperature
* @param thigh Maximum temperature
* @param pref reference pressure (Pa).
* @param coeffs Vector of coefficients, [A,B,C,D,E,F,G], used to set
* the parameters for the species standard state.
*
* See the class description for the polynomial representation of the
* thermo functions in terms of \f$ A, \dots, G \f$.
*/
ShomatePoly(double tlow, double thigh, double pref, const double* coeffs) :
SpeciesThermoInterpType(tlow, thigh, pref),
m_coeff(coeffs, coeffs + 7)
{
}
//! copy constructor
/*!
* @param b object to be copied
@ -311,6 +331,8 @@ public:
* The first coefficient is the value of Tmid. The next 7
* coefficients are the low temperature range Shomate coefficients.
* The last 7 are the high temperature range Shomate coefficients.
* @deprecated Use the constructor that does not require the species index.
* To be removed after Cantera 2.2.
*/
ShomatePoly2(size_t n, doublereal tlow, doublereal thigh, doublereal pref,
const doublereal* coeffs) :
@ -322,6 +344,23 @@ public:
{
}
//! Normal constructor
/*!
* @param tlow Minimum temperature
* @param thigh Maximum temperature
* @param pref reference pressure (Pa).
* @param coeffs Vector of coefficients used to set the parameters for the
* standard state. [Tmid, 7 low-T coeffs, 7 high-T coeffs]
*/
ShomatePoly2(double tlow, double thigh, double pref, const double* coeffs) :
SpeciesThermoInterpType(tlow, thigh, pref),
m_midT(coeffs[0]),
msp_low(tlow, coeffs[0], pref, coeffs+1),
msp_high(coeffs[0], thigh, pref, coeffs+8),
m_coeff(coeffs, coeffs + 15)
{
}
//! Copy constructor
/*!
* @param b object to be copied.

View file

@ -160,9 +160,13 @@ class SpeciesThermoInterpType
public:
SpeciesThermoInterpType();
//! @deprecated Use the constructor without the species index. To be removed
//! after Cantera 2.2.
SpeciesThermoInterpType(size_t n, doublereal tlow,
doublereal thigh, doublereal pref);
SpeciesThermoInterpType(double tlow, double thigh, double pref);
SpeciesThermoInterpType(const SpeciesThermoInterpType& b);
virtual ~SpeciesThermoInterpType() {}
@ -195,10 +199,12 @@ public:
virtual int reportType() const = 0;
//! Returns an integer representing the species index
//! @deprecated
virtual size_t speciesIndex() const {
return m_index;
}
//! @deprecated
virtual void setIndex(size_t index) {
m_index = index;
}
@ -310,7 +316,7 @@ protected:
doublereal m_highT;
//! Reference state pressure
doublereal m_Pref;
//! species index
//! species index @deprecated
size_t m_index;
};
@ -344,9 +350,22 @@ public:
*
* @param PDSS_ptr Pointer to the PDSS object that handles calls for
* this object
* @deprecated Use the constructor which does not require the species
* index. To be removed after Cantera 2.2.
*/
STITbyPDSS(size_t speciesIndex, VPSSMgr* vpssmgr_ptr, PDSS* PDSS_ptr);
//! Main Constructor
/*!
* @param vpssmgr_ptr Pointer to the Variable pressure standard state
* manager that owns the PDSS object that will handle calls for this
* object
*
* @param PDSS_ptr Pointer to the PDSS object that handles calls for
* this object
*/
STITbyPDSS(VPSSMgr* vpssmgr_ptr, PDSS* PDSS_ptr);
//! copy constructor
/*!
* @param b Object to be copied

View file

@ -31,6 +31,17 @@ ConstCpPoly::ConstCpPoly(size_t n, doublereal tlow, doublereal thigh,
m_logt0 = log(m_t0);
}
ConstCpPoly::ConstCpPoly(double tlow, double thigh, double pref,
const double* coeffs) :
SpeciesThermoInterpType(tlow, thigh, pref)
{
m_t0 = coeffs[0];
m_h0_R = coeffs[1] / GasConstant;
m_s0_R = coeffs[2] / GasConstant;
m_cp0_R = coeffs[3] / GasConstant;
m_logt0 = log(m_t0);
}
ConstCpPoly::ConstCpPoly(const ConstCpPoly& b) :
SpeciesThermoInterpType(b),
m_t0(b.m_t0),

View file

@ -30,6 +30,14 @@ Mu0Poly::Mu0Poly(size_t n, doublereal tlow, doublereal thigh,
processCoeffs(coeffs);
}
Mu0Poly::Mu0Poly(double tlow, double thigh, double pref, const double* coeffs) :
SpeciesThermoInterpType(tlow, thigh, pref),
m_numIntervals(0),
m_H298(0.0)
{
processCoeffs(coeffs);
}
Mu0Poly::Mu0Poly(const Mu0Poly& b)
: SpeciesThermoInterpType(b),
m_numIntervals(b.m_numIntervals),
@ -195,7 +203,7 @@ Mu0Poly* newMu0ThermoFromXML(const std::string& speciesName,
c[2+i*2+1] = cValues[i];
}
return new Mu0Poly(0, tmin, tmax, pref, &c[0]);
return new Mu0Poly(tmin, tmax, pref, &c[0]);
}
void Mu0Poly::processCoeffs(const doublereal* coeffs)

View file

@ -29,6 +29,13 @@ Nasa9Poly1::Nasa9Poly1(size_t n, doublereal tlow, doublereal thigh,
{
}
Nasa9Poly1::Nasa9Poly1(double tlow, double thigh, double pref,
const double* coeffs) :
SpeciesThermoInterpType(tlow, thigh, pref),
m_coeff(coeffs, coeffs + 9)
{
}
Nasa9Poly1::Nasa9Poly1(const Nasa9Poly1& b) :
SpeciesThermoInterpType(b),
m_coeff(b.m_coeff)

View file

@ -192,20 +192,20 @@ SpeciesThermoInterpType* newSpeciesThermoInterpType(int type, double tlow,
{
switch (type) {
case NASA1:
return new NasaPoly1(0, tlow, thigh, pref, coeffs);
return new NasaPoly1(tlow, thigh, pref, coeffs);
case SHOMATE1:
return new ShomatePoly(0, tlow, thigh, pref, coeffs);
return new ShomatePoly(tlow, thigh, pref, coeffs);
case CONSTANT_CP:
case SIMPLE:
return new ConstCpPoly(0, tlow, thigh, pref, coeffs);
return new ConstCpPoly(tlow, thigh, pref, coeffs);
case MU0_INTERP:
return new Mu0Poly(0, tlow, thigh, pref, coeffs);
return new Mu0Poly(tlow, thigh, pref, coeffs);
case SHOMATE2:
return new ShomatePoly2(0, tlow, thigh, pref, coeffs);
return new ShomatePoly2(tlow, thigh, pref, coeffs);
case NASA2:
return new NasaPoly2(0, tlow, thigh, pref, coeffs);
return new NasaPoly2(tlow, thigh, pref, coeffs);
case ADSORBATE:
return new Adsorbate(0, tlow, thigh, pref, coeffs);
return new Adsorbate(tlow, thigh, pref, coeffs);
default:
throw CanteraError("newSpeciesThermoInterpType",
"Unknown species thermo type: " + int2str(type) + ".");
@ -304,17 +304,10 @@ static SpeciesThermoInterpType* newNasaThermoFromXML(
"non-continuous temperature ranges.");
}
// The NasaThermo species property manager expects the
// coefficients in a different order, so rearrange them.
vector_fp c(15);
c[0] = tmid;
c[1] = c0[5];
c[2] = c0[6];
copy(c0.begin(), c0.begin()+5, c.begin() + 3);
c[8] = c1[5];
c[9] = c1[6];
copy(c1.begin(), c1.begin()+5, c.begin() + 10);
copy(c1.begin(), c1.begin()+7, c.begin() + 1); // high-T coefficients
copy(c0.begin(), c0.begin()+7, c.begin() + 8); // low-T coefficients
return newSpeciesThermoInterpType(NASA, tmin, tmax, p0, &c[0]);
}
@ -523,7 +516,7 @@ static SpeciesThermoInterpType* newNasa9ThermoFromXML(
throw CanteraError("installNasa9ThermoFromXML",
"Expected 9 coeff polynomial");
}
regionPtrs.push_back(new Nasa9Poly1(0, tmin, tmax, pref, &cPoly[0]));
regionPtrs.push_back(new Nasa9Poly1(tmin, tmax, pref, &cPoly[0]));
nRegions++;
}
}

View file

@ -26,6 +26,20 @@ SpeciesThermoInterpType::SpeciesThermoInterpType(size_t n, doublereal tlow,
m_highT(thigh),
m_Pref(pref),
m_index(n)
{
warn_deprecated("Constructor SpeciesThermoInterpType(size_t n, ...)",
"Use the constructor which does not take a species index."
" Applies to all classes derived from SpeciesThermoInterpType."
" To be removed after Cantera 2.2.");
}
SpeciesThermoInterpType::SpeciesThermoInterpType(double tlow,
double thigh,
double pref) :
m_lowT(tlow),
m_highT(thigh),
m_Pref(pref),
m_index(0)
{
}
@ -72,6 +86,13 @@ STITbyPDSS::STITbyPDSS(size_t k, VPSSMgr* vpssmgr_ptr, PDSS* PDSS_ptr) :
m_index = k;
}
STITbyPDSS::STITbyPDSS(VPSSMgr* vpssmgr_ptr, PDSS* PDSS_ptr) :
SpeciesThermoInterpType(),
m_vpssmgr_ptr(vpssmgr_ptr),
m_PDSS_ptr(PDSS_ptr)
{
}
STITbyPDSS::STITbyPDSS(const STITbyPDSS& b) :
SpeciesThermoInterpType(b),
m_vpssmgr_ptr(b.m_vpssmgr_ptr),

View file

@ -106,17 +106,17 @@ class ConstructFromScratch : public testing::Test
public:
ConstructFromScratch()
: sH2O("H2O", parseCompString("H:2 O:1"),
new NasaPoly2(0, 200, 3500, 101325, h2o_nasa_coeffs))
new NasaPoly2(200, 3500, 101325, h2o_nasa_coeffs))
, sH2("H2", parseCompString("H:2"),
new NasaPoly2(0, 200, 3500, 101325, h2_nasa_coeffs))
new NasaPoly2(200, 3500, 101325, h2_nasa_coeffs))
, sO2("O2", parseCompString("O:2"),
new NasaPoly2(0, 200, 3500, 101325, o2_nasa_coeffs))
new NasaPoly2(200, 3500, 101325, o2_nasa_coeffs))
, sOH("OH", parseCompString("H:1 O:1"),
new NasaPoly2(0, 200, 3500, 101325, oh_nasa_coeffs))
new NasaPoly2(200, 3500, 101325, oh_nasa_coeffs))
, sCO("CO", parseCompString("C:1 O:1"),
new NasaPoly2(0, 200, 3500, 101325, o2_nasa_coeffs))
new NasaPoly2(200, 3500, 101325, o2_nasa_coeffs))
, sCO2("CO2", parseCompString("C:1 O:2"),
new NasaPoly2(0, 200, 3500, 101325, h2o_nasa_coeffs))
new NasaPoly2(200, 3500, 101325, h2o_nasa_coeffs))
{
}

View file

@ -32,9 +32,9 @@ TEST_F(SpeciesThermoInterpTypeTest, install_const_cp)
{
// Compare against instantiation from CTI file
IdealGasPhase p2("../data/simplephases.cti", "simple1");
SpeciesThermoInterpType* stit_o2 = new ConstCpPoly(0, 200, 5000, 101325, c_o2);
SpeciesThermoInterpType* stit_h2 = new ConstCpPoly(1, 200, 5000, 101325, c_h2);
SpeciesThermoInterpType* stit_h2o = new ConstCpPoly(2, 200, 5000, 101325, c_h2o);
SpeciesThermoInterpType* stit_o2 = new ConstCpPoly(200, 5000, 101325, c_o2);
SpeciesThermoInterpType* stit_h2 = new ConstCpPoly(200, 5000, 101325, c_h2);
SpeciesThermoInterpType* stit_h2o = new ConstCpPoly(200, 5000, 101325, c_h2o);
p.addSpecies(Species("O2", parseCompString("O:2"), stit_o2));
p.addSpecies(Species("H2", parseCompString("H:2"), stit_h2));
p.addSpecies(Species("H2O", parseCompString("H:2 O:1"), stit_h2o));
@ -51,8 +51,8 @@ TEST_F(SpeciesThermoInterpTypeTest, DISABLED_install_bad_pref)
{
// Currently broken because GeneralSpeciesThermo does not enforce reference
// pressure consistency.
SpeciesThermoInterpType* stit_o2 = new ConstCpPoly(0, 200, 5000, 101325, c_o2);
SpeciesThermoInterpType* stit_h2 = new ConstCpPoly(1, 200, 5000, 100000, c_h2);
SpeciesThermoInterpType* stit_o2 = new ConstCpPoly(200, 5000, 101325, c_o2);
SpeciesThermoInterpType* stit_h2 = new ConstCpPoly(200, 5000, 100000, c_h2);
p.addSpecies(Species("O2", parseCompString("O:2"), stit_o2));
// Pref does not match
ASSERT_THROW(p.addSpecies(Species("H2", parseCompString("H:2"), stit_h2)), CanteraError);
@ -63,9 +63,9 @@ TEST_F(SpeciesThermoInterpTypeTest, install_nasa)
{
// Compare against instantiation from CTI file
IdealGasPhase p2("../data/simplephases.cti", "nasa1");
SpeciesThermoInterpType* stit_o2 = new NasaPoly2(0, 200, 3500, 101325, o2_nasa_coeffs);
SpeciesThermoInterpType* stit_h2 = new NasaPoly2(1, 200, 3500, 101325, h2_nasa_coeffs);
SpeciesThermoInterpType* stit_h2o = new NasaPoly2(2, 200, 3500, 101325, h2o_nasa_coeffs);
SpeciesThermoInterpType* stit_o2 = new NasaPoly2(200, 3500, 101325, o2_nasa_coeffs);
SpeciesThermoInterpType* stit_h2 = new NasaPoly2(200, 3500, 101325, h2_nasa_coeffs);
SpeciesThermoInterpType* stit_h2o = new NasaPoly2(200, 3500, 101325, h2o_nasa_coeffs);
p.addSpecies(Species("O2", parseCompString("O:2"), stit_o2));
p.addSpecies(Species("H2", parseCompString("H:2"), stit_h2));
p.addSpecies(Species("H2O", parseCompString("H:2 O:1"), stit_h2o));
@ -82,8 +82,8 @@ TEST_F(SpeciesThermoInterpTypeTest, install_shomate)
{
// Compare against instantiation from CTI file
IdealGasPhase p2("../data/simplephases.cti", "shomate1");
SpeciesThermoInterpType* stit_co = new ShomatePoly2(0, 200, 6000, 101325, co_shomate_coeffs);
SpeciesThermoInterpType* stit_co2 = new ShomatePoly2(1, 200, 6000, 101325, co2_shomate_coeffs);
SpeciesThermoInterpType* stit_co = new ShomatePoly2(200, 6000, 101325, co_shomate_coeffs);
SpeciesThermoInterpType* stit_co2 = new ShomatePoly2(200, 6000, 101325, co2_shomate_coeffs);
p.addSpecies(Species("CO", parseCompString("C:1 O:1"), stit_co));
p.addSpecies(Species("CO2", parseCompString("C:1 O:2"), stit_co2));
p.initThermo();

View file

@ -1,33 +1,32 @@
namespace {
// 2-region NASA coefficients; Order is significantly different from the
// standard NASA format.
// 2-region NASA coefficients
const double h2o_nasa_coeffs[] = {
1000.0, -3.029372670E+04, -8.490322080E-01, 4.198640560E+00,
-2.036434100E-03, 6.520402110E-06, -5.487970620E-09, 1.771978170E-12,
-3.000429710E+04, 4.966770100E+00, 3.033992490E+00, 2.176918040E-03,
-1.640725180E-07, -9.704198700E-11, 1.682009920E-14};
1000.0, 3.03399249E+00, 2.17691804E-03, -1.64072518E-07,
-9.70419870E-11, 1.68200992E-14, -3.00042971E+04, 4.96677010E+00,
4.19864056E+00, -2.03643410E-03, 6.52040211E-06, -5.48797062E-09,
1.77197817E-12, -3.02937267E+04, -8.49032208E-01};
const double h2o_comp[] = {2.0, 1.0, 0.0};
const double h2_nasa_coeffs[] = {
1000.0, -9.17935173E+02, 6.83010238E-01, 2.34433112E+00,
7.98052075E-03, -1.94781510E-05, 2.01572094E-08, -7.37611761E-12,
-9.50158922E+02, -3.20502331E+00, 3.33727920E+00, -4.94024731E-05,
4.99456778E-07, -1.79566394E-10, 2.00255376E-14};
1000.0, 3.33727920E+00, -4.94024731E-05, 4.99456778E-07,
-1.79566394E-10, 2.00255376E-14, -9.50158922E+02, -3.20502331E+00,
2.34433112E+00, 7.98052075E-03, -1.94781510E-05, 2.01572094E-08,
-7.37611761E-12, -9.17935173E+02, 6.83010238E-01};
const double h2_comp[] = {2.0, 0.0, 0.0};
const double o2_nasa_coeffs[] = {
1000.0, -1.063943560E+03, 3.657675730E+00, 3.782456360E+00,
-2.996734160E-03, 9.847302010E-06, -9.681295090E-09, 3.243728370E-12,
-1.088457720E+03, 5.453231290E+00, 3.282537840E+00, 1.483087540E-03,
-7.579666690E-07, 2.094705550E-10, -2.167177940E-14};
1000.0, 3.28253784E+00, 1.48308754E-03, -7.57966669E-07,
2.09470555E-10, -2.16717794E-14, -1.08845772E+03, 5.45323129E+00,
3.78245636E+00, -2.99673416E-03, 9.84730201E-06, -9.68129509E-09,
3.24372837E-12, -1.06394356E+03, 3.65767573E+00};
const double o2_comp[] = {0.0, 2.0, 0.0};
const double oh_nasa_coeffs[] = {
1000.0, 3.615080560E+03, -1.039254580E-01, 3.992015430E+00,
-2.401317520E-03, 4.617938410E-06, -3.881133330E-09, 1.364114700E-12,
3.858657000E+03, 4.476696100E+00, 3.092887670E+00, 5.484297160E-04,
1.265052280E-07, -8.794615560E-11, 1.174123760E-14};
1000.0, 3.09288767E+00, 5.48429716E-04, 1.26505228E-07,
-8.79461556E-11, 1.17412376E-14, 3.85865700E+03, 4.47669610E+00,
3.99201543E+00, -2.40131752E-03, 4.61793841E-06, -3.88113333E-09,
1.36411470E-12, 3.61508056E+03, -1.03925458E-01};
const double oh_comp[] = {1.0, 1.0, 0.0};
// 2-region Shomate coefficients (from NIST Chemistry WebBook)

View file

@ -19,11 +19,11 @@ class TransportFromScratch : public testing::Test
public:
TransportFromScratch()
: sH2("H2", parseCompString("H:2"),
new NasaPoly2(0, 200, 3500, 101325, h2_nasa_coeffs))
new NasaPoly2(200, 3500, 101325, h2_nasa_coeffs))
, sO2("O2", parseCompString("O:2"),
new NasaPoly2(0, 200, 3500, 101325, o2_nasa_coeffs))
new NasaPoly2(200, 3500, 101325, o2_nasa_coeffs))
, sH2O("H2O", parseCompString("H:2 O:1"),
new NasaPoly2(0, 200, 3500, 101325, h2o_nasa_coeffs))
new NasaPoly2(200, 3500, 101325, h2o_nasa_coeffs))
, tH2(new GasTransportData())
, tO2(new GasTransportData())
, tH2O(new GasTransportData())