This means that the VCS_SPECIES_THERMO and vcs_VolPhase classes no longer need to be able to be copied.
63 lines
1.9 KiB
C++
63 lines
1.9 KiB
C++
/**
|
|
* @file vcs_Gibbs.cpp
|
|
* Functions which calculate the extrinsic Gibbs Free energies
|
|
*/
|
|
|
|
// 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.
|
|
|
|
#include "cantera/equil/vcs_solve.h"
|
|
#include "cantera/equil/vcs_VolPhase.h"
|
|
|
|
namespace Cantera
|
|
{
|
|
double VCS_SOLVE::vcs_Total_Gibbs(double* molesSp, double* chemPot,
|
|
double* tPhMoles)
|
|
{
|
|
double g = 0.0;
|
|
|
|
for (size_t iph = 0; iph < m_numPhases; iph++) {
|
|
vcs_VolPhase* Vphase = m_VolPhaseList[iph].get();
|
|
if ((TPhInertMoles[iph] > 0.0) && (tPhMoles[iph] > 0.0)) {
|
|
g += TPhInertMoles[iph] *
|
|
log(TPhInertMoles[iph] / tPhMoles[iph]);
|
|
if (Vphase->m_gasPhase) {
|
|
g += TPhInertMoles[iph] * log(m_pressurePA/(1.01325E5));
|
|
}
|
|
}
|
|
}
|
|
|
|
for (size_t kspec = 0; kspec < m_numSpeciesRdc; ++kspec) {
|
|
if (m_speciesUnknownType[kspec] != VCS_SPECIES_TYPE_INTERFACIALVOLTAGE) {
|
|
g += molesSp[kspec] * chemPot[kspec];
|
|
}
|
|
}
|
|
|
|
return g;
|
|
}
|
|
|
|
double VCS_SOLVE::vcs_GibbsPhase(size_t iphase, const double* const w,
|
|
const double* const fe)
|
|
{
|
|
double g = 0.0;
|
|
double phaseMols = 0.0;
|
|
for (size_t kspec = 0; kspec < m_numSpeciesRdc; ++kspec) {
|
|
if (m_phaseID[kspec] == iphase && m_speciesUnknownType[kspec] != VCS_SPECIES_TYPE_INTERFACIALVOLTAGE) {
|
|
g += w[kspec] * fe[kspec];
|
|
phaseMols += w[kspec];
|
|
}
|
|
}
|
|
|
|
if (TPhInertMoles[iphase] > 0.0) {
|
|
phaseMols += TPhInertMoles[iphase];
|
|
g += TPhInertMoles[iphase] * log(TPhInertMoles[iphase] / phaseMols);
|
|
vcs_VolPhase* Vphase = m_VolPhaseList[iphase].get();
|
|
if (Vphase->m_gasPhase) {
|
|
g += TPhInertMoles[iphase] * log(m_pressurePA/1.01325E5);
|
|
}
|
|
}
|
|
|
|
return g;
|
|
}
|
|
|
|
}
|