Cantera  4.0.0a1
Loading...
Searching...
No Matches
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
20namespace 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{
50public:
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, span<const double> coeffs) :
64 SpeciesThermoInterpType(tlow, thigh, pref),
65 m_midT(coeffs[0]),
66 mnp_low(tlow, coeffs[0], pref, coeffs.subspan(8, 7)),
67 mnp_high(coeffs[0], thigh, pref, coeffs.subspan(1, 7)) {
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 {
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, span<const double> low, span<const 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, span<double> T_poly) const override {
102 }
103
104 //! @copydoc NasaPoly1::updateProperties
105 void updateProperties(span<const double> tt, double& cp_R, double& h_RT,
106 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, double& cp_R, double& h_RT,
115 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, span<double> coeffs) const override {
127 mnp_high.reportParameters(n, type, coeffs[0], thigh, pref, coeffs.subspan(1));
128 mnp_low.reportParameters(n, type, tlow, coeffs[0], pref, coeffs.subspan(8));
129 type = NASA2;
130 }
131
132 void getParameters(AnyMap& thermo) const override;
133
134 double reportHf298() const override {
135 if (298.15 <= m_midT) {
136 return mnp_low.reportHf298();
137 } else {
138 return mnp_high.reportHf298();
139 }
140 }
141
142 void resetHf298() override {
145 }
146
147 void modifyOneHf298(const size_t k, const double Hf298New) override {
148 double h298now = reportHf298();
149 double delH = Hf298New - h298now;
150 double h = mnp_low.reportHf298();
151 double hnew = h + delH;
152 mnp_low.modifyOneHf298(k, hnew);
153 h = mnp_high.reportHf298();
154 hnew = h + delH;
155 mnp_high.modifyOneHf298(k, hnew);
156 }
157
158 void validate(const string& name) override;
159
160protected:
161 //! Midrange temperature
162 double m_midT = 0.0;
163 //! NasaPoly1 object for the low temperature region.
165 //! NasaPoly1 object for the high temperature region.
167};
168
169}
170#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:431
The NASA polynomial parameterization for one temperature range.
Definition NasaPoly1.h:48
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
void reportParameters(size_t &n, int &type, double &tlow, double &thigh, double &pref, span< double > coeffs) const override
This utility function returns the type of parameterization and all of the parameters for the species.
Definition NasaPoly1.h:131
void updateTemperaturePoly(double T, span< double > T_poly) const override
Given the temperature T, compute the terms of the temperature polynomial T_poly.
Definition NasaPoly1.h:83
double reportHf298() 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: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 NasaPoly1.h:163
void updateProperties(span< 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
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
void setParameters(double Tmid, span< const double > low, span< const double > high)
Definition NasaPoly2.cpp:13
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
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:22
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:33
void reportParameters(size_t &n, int &type, double &tlow, double &thigh, double &pref, span< double > coeffs) const override
This utility function returns the type of parameterization and all of the parameters for the species.
Definition NasaPoly2.h:125
NasaPoly2(double tlow, double thigh, double pref, span< const double > coeffs)
Constructor with all input data.
Definition NasaPoly2.h:63
void updateTemperaturePoly(double T, span< double > T_poly) const override
Given the temperature T, compute the terms of the temperature polynomial T_poly.
Definition NasaPoly2.h:100
void setRefPressure(double Pref) override
Set the reference pressure [Pa].
Definition NasaPoly2.h:80
double reportHf298() 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:142
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:162
NasaPoly1 mnp_low
NasaPoly1 object for the low temperature region.
Definition NasaPoly2.h:164
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:147
void updateProperties(span< 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
NasaPoly1 mnp_high
NasaPoly1 object for the high temperature region.
Definition NasaPoly2.h:166
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:595
#define NASA2
Two regions of 7 coefficient NASA Polynomials This is implemented in the class NasaPoly2 in NasaPoly2...