Cantera  2.0
SingleSpeciesTP.h
Go to the documentation of this file.
1 /**
2  * @file SingleSpeciesTP.h
3  * Header for the %SingleSpeciesTP class, which is a filter class for %ThermoPhase,
4  * that eases the construction of single species phases
5  * ( see \ref thermoprops and class \link Cantera::SingleSpeciesTP SingleSpeciesTP\endlink).
6  *
7  */
8 /*
9  * Copyright (2005) Sandia Corporation. Under the terms of
10  * Contract DE-AC04-94AL85000 with Sandia Corporation, the
11  * U.S. Government retains certain rights in this software.
12  */
13 #ifndef CT_SINGLESPECIESTP_H
14 #define CT_SINGLESPECIESTP_H
15 
16 #include "ThermoPhase.h"
17 
18 
19 namespace Cantera
20 {
21 
22 /**
23  * @ingroup thermoprops
24  *
25  * The %SingleSpeciesTP class is a filter class for %ThermoPhase.
26  * What it does is to simplify the construction of %ThermoPhase
27  * objects by assuming that the phase consists of one and
28  * only one type of species. In other words, it's a stoichiometric
29  * phase. However, no assumptions are made concerning the
30  * thermodynamic functions or the equation of state of the
31  * phase. Therefore it's an incomplete description of
32  * the thermodynamics. The complete description must be
33  * made in a derived class of %SingleSpeciesTP.
34  *
35  * Several different groups of thermodynamic functions are resolved
36  * at this level by this class. For example, All partial molar property
37  * routines call their single species standard state equivalents.
38  * All molar solution thermodynamic routines call the single species
39  * standard state equivalents.
40  * Activities routines are resolved at this level, as there is only
41  * one species.
42  *
43  * It is assumed that the reference state thermodynamics may be
44  * obtained by a pointer to a populated species thermodynamic property
45  * manager class (see ThermoPhase::m_spthermo). How to relate pressure
46  * changes to the reference state thermodynamics is again left open
47  * to implementation.
48  *
49  * Mole fraction and Mass fraction vectors are assumed to be equal
50  * to x[0] = 1 y[0] = 1, respectively. Simplifications to the interface
51  * of setState_TPY() and setState_TPX() functions result and are made
52  * within the class.
53  *
54  * Note, this class can handle the thermodynamic description of one
55  * phase of one species. It can not handle the description of phase
56  * equilibrium between two phases of a stoichiometric compound
57  * (e.g. water liquid and water vapor, below the critical point).
58  * However, it may be used to describe the thermodynamics of one phase
59  * of such a compound even past the phase equilibrium point, up to the
60  * point where the phase itself ceases to be a stable phase.
61  *
62  * This class doesn't do much at the initialization level.
63  * Its SingleSpeciesTP::initThermo()
64  * member does check that one and only one species has been defined
65  * to occupy the phase.
66  *
67  * \nosubgrouping
68  */
70 {
71 
72 public:
73 
74  //! Base empty constructor.
76 
77  //! Copy constructor
78  /*!
79  * @param right Object to be copied
80  */
81  SingleSpeciesTP(const SingleSpeciesTP& right);
82 
83  //! Assignment operator
84  /*!
85  * @param right Object to be copied
86  */
88 
89  //! Destructor
90  virtual ~SingleSpeciesTP();
91 
92  //! Duplication function
93  /*!
94  * This virtual function is used to create a duplicate of the
95  * current phase. It's used to duplicate the phase when given
96  * a ThermoPhase pointer to the phase.
97  *
98  * @return It returns a ThermoPhase pointer.
99  */
101 
102  /**
103  *
104  * @name Information Methods
105  * @{
106  */
107 
108  /**
109  * Returns the equation of state type flag.
110  * This is a modified base class.
111  * Therefore, if not overridden in derivied classes,
112  * this call will throw an exception.
113  */
114  virtual int eosType() const;
115 
116  /**
117  * @}
118  * @name Molar Thermodynamic Properties of the Solution
119  *
120  * These functions are resolved at this level, by reference
121  * to the partial molar functions and standard state
122  * functions for species 0. Derived classes don't need
123  * to supply entries for these functions.
124  * @{
125  */
126 
127  /// Molar enthalpy. Units: J/kmol.
128  /*!
129  * This function is resolved here by calling the standard state
130  * thermo function.
131  */
132  doublereal enthalpy_mole() const;
133 
134  /// Molar internal energy. Units: J/kmol.
135  /*!
136  * This function is resolved here by calling the standard state
137  * thermo function.
138  */
139  doublereal intEnergy_mole() const;
140 
141  /// Molar entropy. Units: J/kmol/K.
142  /*!
143  * This function is resolved here by calling the standard state
144  * thermo function.
145  */
146  doublereal entropy_mole() const;
147 
148  /// Molar Gibbs function. Units: J/kmol.
149  /*!
150  * This function is resolved here by calling the standard state
151  * thermo function.
152  */
153  doublereal gibbs_mole() const;
154 
155  /// Molar heat capacity at constant pressure. Units: J/kmol/K.
156  /*!
157  * This function is resolved here by calling the standard state
158  * thermo function.
159  */
160  doublereal cp_mole() const;
161 
162  /// Molar heat capacity at constant volume. Units: J/kmol/K.
163  /*!
164  * This function is resolved here by calling the standard state
165  * thermo function.
166  */
167  doublereal cv_mole() const;
168 
169  /**
170  * @}
171  * @name Mechanical Properties
172  * @{
173  */
174 
175  /**
176  * @}
177  * @name Electric Potential
178  *
179  * The phase may be at some non-zero electrical
180  * potential. These methods set or get the value of the
181  * electric potential.
182  */
183  //@{
184 
185  /**
186  * @}
187  * @name Potential Energy
188  *
189  * Species may have an additional potential energy due to the
190  * presence of external gravitation or electric fields. These
191  * methods allow specifying a potential energy for individual
192  * species.
193  * @{
194  */
195 
196 
197 
198  /**
199  * @}
200  * @name Activities, Standard State, and Activity Concentrations
201  *
202  * The activity \f$a_k\f$ of a species in solution is
203  * related to the chemical potential by \f[ \mu_k = \mu_k^0(T)
204  * + \hat R T \log a_k. \f] The quantity \f$\mu_k^0(T)\f$ is
205  * the chemical potential at unit activity, which depends only
206  * on temperature.
207  * @{
208  */
209 
210  /**
211  * Get the array of non-dimensional activities at
212  * the current solution temperature, pressure, and
213  * solution concentration.
214  *
215  * We redefine this function to just return 1.0 here.
216  *
217  * @param a Output vector of activities. Length: 1.
218  */
219  virtual void getActivities(doublereal* a) const {
220  a[0] = 1.0;
221  }
222 
223  /**
224  * Get the array of non-dimensional activity coefficients at
225  * the current solution temperature, pressure, and
226  * solution concentration.
227  *
228  * @param ac Output vector of activity coefficients. Length: 1.
229  */
230  virtual void getActivityCoefficients(doublereal* ac) const {
231  if (m_kk == 1) {
232  ac[0] = 1.0;
233  } else {
234  err("getActivityCoefficients");
235  }
236  }
237 
238  //@}
239  /// @name Partial Molar Properties of the Solution
240  ///
241  /// These functions are resolved at this level, by reference
242  /// to the partial molar functions and standard state
243  /// functions for species 0. Derived classes don't need
244  /// to supply entries for these functions.
245  //@{
246 
247  /*
248  * These functions are all resolved here to point to the
249  * standard state functions for species 0
250  */
251 
252  //! Get the array of non-dimensional species chemical potentials
253  //! These are partial molar Gibbs free energies.
254  /*!
255  * These are the phase, partial molar, and the standard state
256  * dimensionless chemical potentials.
257  * \f$ \mu_k / \hat R T \f$.
258  *
259  * Units: unitless
260  *
261  * @param murt On return, Contains the chemical potential / RT of the single species
262  * and the phase. Units are unitless. Length = 1
263  */
264  void getChemPotentials_RT(doublereal* murt) const;
265 
266  //! Get the array of chemical potentials
267  /*!
268  * These are the phase, partial molar, and the standard state chemical potentials.
269  * \f$ \mu(T,P) = \mu^0_k(T,P) \f$.
270  *
271  * @param mu On return, Contains the chemical potential of the single species
272  * and the phase. Units are J / kmol . Length = 1
273  */
274  void getChemPotentials(doublereal* mu) const;
275 
276  //! Get the species electrochemical potentials. Units: J/kmol.
277  /*!
278  * This method adds a term \f$ Fz_k \phi_k \f$ to
279  * each chemical potential.
280  *
281  * This is resolved here. A single species phase
282  * is not allowed to have anything other than a zero charge.
283  *
284  * @param mu On return, Contains the electrochemical potential of the single species
285  * and the phase. Units J/kmol . Length = 1
286  */
287  void getElectrochemPotentials(doublereal* mu) const;
288 
289  //! Get the species partial molar enthalpies. Units: J/kmol.
290  /*!
291  * These are the phase enthalpies. \f$ h_k \f$.
292  *
293  * This function is resolved here by calling the standard state
294  * thermo function.
295  *
296  * @param hbar Output vector of species partial molar enthalpies.
297  * Length: 1. units are J/kmol.
298  */
299  void getPartialMolarEnthalpies(doublereal* hbar) const;
300 
301 
302  //! Get the species partial molar internal energies. Units: J/kmol.
303  /*!
304  * These are the phase internal energies. \f$ u_k \f$.
305  *
306  * This member function is resolved here. A single species phase obtains its
307  * thermo from the standard state function.
308  *
309  * @param ubar On return, Contains the internal energy of the single species
310  * and the phase. Units are J / kmol . Length = 1
311  */
312  virtual void getPartialMolarIntEnergies(doublereal* ubar) const;
313 
314  //! Get the species partial molar entropy. Units: J/kmol K.
315  /*!
316  * This is the phase entropy. \f$ s(T,P) = s_o(T,P) \f$.
317  *
318  * This member function is resolved here. A single species phase obtains its
319  * thermo from the standard state function.
320  *
321  * @param sbar On return, Contains the entropy of the single species
322  * and the phase. Units are J / kmol / K . Length = 1
323  */
324  void getPartialMolarEntropies(doublereal* sbar) const;
325 
326  //! Get the species partial molar Heat Capacities. Units: J/ kmol /K.
327  /*!
328  * This is the phase heat capacity. \f$ Cp(T,P) = Cp_o(T,P) \f$.
329  *
330  * This member function is resolved here. A single species phase obtains its
331  * thermo from the standard state function.
332  *
333  * @param cpbar On return, Contains the heat capacity of the single species
334  * and the phase. Units are J / kmol / K . Length = 1
335  */
336  void getPartialMolarCp(doublereal* cpbar) const;
337 
338  //! Get the species partial molar volumes. Units: m^3/kmol.
339  /*!
340  * This is the phase molar volume. \f$ V(T,P) = V_o(T,P) \f$.
341  *
342  * This member function is resolved here. A single species phase obtains its
343  * thermo from the standard state function.
344  *
345  * @param vbar On return, Contains the molar volume of the single species
346  * and the phase. Units are m^3 / kmol. Length = 1
347  */
348  void getPartialMolarVolumes(doublereal* vbar) const;
349 
350  //@}
351  /// @name Properties of the Standard State of the Species in the Solution
352  /// These functions are the primary way real properties are
353  /// supplied to derived thermodynamics classes of SingleSpeciesTP.
354  /// These functions must be supplied in derived classes. They
355  /// are not resolved at the SingleSpeciesTP level.
356  //@{
357 
358 
359  /**
360  * Get the dimensional Gibbs functions for the standard
361  * state of the species at the current T and P.
362  *
363  * This function is resolved here by referencing getGibbs_RT().
364  *
365  * @param gpure returns a vector of size 1, containing the Gibbs function
366  * Units: J/kmol.
367  */
368  void getPureGibbs(doublereal* gpure) const;
369 
370  //! Get the molar volumes of each species in their standard
371  //! states at the current <I>T</I> and <I>P</I> of the solution.
372  /*!
373  * units = m^3 / kmol
374  *
375  * We resolve this function at this level, by assigning
376  * the molecular weight divided by the phase density
377  *
378  * @param vbar On output this contains the standard volume of the species
379  * and phase (m^3/kmol). Vector of length 1
380  */
381  void getStandardVolumes(doublereal* vbar) const;
382 
383 
384  //@}
385  /// @name Thermodynamic Values for the Species Reference State
386  ///
387  /// Almost all functions in this group are resolved by this
388  /// class. It is assumed that the m_spthermo species thermo
389  /// pointer is populated and yields the reference state thermodynamics
390  /// The internal energy function is not given by this
391  /// class, since it would involve a specification of the
392  /// equation of state.
393  //@{
394 
395 #ifdef H298MODIFY_CAPABILITY
396 
397  //! Modify the value of the 298 K Heat of Formation of one species in the phase (J kmol-1)
398  /*!
399  * The 298K heat of formation is defined as the enthalpy change to create the standard state
400  * of the species from its constituent elements in their standard states at 298 K and 1 bar.
401  *
402  * @param k Species k
403  * @param Hf298New Specify the new value of the Heat of Formation at 298K and 1 bar
404  */
405  virtual void modifyOneHf298SS(const int k, const doublereal Hf298New) {
406  m_spthermo->modifyOneHf298(k, Hf298New);
407  m_tlast += 0.0001234;
408  }
409 #endif
410 
411  /*!
412  * Returns the vector of nondimensional
413  * enthalpies of the reference state at the current temperature
414  * of the solution and the reference pressure for the species.
415  *
416  * This function is resolved in this class. It is assumed that the m_spthermo species thermo
417  * pointer is populated and yields the reference state.
418  *
419  * @param hrt Output vector containing the nondimensional reference state enthalpies
420  * Length: m_kk.
421  */
422  virtual void getEnthalpy_RT_ref(doublereal* hrt) const;
423 
424  /*!
425  * Returns the vector of nondimensional
426  * enthalpies of the reference state at the current temperature
427  * of the solution and the reference pressure for the species.
428  *
429  * This function is resolved in this class. It is assumed that the m_spthermo species thermo
430  * pointer is populated and yields the reference state.
431  *
432  * @param grt Output vector containing the nondimensional reference state
433  * Gibbs Free energies. Length: m_kk.
434  */
435  virtual void getGibbs_RT_ref(doublereal* grt) const;
436 
437 
438  /*!
439  * Returns the vector of the
440  * gibbs function of the reference state at the current temperature
441  * of the solution and the reference pressure for the species.
442  * units = J/kmol
443  *
444  * This function is resolved in this class. It is assumed that the m_spthermo species thermo
445  * pointer is populated and yields the reference state.
446  *
447  * @param g Output vector containing the reference state
448  * Gibbs Free energies. Length: m_kk. Units: J/kmol.
449  */
450  virtual void getGibbs_ref(doublereal* g) const;
451 
452  /*!
453  * Returns the vector of nondimensional
454  * entropies of the reference state at the current temperature
455  * of the solution and the reference pressure for each species.
456  *
457  * This function is resolved in this class. It is assumed that the m_spthermo species thermo
458  * pointer is populated and yields the reference state.
459  *
460  * @param er Output vector containing the nondimensional reference state
461  * entropies. Length: m_kk.
462  */
463  virtual void getEntropy_R_ref(doublereal* er) const;
464 
465  /*!
466  * Returns the vector of nondimensional
467  * constant pressure heat capacities of the reference state
468  * at the current temperature of the solution
469  * and reference pressure for each species.
470  *
471  * This function is resolved in this class. It is assumed that the m_spthermo species thermo
472  * pointer is populated and yields the reference state.
473  *
474  * @param cprt Output vector of nondimensional reference state
475  * heat capacities at constant pressure for the species.
476  * Length: m_kk
477  */
478  virtual void getCp_R_ref(doublereal* cprt) const;
479 
480  /**
481  * @name Setting the State
482  *
483  * These methods set all or part of the thermodynamic
484  * state.
485  * @{
486  */
487 
488  //! Set the temperature (K), pressure (Pa), and mole fractions.
489  /*!
490  * Note, the mole fractions are set to X[0] = 1.0.
491  * Setting the pressure may involve the solution of a nonlinear equation.
492  *
493  * @param t Temperature (K)
494  * @param p Pressure (Pa)
495  * @param x Vector of mole fractions.
496  * Length is equal to m_kk.
497  */
498  void setState_TPX(doublereal t, doublereal p, const doublereal* x);
499 
500  //! Set the temperature (K), pressure (Pa), and mole fractions.
501  /*!
502  * Note, the mole fractions are set to X[0] = 1.0.
503  * Setting the pressure may involve the solution of a nonlinear equation.
504  *
505  * @param t Temperature (K)
506  * @param p Pressure (Pa)
507  * @param x String containing a composition map of the mole fractions. Species not in
508  * the composition map are assumed to have zero mole fraction
509  */
510  void setState_TPX(doublereal t, doublereal p, compositionMap& x);
511 
512  //! Set the temperature (K), pressure (Pa), and mole fractions.
513  /*!
514  * Note, the mole fractions are set to X[0] = 1.0.
515  * Setting the pressure may involve the solution of a nonlinear equation.
516  *
517  * @param t Temperature (K)
518  * @param p Pressure (Pa)
519  * @param x String containing a composition map of the mole fractions. Species not in
520  * the composition map are assumed to have zero mole fraction
521  */
522  void setState_TPX(doublereal t, doublereal p, const std::string& x);
523 
524  //! Set the internally stored temperature (K), pressure (Pa), and mass fractions of the phase.
525  /*!
526  * Note, the mass fractions are set to Y[0] = 1.0.
527  * Setting the pressure may involve the solution of a nonlinear equation.
528  *
529  * @param t Temperature (K)
530  * @param p Pressure (Pa)
531  * @param y Vector of mass fractions.
532  * Length is equal to m_kk.
533  */
534  void setState_TPY(doublereal t, doublereal p, const doublereal* y);
535 
536  //! Set the internally stored temperature (K), pressure (Pa), and mass fractions of the phase
537  /*!
538  * Note, the mass fractions are set to Y[0] = 1.0.
539  * Setting the pressure may involve the solution of a nonlinear equation.
540  *
541  * @param t Temperature (K)
542  * @param p Pressure (Pa)
543  * @param y Composition map of mass fractions. Species not in
544  * the composition map are assumed to have zero mass fraction
545  */
546  void setState_TPY(doublereal t, doublereal p, compositionMap& y);
547 
548  //! Set the internally stored temperature (K), pressure (Pa), and mass fractions of the phase
549  /*!
550  * Note, the mass fractions are set to Y[0] = 1.0.
551  * Setting the pressure may involve the solution of a nonlinear equation.
552  *
553  * @param t Temperature (K)
554  * @param p Pressure (Pa)
555  * @param y String containing a composition map of the mass fractions. Species not in
556  * the composition map are assumed to have zero mass fraction
557  */
558  void setState_TPY(doublereal t, doublereal p, const std::string& y);
559 
560 
561  //! Set the pressure (Pa) and mole fractions.
562  /*!
563  * Note, the mole fractions are set to X[0] = 1.0.
564  * Setting the pressure may involve the solution of a nonlinear equation.
565  *
566  * @param p Pressure (Pa)
567  * @param x Vector of mole fractions.
568  * Length is equal to m_kk.
569  */
570  void setState_PX(doublereal p, doublereal* x);
571 
572  //! Set the internally stored pressure (Pa) and mass fractions.
573  /*!
574  * Note, the mass fractions are set to Y[0] = 1.0.
575  * Note, the temperature is held constant during this operation.
576  * Setting the pressure may involve the solution of a nonlinear equation.
577  *
578  * @param p Pressure (Pa)
579  * @param y Vector of mass fractions.
580  * Length is equal to m_kk.
581  */
582  void setState_PY(doublereal p, doublereal* y);
583 
584  //! Set the internally stored specific enthalpy (J/kg) and pressure (Pa) of the phase.
585  /*!
586  * @param h Specific enthalpy (J/kg)
587  * @param p Pressure (Pa)
588  * @param tol Optional parameter setting the tolerance of the
589  * calculation.
590  */
591  virtual void setState_HP(doublereal h, doublereal p,
592  doublereal tol = 1.e-8);
593 
594  //! Set the specific internal energy (J/kg) and specific volume (m^3/kg).
595  /*!
596  * This function fixes the internal state of the phase so that
597  * the specific internal energy and specific volume have the value of the input parameters.
598  *
599  * @param u specific internal energy (J/kg)
600  * @param v specific volume (m^3/kg).
601  * @param tol Optional parameter setting the tolerance of the
602  * calculation.
603  */
604  virtual void setState_UV(doublereal u, doublereal v,
605  doublereal tol = 1.e-8);
606 
607  //! Set the specific entropy (J/kg/K) and pressure (Pa).
608  /*!
609  * This function fixes the internal state of the phase so that
610  * the specific entropy and the pressure have the value of the input parameters.
611  *
612  * @param s specific entropy (J/kg/K)
613  * @param p specific pressure (Pa).
614  * @param tol Optional parameter setting the tolerance of the
615  * calculation.
616  */
617  virtual void setState_SP(doublereal s, doublereal p,
618  doublereal tol = 1.e-8);
619 
620  //! Set the specific entropy (J/kg/K) and specific volume (m^3/kg).
621  /*!
622  * This function fixes the internal state of the phase so that
623  * the specific entropy and specific volume have the value of the input parameters.
624  *
625  * @param s specific entropy (J/kg/K)
626  * @param v specific volume (m^3/kg).
627  * @param tol Optional parameter setting the tolerance of the
628  * calculation.
629  */
630  virtual void setState_SV(doublereal s, doublereal v,
631  doublereal tol = 1.e-8);
632 
633  /**
634  * @internal
635  * Set equation of state parameters. The number and meaning of
636  * these depends on the subclass.
637  * @param n number of parameters
638  * @param c array of n coefficients
639  *
640  */
641  virtual void setParameters(int n, doublereal* const c) {}
642 
643  virtual void getParameters(int& n, doublereal* const c) const {}
644 
645  /**
646  * Set equation of state parameter values from XML
647  * entries. This method is called by function importPhase in
648  * file importCTML.cpp when processing a phase definition in
649  * an input file. It should be overloaded in subclasses to set
650  * any parameters that are specific to that particular phase
651  * model.
652  *
653  * @param eosdata An XML_Node object corresponding to
654  * the "thermo" entry for this phase in the input file.
655  */
656  virtual void setParametersFromXML(const XML_Node& eosdata) {}
657 
658  //---------------------------------------------------------
659  /// @name Critical state properties.
660  /// These methods are only implemented by some subclasses.
661 
662  //@{
663 
664 
665 
666  //@}
667 
668  /// @name Saturation properties.
669  /// These methods are only implemented by subclasses that
670  /// implement full liquid-vapor equations of state.
671  ///
672  virtual doublereal satTemperature(doublereal p) const {
673  err("satTemperature");
674  return -1.0;
675  }
676 
677  virtual doublereal satPressure(doublereal t) const {
678  err("satPressure");
679  return -1.0;
680  }
681 
682  virtual doublereal vaporFraction() const {
683  err("vaprFraction");
684  return -1.0;
685  }
686 
687  virtual void setState_Tsat(doublereal t, doublereal x) {
688  err("setState_sat");
689  }
690 
691  virtual void setState_Psat(doublereal p, doublereal x) {
692  err("setState_sat");
693  }
694 
695  //@}
696 
697 
698  /**
699  * @internal Initialize.
700  *
701  * This method is provided to allow
702  * subclasses to perform any initialization required after all
703  * species have been added. For example, it might be used to
704  * resize internal work arrays that must have an entry for
705  * each species. When importing a CTML phase
706  * description, this method is called just prior to returning
707  * from function importPhase().
708  *
709  * Inheriting objects should call this function
710  *
711  * This version sets the mole fraction vector to x[0] = 1.0, and then
712  * calls the ThermoPhase::initThermo() function.
713  *
714  * @see importCTML.cpp
715  */
716  virtual void initThermo();
717 
718 
719 protected:
720 
721  //! Lower value of the temperature for which reference thermo is valid
722  doublereal m_tmin;
723  //! Upper value of the temperature for which reference thermo is valid
724  doublereal m_tmax;
725 
726  //! The current pressure of the solution (Pa)
727  /*!
728  * It gets initialized to 1 atm.
729  */
730  doublereal m_press;
731 
732  /*!
733  * Reference pressure (Pa) must be the same for all species
734  * - defaults to 1 atm.
735  */
736  doublereal m_p0;
737 
738  //! Last temperature used to evaluate the thermodynamic polynomial.
739  mutable doublereal m_tlast;
740 
741  //! Dimensionless enthalpy at the (mtlast, m_p0)
743  //! Dimensionless heat capacity at the (mtlast, m_p0)
745  //! Dimensionless entropy at the (mtlast, m_p0)
746  mutable vector_fp m_s0_R;
747 
748 protected:
749  /**
750  * @internal
751  * This crucial internal routine calls the species thermo
752  * update program to calculate new species Cp0, H0, and
753  * S0 whenever the temperature has changed.
754  */
755  void _updateThermo() const;
756 
757 private:
758 
759  //! Error return for unhandled cases
760  /*!
761  * @param msg String message
762  */
763  doublereal err(std::string msg) const;
764 };
765 
766 }
767 
768 #endif
769 
770 
771