Cantera  3.1.0a1
NasaPoly2.h
Go to the documentation of this file.
1 /**
2  * @file NasaPoly2.h
3  * Header for a single-species standard state object derived
4  * from @link Cantera::SpeciesThermoInterpType SpeciesThermoInterpType@endlink based
5  * on the NASA temperature polynomial form applied to two temperature regions
6  * (see @ref spthermo and class @link Cantera::NasaPoly2 NasaPoly2@endlink).
7  *
8  * Two zoned NASA polynomial parameterization
9  */
10 
11 // This file is part of Cantera. See License.txt in the top-level directory or
12 // at https://cantera.org/license.txt for license and copyright information.
13 
14 #ifndef CT_NASAPOLY2_H
15 #define CT_NASAPOLY2_H
16 
19 
20 namespace Cantera
21 {
22 /**
23  * The NASA polynomial parameterization for two temperature ranges. This
24  * parameterization expresses the heat capacity as a fourth-order polynomial.
25  * Note that this is the form used in the 1971 NASA equilibrium program and by
26  * the Chemkin software package, but differs from the form used in the more
27  * recent NASA equilibrium program.
28  *
29  * Seven coefficients @f$ (a_0,\dots,a_6) @f$ are used to represent
30  * @f$ c_p^0(T) @f$, @f$ h^0(T) @f$, and @f$ s^0(T) @f$ as
31  * polynomials in @f$ T @f$ :
32  * @f[
33  * \frac{c_p(T)}{R} = a_0 + a_1 T + a_2 T^2 + a_3 T^3 + a_4 T^4
34  * @f]
35  * @f[
36  * \frac{h^0(T)}{RT} = a_0 + \frac{a_1}{2} T + \frac{a_2}{3} T^2
37  * + \frac{a_3}{4} T^3 + \frac{a_4}{5} T^4 + \frac{a_5}{T}.
38  * @f]
39  * @f[
40  * \frac{s^0(T)}{R} = a_0\ln T + a_1 T + \frac{a_2}{2} T^2
41  * + \frac{a_3}{3} T^3 + \frac{a_4}{4} T^4 + a_6.
42  * @f]
43  *
44  * This class is designed specifically for use by the class MultiSpeciesThermo.
45  *
46  * @ingroup spthermo
47  */
49 {
50 public:
51  NasaPoly2() = default;
52 
53  //! Constructor with all input data
54  /*!
55  * @param tlow output - Minimum temperature
56  * @param thigh output - Maximum temperature
57  * @param pref output - reference pressure (Pa).
58  * @param coeffs Vector of coefficients used to set the parameters for
59  * the standard state [Tmid, 7 high-T coeffs, 7 low-T
60  * coeffs]. This is the coefficient order used in the
61  * standard NASA format.
62  */
63  NasaPoly2(double tlow, double thigh, double pref, const double* coeffs) :
64  SpeciesThermoInterpType(tlow, thigh, pref),
65  m_midT(coeffs[0]),
66  mnp_low(tlow, coeffs[0], pref, coeffs + 8),
67  mnp_high(coeffs[0], thigh, pref, coeffs + 1) {
68  }
69 
70  void setMinTemp(double Tmin) override {
72  mnp_low.setMinTemp(Tmin);
73  }
74 
75  void setMaxTemp(double Tmax) override {
77  mnp_high.setMaxTemp(Tmax);
78  }
79 
80  void setRefPressure(double Pref) override {
82  mnp_low.setRefPressure(Pref);
84  }
85 
86  /**
87  * @param Tmid Temperature [K] at the boundary between the low and high
88  * temperature polynomials
89  * @param low Vector of 7 coefficients for the low temperature polynomial
90  * @param high Vector of 7 coefficients for the high temperature polynomial
91  */
92  void setParameters(double Tmid, const vector<double>& low, const vector<double>& high);
93 
94  int reportType() const override {
95  return NASA2;
96  }
97 
98  size_t temperaturePolySize() const override { return 6; }
99 
100  void updateTemperaturePoly(double T, double* T_poly) const override {
101  mnp_low.updateTemperaturePoly(T, T_poly);
102  }
103 
104  //! @copydoc NasaPoly1::updateProperties
105  void updateProperties(const double* tt,
106  double* cp_R, double* h_RT, double* s_R) const override {
107  if (tt[0] <= m_midT) {
108  mnp_low.updateProperties(tt, cp_R, h_RT, s_R);
109  } else {
110  mnp_high.updateProperties(tt, cp_R, h_RT, s_R);
111  }
112  }
113 
114  void updatePropertiesTemp(const double temp,
115  double* cp_R, double* h_RT, double* s_R) const override {
116  if (temp <= m_midT) {
117  mnp_low.updatePropertiesTemp(temp, cp_R, h_RT, s_R);
118  } else {
119  mnp_high.updatePropertiesTemp(temp, cp_R, h_RT, s_R);
120  }
121  }
122 
123  size_t nCoeffs() const override { return 15; }
124 
125  void reportParameters(size_t& n, int& type, double& tlow, double& thigh,
126  double& pref, double* const coeffs) const override {
127  mnp_high.reportParameters(n, type, coeffs[0], thigh, pref, coeffs + 1);
128  mnp_low.reportParameters(n, type, tlow, coeffs[0], pref, coeffs + 8);
129  type = NASA2;
130  }
131 
132  void getParameters(AnyMap& thermo) const override;
133 
134  double reportHf298(double* const h298=nullptr) const override {
135  double h;
136  if (298.15 <= m_midT) {
137  h = mnp_low.reportHf298(0);
138  } else {
139  h = mnp_high.reportHf298(0);
140  }
141  if (h298) {
142  *h298 = h;
143  }
144  return h;
145  }
146 
147  void resetHf298() override {
150  }
151 
152  void modifyOneHf298(const size_t k, const double Hf298New) override {
153  double h298now = reportHf298(0);
154  double delH = Hf298New - h298now;
155  double h = mnp_low.reportHf298(0);
156  double hnew = h + delH;
157  mnp_low.modifyOneHf298(k, hnew);
158  h = mnp_high.reportHf298(0);
159  hnew = h + delH;
160  mnp_high.modifyOneHf298(k, hnew);
161  }
162 
163  void validate(const string& name) override;
164 
165 protected:
166  //! Midrange temperature
167  double m_midT = 0.0;
168  //! NasaPoly1 object for the low temperature region.
170  //! NasaPoly1 object for the high temperature region.
172 };
173 
174 }
175 #endif
Header for a single-species standard state object derived from SpeciesThermoInterpType based on the N...
Pure Virtual Base class for individual species reference state thermodynamic managers and text for th...
A map of string keys to values whose type can vary at runtime.
Definition: AnyMap.h:427
The NASA polynomial parameterization for one temperature range.
Definition: NasaPoly1.h:48
void updateTemperaturePoly(double T, double *T_poly) const override
Given the temperature T, compute the terms of the temperature polynomial T_poly.
Definition: NasaPoly1.h:83
void reportParameters(size_t &n, int &type, double &tlow, double &thigh, double &pref, double *const coeffs) const override
This utility function returns the type of parameterization and all of the parameters for the species.
Definition: NasaPoly1.h:131
void updateProperties(const double *tt, double *cp_R, double *h_RT, double *s_R) const override
Update the properties for this species, given a temperature polynomial.
Definition: NasaPoly1.h:103
double reportHf298(double *const h298=nullptr) const override
Report the 298 K Heat of Formation of the standard state of one species (J kmol-1)
Definition: NasaPoly1.h:147
void resetHf298() override
Restore the original heat of formation for this species.
Definition: NasaPoly1.h:173
void modifyOneHf298(const size_t k, const double Hf298New) override
Modify the value of the 298 K Heat of Formation of one species in the phase (J kmol-1)
Definition: NasaPoly1.h:167
void updatePropertiesTemp(const double temp, double *cp_R, double *h_RT, double *s_R) const override
Compute the reference-state property of one species.
Definition: NasaPoly1.h:124
The NASA polynomial parameterization for two temperature ranges.
Definition: NasaPoly2.h:49
void setMinTemp(double Tmin) override
Set the minimum temperature at which the thermo parameterization is valid.
Definition: NasaPoly2.h:70
int reportType() const override
Returns an integer representing the type of parameterization.
Definition: NasaPoly2.h:94
size_t temperaturePolySize() const override
Number of terms in the temperature polynomial for this parameterization.
Definition: NasaPoly2.h:98
void getParameters(AnyMap &thermo) const override
Store the parameters of the species thermo object such that an identical species thermo object could ...
Definition: NasaPoly2.cpp:20
size_t nCoeffs() const override
This utility function returns the number of coefficients for a given type of species parameterization...
Definition: NasaPoly2.h:123
void validate(const string &name) override
Check for problems with the parameterization, and generate warnings or throw and exception if any are...
Definition: NasaPoly2.cpp:31
void updateTemperaturePoly(double T, double *T_poly) const override
Given the temperature T, compute the terms of the temperature polynomial T_poly.
Definition: NasaPoly2.h:100
void reportParameters(size_t &n, int &type, double &tlow, double &thigh, double &pref, double *const coeffs) const override
This utility function returns the type of parameterization and all of the parameters for the species.
Definition: NasaPoly2.h:125
void setParameters(double Tmid, const vector< double > &low, const vector< double > &high)
Definition: NasaPoly2.cpp:11
void setRefPressure(double Pref) override
Set the reference pressure [Pa].
Definition: NasaPoly2.h:80
void updateProperties(const double *tt, double *cp_R, double *h_RT, double *s_R) const override
Update the properties for this species, given a temperature polynomial.
Definition: NasaPoly2.h:105
double reportHf298(double *const h298=nullptr) const override
Report the 298 K Heat of Formation of the standard state of one species (J kmol-1)
Definition: NasaPoly2.h:134
void resetHf298() override
Restore the original heat of formation for this species.
Definition: NasaPoly2.h:147
void setMaxTemp(double Tmax) override
Set the maximum temperature at which the thermo parameterization is valid.
Definition: NasaPoly2.h:75
double m_midT
Midrange temperature.
Definition: NasaPoly2.h:167
NasaPoly1 mnp_low
NasaPoly1 object for the low temperature region.
Definition: NasaPoly2.h:169
void modifyOneHf298(const size_t k, const double Hf298New) override
Modify the value of the 298 K Heat of Formation of one species in the phase (J kmol-1)
Definition: NasaPoly2.h:152
NasaPoly1 mnp_high
NasaPoly1 object for the high temperature region.
Definition: NasaPoly2.h:171
NasaPoly2(double tlow, double thigh, double pref, const double *coeffs)
Constructor with all input data.
Definition: NasaPoly2.h:63
void updatePropertiesTemp(const double temp, double *cp_R, double *h_RT, double *s_R) const override
Compute the reference-state property of one species.
Definition: NasaPoly2.h:114
Abstract Base class for the thermodynamic manager for an individual species' reference state.
virtual void setRefPressure(double Pref)
Set the reference pressure [Pa].
virtual void setMinTemp(double Tmin)
Set the minimum temperature at which the thermo parameterization is valid.
virtual void setMaxTemp(double Tmax)
Set the maximum temperature at which the thermo parameterization is valid.
Namespace for the Cantera kernel.
Definition: AnyMap.cpp:564
#define NASA2
Two regions of 7 coefficient NASA Polynomials This is implemented in the class NasaPoly2 in NasaPoly2...