Cantera  2.1.2
LatticePhase.cpp
Go to the documentation of this file.
1 /**
2  *
3  * @file LatticePhase.cpp
4  * Definitions for a simple thermodynamics model of a bulk phase
5  * derived from ThermoPhase,
6  * assuming a lattice of solid atoms
7  * (see \ref thermoprops and class \link Cantera::LatticePhase LatticePhase\endlink).
8  *
9  */
10 #include "cantera/base/config.h"
11 #include "cantera/base/ct_defs.h"
17 
18 namespace Cantera
19 {
20 
22  m_Pref(OneAtm),
23  m_Pcurrent(OneAtm),
24  m_tlast(0.0),
25  m_speciesMolarVolume(0),
26  m_site_density(0.0)
27 {
28 }
29 
31  m_Pref(OneAtm),
32  m_Pcurrent(OneAtm),
33  m_tlast(0.0),
34  m_speciesMolarVolume(0),
35  m_site_density(0.0)
36 {
37  *this = operator=(right);
38 }
39 
41 {
42  if (&right != this) {
44  m_Pref = right.m_Pref;
45  m_Pcurrent = right.m_Pcurrent;
46  m_tlast = right.m_tlast;
47  m_h0_RT = right.m_h0_RT;
48  m_cp0_R = right.m_cp0_R;
49  m_g0_RT = right.m_g0_RT;
50  m_s0_R = right.m_s0_R;
51  m_vacancy = right.m_vacancy;
54  }
55  return *this;
56 }
57 
58 LatticePhase::LatticePhase(const std::string& inputFile, const std::string& id_)
59 {
60  initThermoFile(inputFile, id_);
61 }
62 
63 LatticePhase::LatticePhase(XML_Node& phaseRef, const std::string& id_)
64 {
65  importPhase(*findXMLPhase(&phaseRef, id_), this);
66 }
67 
69 {
70  return new LatticePhase(*this);
71 }
72 
73 doublereal LatticePhase::enthalpy_mole() const
74 {
75  doublereal p0 = m_spthermo->refPressure();
76  return GasConstant * temperature() *
77  mean_X(&enthalpy_RT_ref()[0])
78  + (pressure() - p0)/molarDensity();
79 }
80 
81 doublereal LatticePhase::intEnergy_mole() const
82 {
83  doublereal p0 = m_spthermo->refPressure();
84  return GasConstant * temperature() *
85  mean_X(&enthalpy_RT_ref()[0])
86  - p0/molarDensity();
87 }
88 
89 doublereal LatticePhase::entropy_mole() const
90 {
91  return GasConstant * (mean_X(&entropy_R_ref()[0]) -
92  sum_xlogx());
93 }
94 
95 doublereal LatticePhase::gibbs_mole() const
96 {
97  return enthalpy_mole() - temperature() * entropy_mole();
98 }
99 
100 doublereal LatticePhase::cp_mole() const
101 {
102  return GasConstant * mean_X(&cp_R_ref()[0]);
103 }
104 
105 doublereal LatticePhase::cv_mole() const
106 {
107  return cp_mole();
108 }
109 
111 {
113  doublereal mw = meanMolecularWeight();
114  doublereal dens = mw * m_site_density;
115  /*
116  * Calculate the molarVolume of the solution (m**3 kmol-1)
117  */
118  // const doublereal * const dtmp = moleFractdivMMW();
119  // doublereal invDens = dot(m_speciesMolarVolume.begin(), m_speciesMolarVolume.end(), dtmp);
120  /*
121  * Set the density in the parent State object directly,
122  * by calling the Phase::setDensity() function.
123  */
124  // doublereal dens = 1.0/invDens;
125  // Phase::setDensity(dens);
126  return dens;
127 }
128 
129 void LatticePhase::setPressure(doublereal p)
130 {
131  m_Pcurrent = p;
132  calcDensity();
133 }
134 
135 void LatticePhase::setMoleFractions(const doublereal* const x)
136 {
138  calcDensity();
139 }
140 
141 void LatticePhase::setMoleFractions_NoNorm(const doublereal* const x)
142 {
144  calcDensity();
145 }
146 
147 void LatticePhase::setMassFractions(const doublereal* const y)
148 {
150  calcDensity();
151 }
152 
153 void LatticePhase::setMassFractions_NoNorm(const doublereal* const y)
154 {
156  calcDensity();
157 }
158 
159 void LatticePhase::setConcentrations(const doublereal* const c)
160 {
162  calcDensity();
163 }
164 
166 {
167  getMoleFractions(c);
168 }
169 
170 void LatticePhase::getActivityCoefficients(doublereal* ac) const
171 {
172  for (size_t k = 0; k < m_kk; k++) {
173  ac[k] = 1.0;
174  }
175 }
176 
177 doublereal LatticePhase::standardConcentration(size_t k) const
178 {
179  return 1.0;
180 }
181 
182 doublereal LatticePhase::logStandardConc(size_t k) const
183 {
184  return 0.0;
185 }
186 
187 void LatticePhase::getChemPotentials(doublereal* mu) const
188 {
189  doublereal delta_p = m_Pcurrent - m_Pref;
190  doublereal xx;
191  doublereal RT = temperature() * GasConstant;
192  const vector_fp& g_RT = gibbs_RT_ref();
193  for (size_t k = 0; k < m_kk; k++) {
194  xx = std::max(SmallNumber, moleFraction(k));
195  mu[k] = RT * (g_RT[k] + log(xx))
196  + delta_p * m_speciesMolarVolume[k];
197  }
198 
199 }
200 
201 void LatticePhase::getPartialMolarEnthalpies(doublereal* hbar) const
202 {
203  const vector_fp& _h = enthalpy_RT_ref();
204  doublereal rt = GasConstant * temperature();
205  scale(_h.begin(), _h.end(), hbar, rt);
206 }
207 
208 void LatticePhase::getPartialMolarEntropies(doublereal* sbar) const
209 {
210  const vector_fp& _s = entropy_R_ref();
211  doublereal r = GasConstant;
212  doublereal xx;
213  for (size_t k = 0; k < m_kk; k++) {
214  xx = std::max(SmallNumber, moleFraction(k));
215  sbar[k] = r * (_s[k] - log(xx));
216  }
217 }
218 
219 void LatticePhase::getPartialMolarCp(doublereal* cpbar) const
220 {
221  getCp_R(cpbar);
222  for (size_t k = 0; k < m_kk; k++) {
223  cpbar[k] *= GasConstant;
224  }
225 }
226 
227 void LatticePhase::getPartialMolarVolumes(doublereal* vbar) const
228 {
229  getStandardVolumes(vbar);
230 }
231 
232 void LatticePhase::getStandardChemPotentials(doublereal* mu0) const
233 {
234  const vector_fp& gibbsrt = gibbs_RT_ref();
235  scale(gibbsrt.begin(), gibbsrt.end(), mu0, _RT());
236 }
237 
238 void LatticePhase::getPureGibbs(doublereal* gpure) const
239 {
240  const vector_fp& gibbsrt = gibbs_RT_ref();
241  doublereal delta_p = (m_Pcurrent - m_Pref);
242  double RT = GasConstant * temperature();
243  for (size_t k = 0; k < m_kk; k++) {
244  gpure[k] = RT * gibbsrt[k] + delta_p * m_speciesMolarVolume[k];
245  }
246 }
247 
248 void LatticePhase::getEnthalpy_RT(doublereal* hrt) const
249 {
250  const vector_fp& _h = enthalpy_RT_ref();
251  doublereal delta_prt = ((m_Pcurrent - m_Pref) / (GasConstant * temperature()));
252  for (size_t k = 0; k < m_kk; k++) {
253  hrt[k] = _h[k] + delta_prt * m_speciesMolarVolume[k];
254  }
255 }
256 
257 void LatticePhase::getEntropy_R(doublereal* sr) const
258 {
259  const vector_fp& _s = entropy_R_ref();
260  std::copy(_s.begin(), _s.end(), sr);
261 }
262 
263 void LatticePhase::getGibbs_RT(doublereal* grt) const
264 {
265  const vector_fp& gibbsrt = gibbs_RT_ref();
266  doublereal RT = _RT();
267  doublereal delta_prt = (m_Pcurrent - m_Pref)/ RT;
268  for (size_t k = 0; k < m_kk; k++) {
269  grt[k] = gibbsrt[k] + delta_prt * m_speciesMolarVolume[k];
270  }
271 }
272 
273 void LatticePhase::getGibbs_ref(doublereal* g) const
274 {
275  getGibbs_RT_ref(g);
276  for (size_t k = 0; k < m_kk; k++) {
277  g[k] *= GasConstant * temperature();
278  }
279 }
280 
281 void LatticePhase::getCp_R(doublereal* cpr) const
282 {
283  const vector_fp& _cpr = cp_R_ref();
284  std::copy(_cpr.begin(), _cpr.end(), cpr);
285 }
286 
287 void LatticePhase::getStandardVolumes(doublereal* vbar) const
288 {
289  copy(m_speciesMolarVolume.begin(), m_speciesMolarVolume.end(), vbar);
290 }
291 
293 {
294  _updateThermo();
295  return m_h0_RT;
296 }
297 
299 {
300  _updateThermo();
301  return m_g0_RT;
302 }
303 
304 void LatticePhase::getGibbs_RT_ref(doublereal* grt) const
305 {
306  _updateThermo();
307  for (size_t k = 0; k < m_kk; k++) {
308  grt[k] = m_g0_RT[k];
309  }
310 }
311 
313 {
314  _updateThermo();
315  return m_s0_R;
316 }
317 
319 {
320  _updateThermo();
321  return m_cp0_R;
322 }
323 
325 {
326  m_Pref = refPressure();
327  size_t leng = m_kk;
328  m_h0_RT.resize(leng);
329  m_g0_RT.resize(leng);
330  m_cp0_R.resize(leng);
331  m_s0_R.resize(leng);
332  m_speciesMolarVolume.resize(leng, 0.0);
333 
335 }
336 
337 void LatticePhase::initThermoXML(XML_Node& phaseNode, const std::string& id_)
338 {
339  std::string idattrib = phaseNode.id();
340  if (!id_.empty() && id_ != idattrib) {
341  throw CanteraError("LatticePhase::initThermoXML",
342  "ids don't match");
343  }
344 
345  std::string subname = "LatticePhase::initThermoXML";
346  /*
347  * Check on the thermo field. Must have:
348  * <thermo model="Lattice" />
349  */
350  if (phaseNode.hasChild("thermo")) {
351  XML_Node& thNode = phaseNode.child("thermo");
352  std::string mStringa = thNode.attrib("model");
353  std::string mString = lowercase(mStringa);
354  if (mString != "lattice") {
355  throw CanteraError(subname.c_str(),
356  "Unknown thermo model: " + mStringa);
357  }
358  } else {
359  throw CanteraError(subname.c_str(),
360  "Unspecified thermo model");
361  }
362  /*
363  * Now go get the molar volumes. use the default if not found
364  */
365  XML_Node& speciesList = phaseNode.child("speciesArray");
366  XML_Node* speciesDB = get_XML_NameID("speciesData", speciesList["datasrc"], &phaseNode.root());
367  const std::vector<std::string> &sss = speciesNames();
368 
369  for (size_t k = 0; k < m_kk; k++) {
371  XML_Node* s = speciesDB->findByAttr("name", sss[k]);
372  if (!s) {
373  throw CanteraError(" LatticePhase::initThermoXML", "database problems");
374  }
375  XML_Node* ss = s->findByName("standardState");
376  if (ss) {
377  if (ss->findByName("molarVolume")) {
378  m_speciesMolarVolume[k] = ctml::getFloat(*ss, "molarVolume", "toSI");
379  }
380  }
381  }
382 
383  /*
384  * Call the base initThermo, which handles setting the initial
385  * state.
386  */
387  ThermoPhase::initThermoXML(phaseNode, id_);
388 }
389 
391 {
392  doublereal tnow = temperature();
393  if (m_tlast != tnow) {
394  m_spthermo->update(tnow, &m_cp0_R[0], &m_h0_RT[0], &m_s0_R[0]);
395  m_tlast = tnow;
396  for (size_t k = 0; k < m_kk; k++) {
397  m_g0_RT[k] = m_h0_RT[k] - m_s0_R[k];
398  }
399  m_tlast = tnow;
400  }
401 }
402 
403 void LatticePhase::setParameters(int n, doublereal* const c)
404 {
405  warn_deprecated("LatticePhase::setParameters");
406  m_site_density = c[0];
408 }
409 
410 void LatticePhase::getParameters(int& n, doublereal* const c) const
411 {
412  warn_deprecated("LatticePhase::getParameters");
413  double d = molarDensity();
414  c[0] = d;
415  n = 1;
416 }
417 
419 {
420  eosdata._require("model", "Lattice");
421  m_site_density = ctml::getFloat(eosdata, "site_density", "toSI");
422  m_vacancy = ctml::getChildValue(eosdata, "vacancy_species");
423 }
424 
425 }
XML_Node * findByAttr(const std::string &attr, const std::string &val, int depth=100000) const
This routine carries out a recursive search for an XML node based on an attribute of each XML node...
Definition: xml.cpp:716
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:614
virtual void getStandardVolumes(doublereal *vol) const
Get the molar volumes of the species standard states at the current T and P of the solution...
doublereal m_site_density
Site Density of the lattice solid.
Definition: LatticePhase.h:950
doublereal m_tlast
Current value of the temperature (Kelvin)
Definition: LatticePhase.h:917
doublereal m_Pref
Reference state pressure.
Definition: LatticePhase.h:905
XML_Node * findXMLPhase(XML_Node *root, const std::string &idtarget)
Search an XML_Node tree for a named phase XML_Node.
Definition: xml.cpp:1104
const doublereal OneAtm
One atmosphere [Pa].
Definition: ct_defs.h:71
std::string attrib(const std::string &attr) const
Function returns the value of an attribute.
Definition: xml.cpp:534
virtual void getActivityConcentrations(doublereal *c) const
The activity of a species in solution is related to the chemical potential by The quantity is the ...
doublereal _RT() const
Return the Gas Constant multiplied by the current temperature.
Definition: ThermoPhase.h:977
doublereal calcDensity()
Calculate the density of the mixture using the partial molar volumes and mole fractions as input...
vector_fp m_g0_RT
Temporary storage for the reference state gibbs energies.
Definition: LatticePhase.h:926
virtual void initThermo()
Initialize the ThermoPhase object after all species have been set up.
ThermoPhase & operator=(const ThermoPhase &right)
Assignment operator.
Definition: ThermoPhase.cpp:57
vector_fp m_s0_R
Temporary storage for the reference state entropies at the current temperature.
Definition: LatticePhase.h:929
virtual void getGibbs_RT(doublereal *grt) const
Get the nondimensional Gibbs functions for the species standard states at the current T and P of the ...
vector_fp m_h0_RT
Reference state enthalpies / RT.
Definition: LatticePhase.h:920
Headers for the factory class that can create known ThermoPhase objects (see Thermodynamic Properties...
virtual void getParameters(int &n, doublereal *const c) const
Get the equation of state parameters in a vector.
virtual void getGibbs_RT_ref(doublereal *grt) const
Returns the vector of nondimensional Gibbs Free Energies of the reference state at the current temper...
Class XML_Node is a tree-based representation of the contents of an XML file.
Definition: xml.h:100
This file contains definitions of terms that are used in internal routines and are unlikely to need m...
virtual void setParameters(int n, doublereal *const c)
Set the equation of state parameters from the argument list.
void warn_deprecated(const std::string &method, const std::string &extra)
Print a warning indicating that method is deprecated.
Definition: global.cpp:76
Virtual base class for the calculation of multiple-species thermodynamic reference-state property man...
doublereal getFloat(const Cantera::XML_Node &parent, const std::string &name, const std::string &type)
Get a floating-point value from a child element.
Definition: ctml.cpp:267
virtual void setPressure(doublereal p)
Set the internally stored pressure (Pa) at constant temperature and composition.
A simple thermodynamic model for a bulk phase, assuming a lattice of solid atoms. ...
Definition: LatticePhase.h:246
doublereal molarDensity() const
Molar density (kmol/m^3).
Definition: Phase.cpp:597
std::string lowercase(const std::string &s)
Cast a copy of a string to lower case.
Definition: stringUtils.cpp:58
virtual doublereal entropy_mole() const
Molar entropy of the solution. Units: J/kmol/K.
void getMoleFractions(doublereal *const x) const
Get the species mole fraction vector.
Definition: Phase.cpp:519
virtual void setParametersFromXML(const XML_Node &eosdata)
Set equation of state parameter values from XML entries.
virtual void getPartialMolarEnthalpies(doublereal *hbar) const
Returns an array of partial molar enthalpies for the species in the mixture.
std::string m_vacancy
String name for the species which represents a vacancy in the lattice.
Definition: LatticePhase.h:936
ThermoPhase * duplMyselfAsThermoPhase() const
Duplication function.
virtual void setMoleFractions_NoNorm(const doublereal *const x)
Set the mole fractions, but don't normalize them to one.
XML_Node & child(const size_t n) const
Return a changeable reference to the n'th child of the current node.
Definition: xml.cpp:584
LatticePhase & operator=(const LatticePhase &right)
Assignment operator.
virtual doublereal gibbs_mole() const
Molar gibbs free energy of the solution. Units: J/kmol.
Base class for a phase with thermodynamic properties.
Definition: ThermoPhase.h:101
virtual void getGibbs_ref(doublereal *g) const
Returns the vector of the gibbs function of the reference state at the current temperature of the sol...
virtual doublereal standardConcentration(size_t k=0) const
Return the standard concentration for the kth species.
doublereal mean_X(const doublereal *const Q) const
Evaluate the mole-fraction-weighted mean of an array Q.
Definition: Phase.cpp:623
const XML_Node * findByName(const std::string &nm, int depth=100000) const
This routine carries out a recursive search for an XML node based on the name of the node...
Definition: xml.cpp:754
bool importPhase(XML_Node &phase, ThermoPhase *th, SpeciesThermoFactory *spfactory)
Import a phase information into an empty thermophase object.
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...
doublereal sum_xlogx() const
Evaluate .
Definition: Phase.cpp:633
doublereal m_Pcurrent
The current pressure.
Definition: LatticePhase.h:914
virtual doublereal refPressure(size_t k=npos) const =0
The reference-state pressure for species k.
virtual void setMoleFractions(const doublereal *const x)
Set the mole fractions.
vector_fp m_cp0_R
Temporary storage for the reference state heat capacities.
Definition: LatticePhase.h:923
Base class for exceptions thrown by Cantera classes.
Definition: ctexceptions.h:68
virtual doublereal cv_mole() const
Molar heat capacity at constant volume of the solution.
virtual doublereal pressure() const
In this equation of state implementation, the density is a function only of the mole fractions...
Definition: LatticePhase.h:411
virtual void setConcentrations(const doublereal *const conc)
Set the concentrations to the specified values within the phase.
Definition: Phase.cpp:577
virtual void setMoleFractions(const doublereal *const x)
Set the mole fractions to the specified values There is no restriction on the sum of the mole fractio...
Definition: Phase.cpp:306
virtual void getPartialMolarVolumes(doublereal *vbar) const
Return an array of partial molar volumes for the species in the mixture.
bool hasChild(const std::string &ch) const
Tests whether the current node has a child node with a particular name.
Definition: xml.cpp:574
void _updateThermo() const
Update the species reference state thermodynamic functions.
const vector_fp & gibbs_RT_ref() const
Returns a reference to the dimensionless reference state Gibbs free energy vector.
virtual void setMolarDensity(const doublereal molarDensity)
Set the internally stored molar density (kmol/m^3) of the phase.
Definition: Phase.cpp:602
virtual void getCp_R(doublereal *cpr) const
Get the nondimensional Heat Capacities at constant pressure for the species standard states at the cu...
virtual doublereal refPressure() const
Returns the reference pressure in Pa.
Definition: ThermoPhase.h:159
virtual void setMassFractions_NoNorm(const doublereal *const y)
Set the mass fractions to the specified values without normalizing.
Definition: Phase.cpp:388
virtual void initThermo()
Initialize the ThermoPhase object after all species have been set up.
const std::vector< std::string > & speciesNames() const
Return a const reference to the vector of species names.
Definition: Phase.cpp:252
doublereal moleFraction(size_t k) const
Return the mole fraction of a single species.
Definition: Phase.cpp:524
virtual void getEntropy_R(doublereal *sr) const
Get the array of nondimensional Entropy functions for the species standard states at the current T an...
doublereal temperature() const
Temperature (K).
Definition: Phase.h:528
std::string id() const
Return the id attribute, if present.
Definition: xml.cpp:467
virtual void initThermoXML(XML_Node &phaseNode, const std::string &id)
Import and initialize a ThermoPhase object using an XML tree.
const doublereal SmallNumber
smallest number to compare to zero.
Definition: ct_defs.h:139
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:165
virtual void getStandardChemPotentials(doublereal *mu) const
Get the array of chemical potentials at unit activity for the species standard states at the current ...
void scale(InputIter begin, InputIter end, OutputIter out, S scale_factor)
Multiply elements of an array by a scale factor.
Definition: utilities.h:154
const vector_fp & enthalpy_RT_ref() const
Returns the vector of nondimensional Enthalpies of the reference state at the current temperature of ...
virtual doublereal enthalpy_mole() const
Return the Molar Enthalpy. Units: J/kmol.
vector_fp m_speciesMolarVolume
Vector of molar volumes for each species in the solution.
Definition: LatticePhase.h:942
doublereal meanMolecularWeight() const
The mean molecular weight. Units: (kg/kmol)
Definition: Phase.h:588
const doublereal GasConstant
Universal Gas Constant. [J/kmol/K].
Definition: ct_defs.h:66
Contains declarations for string manipulation functions within Cantera.
virtual void getEnthalpy_RT(doublereal *hrt) const
Get the nondimensional Enthalpy functions for the species standard states at their standard states at...
virtual void getPartialMolarCp(doublereal *cpbar) const
Returns an array of partial molar Heat Capacities at constant pressure of the species in the solution...
const vector_fp & entropy_R_ref() const
Returns a reference to the dimensionless reference state Entropy vector.
virtual doublereal intEnergy_mole() const
Molar internal energy of the solution. Units: J/kmol.
virtual void setMassFractions(const doublereal *const y)
Set the mass fractions to the specified values and normalize them.
Definition: Phase.cpp:374
virtual void setConcentrations(const doublereal *const c)
Set the concentration,.
size_t m_kk
Number of species in the phase.
Definition: Phase.h:716
const vector_fp & cp_R_ref() const
Returns a reference to the dimensionless reference state Heat Capacity vector.
virtual void update(doublereal T, doublereal *cp_R, doublereal *h_RT, doublereal *s_R) const =0
Compute the reference-state properties for all species.
virtual void initThermoFile(const std::string &inputFile, const std::string &id)
XML_Node & root() const
Return the root of the current XML_Node tree.
Definition: xml.cpp:1091
virtual void getActivityCoefficients(doublereal *ac) const
Get the array of non-dimensional activity coefficients at the current solution temperature, pressure, and solution concentration.
virtual doublereal logStandardConc(size_t k=0) const
Returns the natural logarithm of the standard concentration of the kth species.
std::string getChildValue(const Cantera::XML_Node &parent, const std::string &nameString)
This function reads a child node with the name, nameString, and returns its xml value as the return s...
Definition: ctml.cpp:164
virtual void initThermoXML(XML_Node &phaseNode, const std::string &id)
Import and initialize a ThermoPhase object using an XML tree.
virtual doublereal cp_mole() const
Molar heat capacity at constant pressure of the solution.
virtual void setMassFractions_NoNorm(const doublereal *const y)
Set the mass fractions, but don't normalize them to one.
SpeciesThermo * m_spthermo
Pointer to the calculation manager for species reference-state thermodynamic properties.
Definition: ThermoPhase.h:1625
XML_Node * get_XML_NameID(const std::string &nameTarget, const std::string &file_ID, XML_Node *root)
This routine will locate an XML node in either the input XML tree or in another input file specified ...
Definition: global.cpp:271
Header for a simple thermodynamics model of a bulk phase derived from ThermoPhase, assuming a lattice of solid atoms (see Thermodynamic Properties and class LatticePhase).
LatticePhase()
Base Empty constructor.
virtual void getPartialMolarEntropies(doublereal *sbar) const
Returns an array of partial molar entropies of the species in the solution.
virtual void setMassFractions(const doublereal *const y)
Set the mass fractions, and normalize them to one.
virtual void getChemPotentials(doublereal *mu) const
Get the species chemical potentials. Units: J/kmol.