| Cantera 3.0.0

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
17#include "cantera/thermo/SpeciesThermoInterpType.h"
18#include "cantera/thermo/NasaPoly1.h"
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 */
48 class NasaPoly2 : public SpeciesThermoInterpType
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 {
71 SpeciesThermoInterpType::setMinTemp(Tmin);
72 mnp_low.setMinTemp(Tmin);
73 }
74
75 void setMaxTemp(double Tmax) override {
76 SpeciesThermoInterpType::setMaxTemp(Tmax);
77 mnp_high.setMaxTemp(Tmax);
78 }
79
80 void setRefPressure(double Pref) override {
81 SpeciesThermoInterpType::setRefPressure(Pref);
82 mnp_low.setRefPressure(Pref);
83 mnp_high.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 {
148 mnp_low.resetHf298();
149 mnp_high.resetHf298();
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.
169 NasaPoly1 mnp_low;
170 //! NasaPoly1 object for the high temperature region.
171 NasaPoly1 mnp_high;
172};
173
174}
175#endif
NasaPoly1.h
Header for a single-species standard state object derived from SpeciesThermoInterpType based on the N...
SpeciesThermoInterpType.h
Pure Virtual Base class for individual species reference state thermodynamic managers and text for th...
Cantera::AnyMap
A map of string keys to values whose type can vary at runtime.
Definition AnyMap.h:427
Cantera::NasaPoly1
The NASA polynomial parameterization for one temperature range.
Definition NasaPoly1.h:48
Cantera::NasaPoly1::updateTemperaturePoly
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
Cantera::NasaPoly1::reportParameters
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
Cantera::NasaPoly1::updateProperties
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
Cantera::NasaPoly1::reportHf298
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
Cantera::NasaPoly1::resetHf298
void resetHf298() override
Restore the original heat of formation for this species.
Definition NasaPoly1.h:173
Cantera::NasaPoly1::modifyOneHf298
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
Cantera::NasaPoly1::updatePropertiesTemp
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
Cantera::NasaPoly2
The NASA polynomial parameterization for two temperature ranges.
Definition NasaPoly2.h:49
Cantera::NasaPoly2::setMinTemp
void setMinTemp(double Tmin) override
Set the minimum temperature at which the thermo parameterization is valid.
Definition NasaPoly2.h:70
Cantera::NasaPoly2::reportType
int reportType() const override
Returns an integer representing the type of parameterization.
Definition NasaPoly2.h:94
Cantera::NasaPoly2::temperaturePolySize
size_t temperaturePolySize() const override
Number of terms in the temperature polynomial for this parameterization.
Definition NasaPoly2.h:98
Cantera::NasaPoly2::getParameters
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
Cantera::NasaPoly2::nCoeffs
size_t nCoeffs() const override
This utility function returns the number of coefficients for a given type of species parameterization...
Definition NasaPoly2.h:123
Cantera::NasaPoly2::validate
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
Cantera::NasaPoly2::updateTemperaturePoly
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
Cantera::NasaPoly2::reportParameters
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
Cantera::NasaPoly2::setParameters
void setParameters(double Tmid, const vector< double > &low, const vector< double > &high)
Definition NasaPoly2.cpp:11
Cantera::NasaPoly2::setRefPressure
void setRefPressure(double Pref) override
Set the reference pressure [Pa].
Definition NasaPoly2.h:80
Cantera::NasaPoly2::updateProperties
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
Cantera::NasaPoly2::reportHf298
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
Cantera::NasaPoly2::resetHf298
void resetHf298() override
Restore the original heat of formation for this species.
Definition NasaPoly2.h:147
Cantera::NasaPoly2::setMaxTemp
void setMaxTemp(double Tmax) override
Set the maximum temperature at which the thermo parameterization is valid.
Definition NasaPoly2.h:75
Cantera::NasaPoly2::m_midT
double m_midT
Midrange temperature.
Definition NasaPoly2.h:167
Cantera::NasaPoly2::mnp_low
NasaPoly1 mnp_low
NasaPoly1 object for the low temperature region.
Definition NasaPoly2.h:169
Cantera::NasaPoly2::modifyOneHf298
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
Cantera::NasaPoly2::mnp_high
NasaPoly1 mnp_high
NasaPoly1 object for the high temperature region.
Definition NasaPoly2.h:171
Cantera::NasaPoly2::NasaPoly2
NasaPoly2(double tlow, double thigh, double pref, const double *coeffs)
Constructor with all input data.
Definition NasaPoly2.h:63
Cantera::NasaPoly2::updatePropertiesTemp
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
Cantera::SpeciesThermoInterpType
Abstract Base class for the thermodynamic manager for an individual species' reference state.
Definition SpeciesThermoInterpType.h:113
Cantera::SpeciesThermoInterpType::setRefPressure
virtual void setRefPressure(double Pref)
Set the reference pressure [Pa].
Definition SpeciesThermoInterpType.h:153
Cantera::SpeciesThermoInterpType::setMinTemp
virtual void setMinTemp(double Tmin)
Set the minimum temperature at which the thermo parameterization is valid.
Definition SpeciesThermoInterpType.h:132
Cantera::SpeciesThermoInterpType::setMaxTemp
virtual void setMaxTemp(double Tmax)
Set the maximum temperature at which the thermo parameterization is valid.
Definition SpeciesThermoInterpType.h:143
Cantera
Namespace for the Cantera kernel.
Definition AnyMap.cpp:564
NASA2
#define NASA2
Two regions of 7 coefficient NASA Polynomials This is implemented in the class NasaPoly2 in NasaPoly2...
Definition speciesThermoTypes.h:24