Added derivatives of molar volume wrt T and P to the main interface.

This commit is contained in:
Harry Moffat 2011-09-20 23:32:53 +00:00
parent cf730962a6
commit 49ad882efc
4 changed files with 135 additions and 8 deletions

View file

@ -738,10 +738,13 @@ namespace Cantera {
// Molar heat capacity at constant volume. Units: J/kmol/K.
doublereal HMWSoln::cv_mole() const {
//getPartialMolarCv(m_tmpV.begin());
//return mean_X(m_tmpV.begin());
err("not implemented");
return 0.0;
double kappa_t = isothermalCompressibility();
double beta = thermalExpansionCoeff();
double cp = cp_mole();
double tt = temperature();
double molarV = molarVolume();
double cv = cp - beta * beta * tt * molarV / kappa_t;
return cv;
}
//

View file

@ -1657,15 +1657,88 @@ namespace Cantera {
MolalityVPSSTP::initThermoXML(phaseNode, id);
/*
* Lastly set the state
* Lastly calculate the charge balance and then add stuff until the charges compensate
*/
vector_fp mf(m_kk, 0.0);
getMoleFractions(DATA_PTR(mf));
bool notDone = true;
do {
double sum = 0.0;
int kMaxC = -1;
double MaxC = 0.0;
for (int k = 0; k < m_kk; k++) {
sum += mf[k] * m_speciesCharge[k];
if (fabs(mf[k] * m_speciesCharge[k]) > MaxC) {
kMaxC = k;
}
}
int kHp = speciesIndex("H+");
int kOHm = speciesIndex("OH-");
if (fabs(sum) > 1.0E-30) {
if (kHp >= 0) {
if (mf[kHp] > sum * 1.1) {
mf[kHp] -= sum;
mf[0] += sum;
notDone = false;
} else {
if (sum > 0.0) {
mf[kHp] *= 0.5;
mf[0] += mf[kHp];
sum -= mf[kHp];
}
}
}
if (notDone) {
if (kOHm >= 0) {
if (mf[kOHm] > -sum * 1.1) {
mf[kOHm] += sum;
mf[0] -= sum;
notDone = false;
} else {
if (sum < 0.0) {
mf[kOHm] *= 0.5;
mf[0] += mf[kOHm];
sum += mf[kOHm];
}
}
}
if (notDone) {
if (kMaxC >= 0) {
if (mf[kMaxC] > (1.1 * sum / m_speciesCharge[kMaxC])) {
mf[kMaxC] -= sum / m_speciesCharge[kMaxC];
mf[0] += sum / m_speciesCharge[kMaxC];
} else {
mf[kMaxC] *= 0.5;
mf[0] += mf[kMaxC];
notDone = true;
}
}
}
}
setMoleFractions(DATA_PTR(mf));
} else {
notDone = false;
}
} while (notDone);
// if (phaseNode.hasChild("state")) {
// XML_Node& stateNode = phaseNode.child("state");
// setStateFromXML(stateNode);
//}
}
//====================================================================================================================
// Precalculate the IMS Cutoff parameters for typeCutoff = 2
void HMWSoln::calcIMSCutoffParams_() {
IMS_afCut_ = 1.0 / (std::exp(1.0) * IMS_gamma_k_min_);

View file

@ -211,6 +211,8 @@ namespace Cantera {
}
}
// HKM 9/1/11 The partial molar volumes returned here are really partial molar areas.
// Partial molar volumes for this phase should actually be equal to zero.
void SurfPhase::getPartialMolarVolumes(doublereal* vbar) const {
getStandardVolumes(vbar);
}

View file

@ -1264,7 +1264,31 @@ namespace Cantera {
virtual void getPartialMolarVolumes(doublereal* vbar) const {
err("getPartialMolarVolumes");
}
//! Return an array of derivatives of partial molar volumes wrt temperature for the
//! species in the mixture. Units: m^3/kmol.
/*!
* The derivative is at constant pressure
*
* @param d_vbar_dT Output vector of derivatives of species partial molar volumes wrt T.
* Length = m_kk. units are m^3/kmol/K.
*/
virtual void getdPartialMolarVolumes_dT(doublereal* d_vbar_dT) const {
err("getdPartialMolarVolumes_dT");
}
//! Return an array of derivatives of partial molar volumes wrt pressure for the
//! species in the mixture. Units: m^3/kmol.
/*!
* The derivative is at constant temperature
*
* @param d_vbar_dP Output vector of derivatives of species partial molar volumes wrt P.
* Length = m_kk. units are m^3/kmol/Pa.
*/
virtual void getdPartialMolarVolumes_dP(doublereal* d_vbar_dP) const {
err("getdPartialMolarVolumes_dP");
}
//@}
/// @name Properties of the Standard State of the Species in the Solution
//@{
@ -1357,11 +1381,36 @@ namespace Cantera {
err("getStandardVolumes");
}
//! Get the derivative of the molar volumes of the species standard states wrt temperature at the current
//! <I>T</I> and <I>P</I> of the solution.
/*!
* The derivative is at constant pressure
* units = m^3 / kmol / K
*
* @param d_vol_dT Output vector containing derivatives of standard state volumes wrt T
* Length: m_kk.
*/
virtual void getdStandardVolumes_dT(doublereal *d_vol_dT) const {
err("getdStandardVolumes_dT");
}
//! Get the derivative molar volumes of the species standard states wrt pressure at the current
//! <I>T</I> and <I>P</I> of the solution.
/*!
* The derivative is at constant temperature.
* units = m^3 / kmol / Pa
*
* @param d_vol_dP Output vector containing the derivative of standard state volumes wrt P.
* Length: m_kk.
*/
virtual void getdStandardVolumes_dP(doublereal *d_vol_dP) const {
err("getdStandardVolumes_dP");
}
//@}
/// @name Thermodynamic Values for the Species Reference States
//@{
//! Returns the vector of nondimensional
//! enthalpies of the reference state at the current temperature
//! of the solution and the reference pressure for the species.