Cantera  2.4.0
ConstDensityThermo.cpp
Go to the documentation of this file.
1 /**
2  * @file ConstDensityThermo.cpp
3  * Declarations for a Thermo manager for incompressible ThermoPhases
4  * (see \ref thermoprops and \link Cantera::ConstDensityThermo ConstDensityThermo
5 \endlink).
6  */
7 
8 // This file is part of Cantera. See License.txt in the top-level directory or
9 // at http://www.cantera.org/license.txt for license and copyright information.
10 
12 #include "cantera/base/ctml.h"
13 
14 namespace Cantera
15 {
16 
18 {
19  doublereal p0 = refPressure();
20  return RT() * mean_X(enthalpy_RT()) + (pressure() - p0)/molarDensity();
21 }
22 
24 {
25  return GasConstant * (mean_X(entropy_R()) - sum_xlogx());
26 }
27 
28 doublereal ConstDensityThermo::cp_mole() const
29 {
30  return GasConstant * mean_X(cp_R());
31 }
32 
33 doublereal ConstDensityThermo::cv_mole() const
34 {
35  return cp_mole();
36 }
37 
38 doublereal ConstDensityThermo::pressure() const
39 {
40  return m_press;
41 }
42 
44 {
45  m_press = p;
46 }
47 
49 {
51 }
52 
54 {
55  for (size_t k = 0; k < m_kk; k++) {
56  ac[k] = 1.0;
57  }
58 }
59 
61 {
62  return density()/molecularWeight(k);
63 }
64 
65 void ConstDensityThermo::getChemPotentials(doublereal* mu) const
66 {
67  doublereal vdp = (pressure() - refPressure())/
68  molarDensity();
69  const vector_fp& g_RT = gibbs_RT();
70  for (size_t k = 0; k < m_kk; k++) {
71  double xx = std::max(SmallNumber, moleFraction(k));
72  mu[k] = RT()*(g_RT[k] + log(xx)) + vdp;
73  }
74 }
75 
76 
78 {
79  getPureGibbs(mu0);
80 }
81 
82 bool ConstDensityThermo::addSpecies(shared_ptr<Species> spec)
83 {
84  bool added = ThermoPhase::addSpecies(spec);
85  if (added) {
86  m_h0_RT.push_back(0.0);
87  m_g0_RT.push_back(0.0);
88  m_cp0_R.push_back(0.0);
89  m_s0_R.push_back(0.0);
90  }
91  return added;
92 }
93 
95 {
96  doublereal tnow = temperature();
97  if (m_tlast != tnow) {
98  m_spthermo.update(tnow, &m_cp0_R[0], &m_h0_RT[0],
99  &m_s0_R[0]);
100  m_tlast = tnow;
101  for (size_t k = 0; k < m_kk; k++) {
102  m_g0_RT[k] = m_h0_RT[k] - m_s0_R[k];
103  }
104  m_tlast = tnow;
105  }
106 }
107 
109 {
110  eosdata._require("model","Incompressible");
111  doublereal rho = getFloat(eosdata, "density", "toSI");
112  setDensity(rho);
113 }
114 
115 }
virtual bool addSpecies(shared_ptr< Species > spec)
virtual void getPureGibbs(doublereal *gpure) const
Get the Gibbs functions for the standard state of the species at the current T and P of the solution...
vector_fp m_s0_R
Temporary storage for dimensionless reference state entropies.
virtual void getActivityConcentrations(doublereal *c) const
This method returns an array of generalized concentrations.
CTML ("Cantera Markup Language") is the variant of XML that Cantera uses to store data...
MultiSpeciesThermo m_spthermo
Pointer to the calculation manager for species reference-state thermodynamic properties.
Definition: ThermoPhase.h:1607
doublereal temperature() const
Temperature (K).
Definition: Phase.h:601
virtual void update(doublereal T, doublereal *cp_R, doublereal *h_RT, doublereal *s_R) const
Compute the reference-state properties for all species.
doublereal moleFraction(size_t k) const
Return the mole fraction of a single species.
Definition: Phase.cpp:471
doublereal sum_xlogx() const
Evaluate .
Definition: Phase.cpp:624
virtual void getActivityCoefficients(doublereal *ac) const
Get the array of non-dimensional molar-based activity coefficients at the current solution temperatur...
Class XML_Node is a tree-based representation of the contents of an XML file.
Definition: xml.h:97
vector_fp m_h0_RT
Temporary storage for dimensionless reference state enthalpies.
virtual doublereal density() const
Density (kg/m^3).
Definition: Phase.h:607
Header for a Thermo manager for incompressible ThermoPhases (see Thermodynamic Properties and ConstDe...
doublereal m_tlast
last value of the temperature processed by reference state
Definition: ThermoPhase.h:1643
doublereal m_press
Current pressure (Pa)
doublereal mean_X(const doublereal *const Q) const
Evaluate the mole-fraction-weighted mean of an array Q.
Definition: Phase.cpp:614
doublereal RT() const
Return the Gas Constant multiplied by the current temperature.
Definition: ThermoPhase.h:748
const vector_fp & enthalpy_RT() const
Returns a reference to the vector of nondimensional enthalpies of the reference state at the current ...
virtual doublereal pressure() const
Return the thermodynamic pressure (Pa).
void _require(const std::string &a, const std::string &v) const
Require that the current XML node have an attribute named by the first argument, a, and that this attribute have the the string value listed in the second argument, v.
Definition: xml.cpp:576
virtual void setPressure(doublereal p)
Set the internally stored pressure (Pa) at constant temperature and composition.
virtual doublereal entropy_mole() const
Molar entropy. Units: J/kmol/K.
doublereal molarDensity() const
Molar density (kmol/m^3).
Definition: Phase.cpp:590
virtual doublereal cp_mole() const
Molar heat capacity at constant pressure. Units: J/kmol/K.
const vector_fp & entropy_R() const
Returns a reference to the vector of nondimensional entropies of the reference state at the current t...
virtual doublereal enthalpy_mole() const
Molar enthalpy. Units: J/kmol.
virtual bool addSpecies(shared_ptr< Species > spec)
virtual doublereal cv_mole() const
Molar heat capacity at constant volume. Units: J/kmol/K.
virtual void setParametersFromXML(const XML_Node &eosdata)
Set equation of state parameter values from XML entries.
const vector_fp & cp_R() const
Returns a reference to the vector of nondimensional constant pressure heat capacities of the referenc...
const doublereal SmallNumber
smallest number to compare to zero.
Definition: ct_defs.h:126
std::vector< double > vector_fp
Turn on the use of stl vectors for the basic array type within cantera Vector of doubles.
Definition: ct_defs.h:157
virtual doublereal refPressure() const
Returns the reference pressure in Pa.
Definition: ThermoPhase.h:116
virtual void getChemPotentials(doublereal *mu) const
Get the species chemical potentials. Units: J/kmol.
const doublereal GasConstant
Universal Gas Constant. [J/kmol/K].
Definition: ct_defs.h:64
virtual void getStandardChemPotentials(doublereal *mu0) const
Get the array of chemical potentials at unit activity for the species at their standard states at the...
doublereal getFloat(const XML_Node &parent, const std::string &name, const std::string &type)
Get a floating-point value from a child element.
Definition: ctml.cpp:164
virtual doublereal standardConcentration(size_t k=0) const
Returns the standard Concentration in units of m3 kmol-1.
size_t m_kk
Number of species in the phase.
Definition: Phase.h:788
doublereal molecularWeight(size_t k) const
Molecular weight of species k.
Definition: Phase.cpp:420
vector_fp m_g0_RT
Temporary storage for dimensionless reference state Gibbs energies.
Namespace for the Cantera kernel.
Definition: AnyMap.cpp:8
void getConcentrations(doublereal *const c) const
Get the species concentrations (kmol/m^3).
Definition: Phase.cpp:519
vector_fp m_cp0_R
Temporary storage for dimensionless reference state heat capacities.
const vector_fp & gibbs_RT() const
Returns a reference to the vector of nondimensional Gibbs Free Energies of the reference state at the...
void _updateThermo() const
Function to update the reference state thermo functions.
virtual void setDensity(const doublereal density_)
Set the internally stored density (kg/m^3) of the phase.
Definition: Phase.h:622