Cantera  2.4.0
IdealSolidSolnPhase.cpp
Go to the documentation of this file.
1 /**
2  * @file IdealSolidSolnPhase.cpp Implementation file for an ideal solid
3  * solution model with incompressible thermodynamics (see \ref
4  * thermoprops and \link Cantera::IdealSolidSolnPhase
5  * IdealSolidSolnPhase\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 
14 #include "cantera/base/ctml.h"
15 #include "cantera/base/utilities.h"
16 
17 using namespace std;
18 
19 namespace Cantera
20 {
21 
22 IdealSolidSolnPhase::IdealSolidSolnPhase(int formGC) :
23  m_formGC(formGC),
24  m_Pref(OneAtm),
25  m_Pcurrent(OneAtm)
26 {
27  if (formGC < 0 || formGC > 2) {
28  throw CanteraError(" IdealSolidSolnPhase Constructor",
29  " Illegal value of formGC");
30  }
31 }
32 
33 IdealSolidSolnPhase::IdealSolidSolnPhase(const std::string& inputFile,
34  const std::string& id_, int formGC) :
35  m_formGC(formGC),
36  m_Pref(OneAtm),
37  m_Pcurrent(OneAtm)
38 {
39  if (formGC < 0 || formGC > 2) {
40  throw CanteraError(" IdealSolidSolnPhase Constructor",
41  " Illegal value of formGC");
42  }
43  initThermoFile(inputFile, id_);
44 }
45 
46 IdealSolidSolnPhase::IdealSolidSolnPhase(XML_Node& root, const std::string& id_,
47  int formGC) :
48  m_formGC(formGC),
49  m_Pref(OneAtm),
50  m_Pcurrent(OneAtm)
51 {
52  if (formGC < 0 || formGC > 2) {
53  throw CanteraError(" IdealSolidSolnPhase Constructor",
54  " Illegal value of formGC");
55  }
56  importPhase(root, this);
57 }
58 
59 // Molar Thermodynamic Properties of the Solution
60 
62 {
63  doublereal htp = RT() * mean_X(enthalpy_RT_ref());
64  return htp + (pressure() - m_Pref)/molarDensity();
65 }
66 
68 {
69  return GasConstant * (mean_X(entropy_R_ref()) - sum_xlogx());
70 }
71 
73 {
74  return RT() * (mean_X(gibbs_RT_ref()) + sum_xlogx());
75 }
76 
77 doublereal IdealSolidSolnPhase::cp_mole() const
78 {
79  return GasConstant * mean_X(cp_R_ref());
80 }
81 
82 // Mechanical Equation of State
83 
85 {
86  // Calculate the molarVolume of the solution (m**3 kmol-1)
87  const doublereal* const dtmp = moleFractdivMMW();
88  double invDens = dot(m_speciesMolarVolume.begin(),
89  m_speciesMolarVolume.end(), dtmp);
90 
91  // Set the density in the parent State object directly, by calling the
92  // Phase::setDensity() function.
93  Phase::setDensity(1.0/invDens);
94 }
95 
96 void IdealSolidSolnPhase::setDensity(const doublereal rho)
97 {
98  // Unless the input density is exactly equal to the density calculated and
99  // stored in the State object, we throw an exception. This is because the
100  // density is NOT an independent variable.
101  if (rho != density()) {
102  throw CanteraError("IdealSolidSolnPhase::setDensity",
103  "Density is not an independent variable");
104  }
105 }
106 
108 {
109  m_Pcurrent = p;
110  calcDensity();
111 }
112 
113 void IdealSolidSolnPhase::setMolarDensity(const doublereal n)
114 {
115  throw CanteraError("IdealSolidSolnPhase::setMolarDensity",
116  "Density is not an independent variable");
117 }
118 
120 {
122  calcDensity();
123 }
124 
125 // Chemical Potentials and Activities
126 
128 {
129  const doublereal* const dtmp = moleFractdivMMW();
130  const double mmw = meanMolecularWeight();
131  switch (m_formGC) {
132  case 0:
133  for (size_t k = 0; k < m_kk; k++) {
134  c[k] = dtmp[k] * mmw;
135  }
136  break;
137  case 1:
138  for (size_t k = 0; k < m_kk; k++) {
139  c[k] = dtmp[k] * mmw / m_speciesMolarVolume[k];
140  }
141  break;
142  case 2:
143  double atmp = mmw / m_speciesMolarVolume[m_kk-1];
144  for (size_t k = 0; k < m_kk; k++) {
145  c[k] = dtmp[k] * atmp;
146  }
147  break;
148  }
149 }
150 
152 {
153  switch (m_formGC) {
154  case 0:
155  return 1.0;
156  case 1:
157  return 1.0 / m_speciesMolarVolume[k];
158  case 2:
159  return 1.0/m_speciesMolarVolume[m_kk-1];
160  }
161  return 0.0;
162 }
163 
165 {
166  for (size_t k = 0; k < m_kk; k++) {
167  ac[k] = 1.0;
168  }
169 }
170 
171 void IdealSolidSolnPhase::getChemPotentials(doublereal* mu) const
172 {
173  doublereal delta_p = m_Pcurrent - m_Pref;
174  const vector_fp& g_RT = gibbs_RT_ref();
175  for (size_t k = 0; k < m_kk; k++) {
176  double xx = std::max(SmallNumber, moleFraction(k));
177  mu[k] = RT() * (g_RT[k] + log(xx))
178  + delta_p * m_speciesMolarVolume[k];
179  }
180 }
181 
183 {
184  doublereal delta_pdRT = (m_Pcurrent - m_Pref) / (temperature() * GasConstant);
185  const vector_fp& g_RT = gibbs_RT_ref();
186  for (size_t k = 0; k < m_kk; k++) {
187  double xx = std::max(SmallNumber, moleFraction(k));
188  mu[k] = (g_RT[k] + log(xx))
189  + delta_pdRT * m_speciesMolarVolume[k];
190  }
191 }
192 
193 // Partial Molar Properties
194 
196 {
197  const vector_fp& _h = enthalpy_RT_ref();
198  scale(_h.begin(), _h.end(), hbar, RT());
199 }
200 
202 {
203  const vector_fp& _s = entropy_R_ref();
204  for (size_t k = 0; k < m_kk; k++) {
205  double xx = std::max(SmallNumber, moleFraction(k));
206  sbar[k] = GasConstant * (_s[k] - log(xx));
207  }
208 }
209 
210 void IdealSolidSolnPhase::getPartialMolarCp(doublereal* cpbar) const
211 {
212  getCp_R(cpbar);
213  for (size_t k = 0; k < m_kk; k++) {
214  cpbar[k] *= GasConstant;
215  }
216 }
217 
219 {
220  getStandardVolumes(vbar);
221 }
222 
223 // Properties of the Standard State of the Species in the Solution
224 
225 void IdealSolidSolnPhase::getPureGibbs(doublereal* gpure) const
226 {
227  const vector_fp& gibbsrt = gibbs_RT_ref();
228  doublereal delta_p = (m_Pcurrent - m_Pref);
229  for (size_t k = 0; k < m_kk; k++) {
230  gpure[k] = RT() * gibbsrt[k] + delta_p * m_speciesMolarVolume[k];
231  }
232 }
233 
234 void IdealSolidSolnPhase::getGibbs_RT(doublereal* grt) const
235 {
236  const vector_fp& gibbsrt = gibbs_RT_ref();
237  doublereal delta_prt = (m_Pcurrent - m_Pref)/ RT();
238  for (size_t k = 0; k < m_kk; k++) {
239  grt[k] = gibbsrt[k] + delta_prt * m_speciesMolarVolume[k];
240  }
241 }
242 
243 void IdealSolidSolnPhase::getEnthalpy_RT(doublereal* hrt) const
244 {
245  const vector_fp& _h = enthalpy_RT_ref();
246  doublereal delta_prt = (m_Pcurrent - m_Pref) / RT();
247  for (size_t k = 0; k < m_kk; k++) {
248  hrt[k] = _h[k] + delta_prt * m_speciesMolarVolume[k];
249  }
250 }
251 
252 void IdealSolidSolnPhase::getEntropy_R(doublereal* sr) const
253 {
254  const vector_fp& _s = entropy_R_ref();
255  copy(_s.begin(), _s.end(), sr);
256 }
257 
258 void IdealSolidSolnPhase::getIntEnergy_RT(doublereal* urt) const
259 {
260  const vector_fp& _h = enthalpy_RT_ref();
261  doublereal prefrt = m_Pref / RT();
262  for (size_t k = 0; k < m_kk; k++) {
263  urt[k] = _h[k] - prefrt * m_speciesMolarVolume[k];
264  }
265 }
266 
267 void IdealSolidSolnPhase::getCp_R(doublereal* cpr) const
268 {
269  const vector_fp& _cpr = cp_R_ref();
270  copy(_cpr.begin(), _cpr.end(), cpr);
271 }
272 
273 void IdealSolidSolnPhase::getStandardVolumes(doublereal* vol) const
274 {
275  copy(m_speciesMolarVolume.begin(), m_speciesMolarVolume.end(), vol);
276 }
277 
278 // Thermodynamic Values for the Species Reference States
279 
280 void IdealSolidSolnPhase::getEnthalpy_RT_ref(doublereal* hrt) const
281 {
282  _updateThermo();
283  for (size_t k = 0; k != m_kk; k++) {
284  hrt[k] = m_h0_RT[k];
285  }
286 }
287 
288 void IdealSolidSolnPhase::getGibbs_RT_ref(doublereal* grt) const
289 {
290  _updateThermo();
291  for (size_t k = 0; k != m_kk; k++) {
292  grt[k] = m_g0_RT[k];
293  }
294 }
295 
296 void IdealSolidSolnPhase::getGibbs_ref(doublereal* g) const
297 {
298  _updateThermo();
299  double tmp = RT();
300  for (size_t k = 0; k != m_kk; k++) {
301  g[k] = tmp * m_g0_RT[k];
302  }
303 }
304 
305 void IdealSolidSolnPhase::getIntEnergy_RT_ref(doublereal* urt) const
306 {
307  const vector_fp& _h = enthalpy_RT_ref();
308  doublereal prefrt = m_Pref / RT();
309  for (size_t k = 0; k < m_kk; k++) {
310  urt[k] = _h[k] - prefrt * m_speciesMolarVolume[k];
311  }
312 }
313 
314 void IdealSolidSolnPhase::getEntropy_R_ref(doublereal* er) const
315 {
316  _updateThermo();
317  for (size_t k = 0; k != m_kk; k++) {
318  er[k] = m_s0_R[k];
319  }
320 }
321 
322 void IdealSolidSolnPhase::getCp_R_ref(doublereal* cpr) const
323 {
324  _updateThermo();
325  for (size_t k = 0; k != m_kk; k++) {
326  cpr[k] = m_cp0_R[k];
327  }
328 }
329 
331 {
332  _updateThermo();
333  return m_h0_RT;
334 }
335 
337 {
338  _updateThermo();
339  return m_s0_R;
340 }
341 
342 // Utility Functions
343 
344 bool IdealSolidSolnPhase::addSpecies(shared_ptr<Species> spec)
345 {
346  bool added = ThermoPhase::addSpecies(spec);
347  if (added) {
348  if (m_kk == 1) {
349  // Obtain the reference pressure by calling the ThermoPhase function
350  // refPressure, which in turn calls the species thermo reference
351  // pressure function of the same name.
352  m_Pref = refPressure();
353  }
354 
355  m_h0_RT.push_back(0.0);
356  m_g0_RT.push_back(0.0);
357  m_expg0_RT.push_back(0.0);
358  m_cp0_R.push_back(0.0);
359  m_s0_R.push_back(0.0);
360  m_pe.push_back(0.0);;
361  m_pp.push_back(0.0);
362  if (spec->extra.hasKey("molar_volume")) {
363  m_speciesMolarVolume.push_back(spec->extra["molar_volume"].asDouble());
364  } else {
365  throw CanteraError("IdealSolidSolnPhase::addSpecies",
366  "Molar volume not specified for species '{}'", spec->name);
367  }
368  }
369  return added;
370 }
371 
372 
373 void IdealSolidSolnPhase::initThermoXML(XML_Node& phaseNode, const std::string& id_)
374 {
375  if (id_.size() > 0 && phaseNode.id() != id_) {
376  throw CanteraError("IdealSolidSolnPhase::initThermoXML",
377  "phasenode and Id are incompatible");
378  }
379 
380  // Check on the thermo field. Must have:
381  // <thermo model="IdealSolidSolution" />
382  if (phaseNode.hasChild("thermo")) {
383  XML_Node& thNode = phaseNode.child("thermo");
384  if (!caseInsensitiveEquals(thNode["model"], "idealsolidsolution")) {
385  throw CanteraError("IdealSolidSolnPhase::initThermoXML",
386  "Unknown thermo model: " + thNode["model"]);
387  }
388  } else {
389  throw CanteraError("IdealSolidSolnPhase::initThermoXML",
390  "Unspecified thermo model");
391  }
392 
393  // Form of the standard concentrations. Must have one of:
394  //
395  // <standardConc model="unity" />
396  // <standardConc model="molar_volume" />
397  // <standardConc model="solvent_volume" />
398  if (phaseNode.hasChild("standardConc")) {
399  setStandardConcentrationModel(phaseNode.child("standardConc")["model"]);
400  } else {
401  throw CanteraError("IdealSolidSolnPhase::initThermoXML",
402  "Unspecified standardConc model");
403  }
404 
405  // Call the base initThermo, which handles setting the initial state.
406  ThermoPhase::initThermoXML(phaseNode, id_);
407 }
408 
409 void IdealSolidSolnPhase::setToEquilState(const doublereal* lambda_RT)
410 {
411  const vector_fp& grt = gibbs_RT_ref();
412 
413  // set the pressure and composition to be consistent with the temperature
414  doublereal pres = 0.0;
415  for (size_t k = 0; k < m_kk; k++) {
416  m_pp[k] = -grt[k];
417  for (size_t m = 0; m < nElements(); m++) {
418  m_pp[k] += nAtoms(k,m)*lambda_RT[m];
419  }
420  m_pp[k] = m_Pref * exp(m_pp[k]);
421  pres += m_pp[k];
422  }
423  setState_PX(pres, &m_pp[0]);
424 }
425 
427 {
428  if (caseInsensitiveEquals(model, "unity")) {
429  m_formGC = 0;
430  } else if (caseInsensitiveEquals(model, "molar_volume")) {
431  m_formGC = 1;
432  } else if (caseInsensitiveEquals(model, "solvent_volume")) {
433  m_formGC = 2;
434  } else {
435  throw CanteraError("IdealSolidSolnPhase::setStandardConcentrationModel",
436  "Unknown standard concentration model '{}'", model);
437  }
438 }
439 
441 {
442  return m_speciesMolarVolume[k];
443 }
444 
446 {
447  copy(m_speciesMolarVolume.begin(), m_speciesMolarVolume.end(), smv);
448 }
449 
451 {
452  doublereal tnow = temperature();
453  if (m_tlast != tnow) {
454 
455  // Update the thermodynamic functions of the reference state.
456  m_spthermo.update(tnow, m_cp0_R.data(), m_h0_RT.data(), m_s0_R.data());
457  m_tlast = tnow;
458  doublereal rrt = 1.0 / RT();
459  for (size_t k = 0; k < m_kk; k++) {
460  double deltaE = rrt * m_pe[k];
461  m_h0_RT[k] += deltaE;
462  m_g0_RT[k] = m_h0_RT[k] - m_s0_R[k];
463  }
464  m_tlast = tnow;
465  }
466 }
467 
468 } // end namespace Cantera
size_t nElements() const
Number of elements.
Definition: Phase.cpp:88
virtual void getEntropy_R_ref(doublereal *er) const
Returns the vector of nondimensional entropies of the reference state at the current temperature of t...
virtual bool addSpecies(shared_ptr< Species > spec)
virtual void initThermoXML(XML_Node &phaseNode, const std::string &id)
Import and initialize a ThermoPhase object using an XML tree.
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
virtual doublereal cp_mole() const
Molar heat capacity at constant pressure of the solution.
const doublereal OneAtm
One atmosphere [Pa].
Definition: ct_defs.h:69
vector_fp m_pp
Temporary array used in equilibrium calculations.
virtual void getPartialMolarVolumes(doublereal *vbar) const
returns an array of partial molar volumes of the species in the solution.
doublereal temperature() const
Temperature (K).
Definition: Phase.h:601
virtual void getIntEnergy_RT(doublereal *urt) const
Returns the vector of nondimensional Internal Energies of the standard state species at the current T...
virtual void getCp_R_ref(doublereal *cprt) const
Returns the vector of nondimensional constant pressure heat capacities of the reference state at the ...
Various templated functions that carry out common vector operations (see Templated Utility Functions)...
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
virtual void getChemPotentials(doublereal *mu) const
Get the species chemical potentials.
doublereal sum_xlogx() const
Evaluate .
Definition: Phase.cpp:624
Headers for the factory class that can create known ThermoPhase objects (see Thermodynamic Properties...
void calcDensity()
Calculate the density of the mixture using the partial molar volumes and mole fractions as input...
Class XML_Node is a tree-based representation of the contents of an XML file.
Definition: xml.h:97
const vector_fp & gibbs_RT_ref() const
Returns a reference to the vector of nondimensional enthalpies of the reference state at the current ...
virtual void setPressure(doublereal p)
Set the pressure at constant temperature.
STL namespace.
virtual doublereal density() const
Density (kg/m^3).
Definition: Phase.h:607
vector_fp m_speciesMolarVolume
Vector of molar volumes for each species in the solution.
doublereal m_tlast
last value of the temperature processed by reference state
Definition: ThermoPhase.h:1643
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
virtual void getGibbs_RT(doublereal *grt) const
Get the nondimensional Gibbs function for the species standard states at the current T and P of the s...
double speciesMolarVolume(int k) const
Report the molar volume of species k.
virtual void getPartialMolarEntropies(doublereal *sbar) const
Returns an array of partial molar entropies of the species in the solution.
int m_formGC
The standard concentrations can have one of three different forms: 0 = &#39;unity&#39;, 1 = &#39;molar_volume&#39;...
doublereal m_Pcurrent
m_Pcurrent = The current pressure Since the density isn&#39;t a function of pressure, but only of the mol...
doublereal molarDensity() const
Molar density (kmol/m^3).
Definition: Phase.cpp:590
const vector_fp & cp_R_ref() const
Returns a reference to the vector of nondimensional enthalpies of the reference state at the current ...
virtual void getActivityCoefficients(doublereal *ac) const
Get the array of species activity coefficients.
virtual void compositionChanged()
Apply changes to the state which are needed after the composition changes.
Definition: Phase.cpp:834
virtual doublereal gibbs_mole() const
Molar Gibbs free energy of the solution.
doublereal m_Pref
Value of the reference pressure for all species in this phase.
const doublereal * moleFractdivMMW() const
Returns a const pointer to the start of the moleFraction/MW array.
Definition: Phase.cpp:487
Header file for an ideal solid solution model with incompressible thermodynamics (see Thermodynamic P...
virtual doublereal standardConcentration(size_t k) const
The standard concentration used to normalize the generalized concentration.
virtual void getActivityConcentrations(doublereal *c) const
This method returns the array of generalized concentrations.
bool caseInsensitiveEquals(const std::string &input, const std::string &test)
Case insensitive equality predicate.
Base class for exceptions thrown by Cantera classes.
Definition: ctexceptions.h:65
virtual void compositionChanged()
Apply changes to the state which are needed after the composition changes.
virtual void getIntEnergy_RT_ref(doublereal *urt) const
Returns the vector of nondimensional internal Energies of the reference state at the current temperat...
vector_fp m_expg0_RT
Vector containing the species reference exp(-G/RT) functions at T = m_tlast.
virtual void getPartialMolarEnthalpies(doublereal *hbar) const
Returns an array of partial molar enthalpies for the species in the mixture.
const vector_fp & enthalpy_RT_ref() const
Returns a reference to the vector of nondimensional enthalpies of the reference state at the current ...
virtual void getEntropy_R(doublereal *sr) const
Get the nondimensional Entropies for the species standard states at the current T and P of the soluti...
void importPhase(XML_Node &phase, ThermoPhase *th)
Import a phase information into an empty ThermoPhase object.
virtual void setToEquilState(const doublereal *lambda_RT)
This method is used by the ChemEquil equilibrium solver.
doublereal dot(InputIter x_begin, InputIter x_end, InputIter2 y_begin)
Function that calculates a templated inner product.
Definition: utilities.h:107
virtual bool addSpecies(shared_ptr< Species > spec)
virtual void getEnthalpy_RT_ref(doublereal *hrt) const
Returns the vector of nondimensional enthalpies of the reference state at the current temperature of ...
bool hasChild(const std::string &ch) const
Tests whether the current node has a child node with a particular name.
Definition: xml.cpp:536
XML_Node & child(const size_t n) const
Return a changeable reference to the n&#39;th child of the current node.
Definition: xml.cpp:546
virtual void getGibbs_RT_ref(doublereal *grt) const
Returns the vector of nondimensional Gibbs Free Energies of the reference state at the current temper...
vector_fp m_cp0_R
Vector containing the species reference constant pressure heat capacities at T = m_tlast.
virtual void setMolarDensity(const doublereal rho)
Overridden setMolarDensity() function is necessary because the density is not an independent variable...
virtual void getStandardVolumes(doublereal *vol) const
Get the molar volumes of the species standard states at the current T and P of the solution...
virtual void getChemPotentials_RT(doublereal *mu) const
Get the array of non-dimensional species solution chemical potentials at the current T and P ...
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: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
const vector_fp & entropy_R_ref() const
Returns a reference to the vector of nondimensional enthalpies of the reference state at the current ...
doublereal meanMolecularWeight() const
The mean molecular weight. Units: (kg/kmol)
Definition: Phase.h:661
void scale(InputIter begin, InputIter end, OutputIter out, S scale_factor)
Multiply elements of an array by a scale factor.
Definition: utilities.h:130
void _updateThermo() const
This function gets called for every call to functions in this class.
virtual doublereal refPressure() const
Returns the reference pressure in Pa.
Definition: ThermoPhase.h:116
virtual void setDensity(const doublereal rho)
Overridden setDensity() function is necessary because the density is not an independent variable...
std::string id() const
Return the id attribute, if present.
Definition: xml.cpp:428
const doublereal GasConstant
Universal Gas Constant. [J/kmol/K].
Definition: ct_defs.h:64
virtual void setState_PX(doublereal p, doublereal *x)
Set the pressure (Pa) and mole fractions.
Contains declarations for string manipulation functions within Cantera.
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...
vector_fp m_h0_RT
Vector containing the species reference enthalpies at T = m_tlast.
virtual void getPureGibbs(doublereal *gpure) const
Get the Gibbs functions for the pure species at the current T and P of the solution.
size_t m_kk
Number of species in the phase.
Definition: Phase.h:788
virtual void getCp_R(doublereal *cpr) const
Get the nondimensional heat capacity at constant pressure function for the species standard states at...
virtual void initThermoFile(const std::string &inputFile, const std::string &id)
vector_fp m_pe
Vector of potential energies for the species.
Namespace for the Cantera kernel.
Definition: AnyMap.cpp:8
doublereal nAtoms(size_t k, size_t m) const
Number of atoms of element m in species k.
Definition: Phase.cpp:161
void getSpeciesMolarVolumes(doublereal *smv) const
Fill in a return vector containing the species molar volumes.
virtual doublereal pressure() const
Pressure.
virtual void getPartialMolarCp(doublereal *cpbar) const
Returns an array of partial molar Heat Capacities at constant pressure of the species in the solution...
virtual doublereal enthalpy_mole() const
Molar enthalpy of the solution.
void setStandardConcentrationModel(const std::string &model)
Set the form for the standard and generalized concentrations.
IdealSolidSolnPhase(int formCG=0)
Constructor for IdealSolidSolnPhase.
virtual void setDensity(const doublereal density_)
Set the internally stored density (kg/m^3) of the phase.
Definition: Phase.h:622
virtual void getEnthalpy_RT(doublereal *hrt) const
Get the array of nondimensional Enthalpy functions for the standard state species at the current T an...
virtual doublereal entropy_mole() const
Molar entropy of the solution.
vector_fp m_s0_R
Vector containing the species reference entropies at T = m_tlast.
vector_fp m_g0_RT
Vector containing the species reference Gibbs functions at T = m_tlast.