138 lines
5 KiB
C++
138 lines
5 KiB
C++
/**
|
|
* @file Nasa9Poly1.h Header for a single-species standard state object derived
|
|
* from \link Cantera::SpeciesThermoInterpType
|
|
* SpeciesThermoInterpType\endlink based on the NASA 9 coefficient
|
|
* temperature polynomial form applied to one temperature region (see \ref
|
|
* spthermo and class \link Cantera::Nasa9Poly1 Nasa9Poly1\endlink).
|
|
*
|
|
* This parameterization has one NASA temperature region.
|
|
*/
|
|
|
|
// This file is part of Cantera. See License.txt in the top-level directory or
|
|
// at http://www.cantera.org/license.txt for license and copyright information.
|
|
|
|
#ifndef CT_NASA9POLY1_H
|
|
#define CT_NASA9POLY1_H
|
|
|
|
#include "SpeciesThermoInterpType.h"
|
|
|
|
namespace Cantera
|
|
{
|
|
//! The NASA 9 polynomial parameterization for one temperature range.
|
|
/*!
|
|
* This parameterization expresses the heat capacity via a 7 coefficient
|
|
* polynomial. Note that this is the form used in the 2002 NASA equilibrium
|
|
* program. A reference to the form is provided below:
|
|
*
|
|
* "NASA Glenn Coefficients for Calculating Thermodynamic Properties of
|
|
* Individual Species," B. J. McBride, M. J. Zehe, S. Gordon
|
|
* NASA/TP-2002-211556, Sept. 2002
|
|
*
|
|
* Nine coefficients \f$(a_0,\dots,a_8)\f$ are used to represent
|
|
* \f$ C_p^0(T)\f$, \f$ H^0(T)\f$, and \f$ S^0(T) \f$ as
|
|
* polynomials in \f$ T \f$ :
|
|
* \f[
|
|
* \frac{C_p^0(T)}{R} = a_0 T^{-2} + a_1 T^{-1} + a_2 + a_3 T
|
|
* + a_4 T^2 + a_5 T^3 + a_6 T^4
|
|
* \f]
|
|
*
|
|
* \f[
|
|
* \frac{H^0(T)}{RT} = - a_0 T^{-2} + a_1 \frac{\ln T}{T} + a_2
|
|
* + \frac{a_3}{2} T + \frac{a_4}{3} T^2 + \frac{a_5}{4} T^3 +
|
|
* \frac{a_6}{5} T^4 + \frac{a_7}{T}
|
|
* \f]
|
|
*
|
|
* \f[
|
|
* \frac{s^0(T)}{R} = - \frac{a_0}{2} T^{-2} - a_1 T^{-1} + a_2 \ln T
|
|
* + a_3 T + \frac{a_4}{2} T^2 + \frac{a_5}{3} T^3 + \frac{a_6}{4} T^4 + a_8
|
|
* \f]
|
|
*
|
|
* The standard state is assumed to be an ideal gas at the standard pressure of
|
|
* 1 bar, for gases. For condensed species, the standard state is the pure
|
|
* crystalline or liquid substance at the standard pressure of 1 atm.
|
|
*
|
|
* These NASA representations may have multiple temperature regions through the
|
|
* use of the Nasa9PolyMultiTempRegion object, which uses multiple copies of
|
|
* this Nasa9Poly1 object to handle multiple temperature regions.
|
|
*
|
|
* @ingroup spthermo
|
|
* @see Nasa9PolyMultiTempRegion
|
|
*/
|
|
class Nasa9Poly1 : public SpeciesThermoInterpType
|
|
{
|
|
public:
|
|
//! Empty constructor
|
|
//! @deprecated Default constructor to be removed after Cantera 2.3.
|
|
Nasa9Poly1();
|
|
|
|
//! 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);
|
|
|
|
virtual SpeciesThermoInterpType*
|
|
duplMyselfAsSpeciesThermoInterpType() const;
|
|
|
|
virtual int reportType() const;
|
|
|
|
virtual size_t temperaturePolySize() const { return 7; }
|
|
virtual void updateTemperaturePoly(double T, double* T_poly) const;
|
|
|
|
/*!
|
|
* @copydoc SpeciesThermoInterpType::updateProperties
|
|
*
|
|
* Temperature Polynomial:
|
|
* - tt[0] = t;
|
|
* - tt[1] = t*t;
|
|
* - tt[2] = t*t*t;
|
|
* - tt[3] = t*t*t*t;
|
|
* - tt[4] = 1.0/t;
|
|
* - tt[5] = 1.0/(t*t);
|
|
* - tt[6] = std::log(t);
|
|
*/
|
|
virtual void updateProperties(const doublereal* tt,
|
|
doublereal* cp_R, doublereal* h_RT, doublereal* s_R) const;
|
|
|
|
virtual void updatePropertiesTemp(const doublereal temp,
|
|
doublereal* cp_R, doublereal* h_RT,
|
|
doublereal* s_R) const;
|
|
|
|
//! This utility function reports back the type of parameterization and all
|
|
//! of the parameters for the species
|
|
/*!
|
|
* All parameters are output variables
|
|
*
|
|
* @param n Species index
|
|
* @param type Integer type of the standard type
|
|
* @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. There are 12 of them, designed to be compatible
|
|
* with the multiple temperature formulation.
|
|
* - coeffs[0] is equal to one.
|
|
* - coeffs[1] is min temperature
|
|
* - coeffs[2] is max temperature
|
|
* - coeffs[3+i] from i =0,9 are the coefficients themselves
|
|
*/
|
|
virtual void reportParameters(size_t& n, int& type,
|
|
doublereal& tlow, doublereal& thigh,
|
|
doublereal& pref,
|
|
doublereal* const coeffs) const;
|
|
|
|
//! @deprecated To be removed after Cantera 2.3. Use
|
|
//! MultiSpeciesThermo::modifySpecies instead.
|
|
virtual void modifyParameters(doublereal* coeffs);
|
|
|
|
protected:
|
|
//! array of polynomial coefficients
|
|
vector_fp m_coeff;
|
|
};
|
|
|
|
}
|
|
#endif
|