32 for (
size_t k = 0; k <
m_kk; k++) {
47 for (
size_t k = 0; k <
m_kk; k++) {
64 for (
size_t k = 0; k <
m_kk; k++) {
72 for (
size_t k = 0; k <
m_kk; k++) {
88 for (
size_t k = 0; k <
m_kk; k++) {
92 for (
size_t k = 0; k <
m_kk; k++) {
108 for (
size_t k = 0; k <
m_kk; k++) {
114 for (
size_t k = 0; k <
m_kk; k++) {
133 const double temp1 = g0 + g1 * XB;
134 const double all = -1.0*XA*XB*temp1 - XA*XB*XB*g1;
136 for (
size_t iK = 0; iK <
m_kk; iK++) {
139 vbar[iA] += XB * temp1;
140 vbar[iB] += XA * temp1 + XA*XB*g1;
148 for (
auto& item :
m_input[
"interactions"].asVector<
AnyMap>()) {
149 auto&
species = item[
"species"].asVector<
string>(2);
150 vector<double> h(2), s(2), vh(2), vs(2);
151 if (item.hasKey(
"excess-enthalpy")) {
152 h = item.convertVector(
"excess-enthalpy",
"J/kmol", 2);
154 if (item.hasKey(
"excess-entropy")) {
155 s = item.convertVector(
"excess-entropy",
"J/kmol/K", 2);
157 if (item.hasKey(
"excess-volume-enthalpy")) {
158 vh = item.convertVector(
"excess-volume-enthalpy",
"m^3/kmol", 2);
160 if (item.hasKey(
"excess-volume-entropy")) {
161 vs = item.convertVector(
"excess-volume-entropy",
"m^3/kmol/K", 2);
164 h[0], h[1], s[0], s[1], vh[0], vh[1], vs[0], vs[1]);
173 vector<AnyMap> interactions;
176 interaction[
"species"] = vector<string>{
179 interaction[
"excess-enthalpy"].setQuantity(
183 interaction[
"excess-entropy"].setQuantity(
187 interaction[
"excess-volume-enthalpy"].setQuantity(
191 interaction[
"excess-volume-entropy"].setQuantity(
194 interactions.push_back(std::move(interaction));
196 phaseNode[
"interactions"] = std::move(interactions);
205 const string& speciesB,
double h0,
double h1,
double s0,
double s1,
206 double vh0,
double vh1,
double vs0,
double vs1)
241 const double XAXB = XA * XB;
242 const double g0g1XB = (g0 + g1 * XB);
243 const double all = -1.0 * XAXB * g0g1XB - XAXB * XB * g1;
244 for (
size_t iK = 0; iK <
m_kk; iK++) {
265 const double XAXB = XA * XB;
266 const double g0g1XB = (g0 + g1 * XB);
267 const double all = -1.0 * XAXB * g0g1XB - XAXB * XB * g1;
268 const double mult = 2.0 * invT;
269 const double dT2all = mult * all;
270 for (
size_t iK = 0; iK <
m_kk; iK++) {
285 for (
size_t k = 0; k <
m_kk; k++) {
294 for (
size_t k = 0; k <
m_kk; k++) {
300 span<double> dlnActCoeffds)
const
306 for (
size_t iK = 0; iK <
m_kk; iK++) {
307 dlnActCoeffds[iK] = 0.0;
315 double dXA = dXds[iA];
316 double dXB = dXds[iB];
319 const double g02g1XB = g0 + 2*g1*XB;
320 const double g2XAdXB = 2*g1*XA*dXB;
321 const double all = (-XB * dXA - XA *dXB) * g02g1XB - XB *g2XAdXB;
322 for (
size_t iK = 0; iK <
m_kk; iK++) {
325 dlnActCoeffds[iA] += dXB * g02g1XB;
326 dlnActCoeffds[iB] += dXA * g02g1XB + g2XAdXB;
335 for (
size_t iK = 0; iK <
m_kk; iK++) {
368 for (
size_t iK = 0; iK <
m_kk; iK++) {
369 for (
size_t iM = 0; iM <
m_kk; iM++) {
393 dlnActCoeffdlnN_(iK,iM) += g0*((delAM-XA)*(delBK-XB)+(delAK-XA)*(delBM-XB));
394 dlnActCoeffdlnN_(iK,iM) += 2*g1*((delAM-XA)*(delBK-XB)*XB+(delAK-XA)*(delBM-XB)*XB+(delBM-XB)*(delBK-XB)*XA);
424 for (
size_t k = 0; k <
m_kk; k++) {
432 for (
size_t k = 0; k <
m_kk; k++) {
441 for (
size_t k = 0; k <
m_kk; k++) {
442 for (
size_t m = 0; m <
m_kk; m++) {
443 dlnActCoeffdlnN[ld * k + m] = data[
m_kk * k + m];
(see Thermodynamic Properties and class MargulesVPSSTP).
Headers for the factory class that can create known ThermoPhase objects (see Thermodynamic Properties...
A map of string keys to values whose type can vary at runtime.
bool hasKey(const string &key) const
Returns true if the map contains an item named key.
void zero()
Set all of the entries to zero.
virtual void resize(size_t n, size_t m, double v=0.0)
Resize the array, and fill the new entries with 'v'.
vector< double > d2lnActCoeffdT2_Scaled_
Storage for the current derivative values of the gradients with respect to temperature of the log of ...
Array2D dlnActCoeffdlnN_
Storage for the current derivative values of the gradients with respect to logarithm of the species m...
vector< double > lnActCoeff_Scaled_
Storage for the current values of the activity coefficients of the species.
vector< double > dlnActCoeffdlnX_diag_
Storage for the current derivative values of the gradients with respect to logarithm of the mole frac...
vector< double > moleFractions_
Storage for the current values of the mole fractions of the species.
vector< double > dlnActCoeffdT_Scaled_
Storage for the current derivative values of the gradients with respect to temperature of the log of ...
vector< double > dlnActCoeffdlnN_diag_
Storage for the current derivative values of the gradients with respect to logarithm of the mole frac...
void getLnActivityCoefficients(span< double > lnac) const override
Get the array of non-dimensional molar-based ln activity coefficients at the current solution tempera...
void getPartialMolarEnthalpies(span< double > hbar) const override
Returns an array of partial molar enthalpies for the species in the mixture.
vector< double > m_VHE_c_ij
Enthalpy term for the ternary mole fraction interaction of the excess Gibbs free energy expression.
vector< double > m_SE_b_ij
Entropy term for the binary mole fraction interaction of the excess Gibbs free energy expression.
void getdlnActCoeffdlnN_diag(span< double > dlnActCoeffdlnN_diag) const override
Get the array of log species mole number derivatives of the log activity coefficients.
void getPartialMolarCp(span< double > cpbar) const override
Returns an array of partial molar entropies for the species in the mixture.
size_t numBinaryInteractions_
number of binary interaction expressions
void getd2lnActCoeffdT2(span< double > d2lnActCoeffdT2) const
Get the array of temperature second derivatives of the log activity coefficients.
vector< double > m_SE_c_ij
Entropy term for the ternary mole fraction interaction of the excess Gibbs free energy expression.
void s_update_dlnActCoeff_dlnN_diag() const
Update the derivative of the log of the activity coefficients wrt log(moles) - diagonal only.
void getParameters(AnyMap &phaseNode) const override
Store the parameters of a ThermoPhase object such that an identical one could be reconstructed using ...
void initThermo() override
Initialize the ThermoPhase object after all species have been set up.
void getdlnActCoeffdlnX_diag(span< double > dlnActCoeffdlnX_diag) const override
Get the array of ln mole fraction derivatives of the log activity coefficients - diagonal component o...
void getdlnActCoeffdlnN(const size_t ld, span< double > const dlnActCoeffdlnN) override
Get the array of derivatives of the log activity coefficients with respect to the log of the species ...
vector< size_t > m_pSpecies_A_ij
vector of species indices representing species A in the interaction
double cv_mole() const override
Molar heat capacity at constant volume and composition [J/kmol/K].
void s_update_dlnActCoeff_dT() const
Update the derivative of the log of the activity coefficients wrt T.
vector< size_t > m_pSpecies_B_ij
vector of species indices representing species B in the interaction
vector< double > m_VSE_c_ij
Entropy term for the ternary mole fraction interaction of the excess Gibbs free energy expression.
void s_update_dlnActCoeff_dlnN() const
Update the derivative of the log of the activity coefficients wrt log(moles_m)
vector< double > m_HE_b_ij
Enthalpy term for the binary mole fraction interaction of the excess Gibbs free energy expression.
void getdlnActCoeffds(const double dTds, span< const double > dXds, span< double > dlnActCoeffds) const override
Get the change in activity coefficients wrt changes in state (temp, mole fraction,...
vector< double > m_VSE_b_ij
Entropy term for the binary mole fraction interaction of the excess Gibbs free energy expression.
void getPartialMolarVolumes(span< double > vbar) const override
Return an array of partial molar volumes for the species in the mixture.
void initLengths()
Initialize lengths of local variables after all species have been identified.
void getPartialMolarEntropies(span< double > sbar) const override
Returns an array of partial molar entropies for the species in the mixture.
void s_update_dlnActCoeff_dlnX_diag() const
Update the derivative of the log of the activity coefficients wrt log(mole fraction)
void s_update_lnActCoeff() const
Update the activity coefficients.
void getdlnActCoeffdT(span< double > dlnActCoeffdT) const override
Get the array of temperature derivatives of the log activity coefficients.
vector< double > m_VHE_b_ij
Enthalpy term for the binary mole fraction interaction of the excess Gibbs free energy expression.
void addBinaryInteraction(const string &speciesA, const string &speciesB, double h0, double h1, double s0, double s1, double vh0, double vh1, double vs0, double vs1)
Add a binary species interaction with the specified parameters.
MargulesVPSSTP(const string &inputFile="", const string &id="")
Construct a MargulesVPSSTP object from an input file.
void getChemPotentials(span< double > mu) const override
Get the species chemical potentials. Units: J/kmol.
vector< double > m_HE_c_ij
Enthalpy term for the ternary mole fraction interaction of the excess Gibbs free energy expression.
size_t m_kk
Number of species in the phase.
size_t speciesIndex(const string &name, bool raise=true) const
Returns the index of a species named 'name' within the Phase object.
double temperature() const
Temperature (K).
string speciesName(size_t k) const
Name of the species with index k.
shared_ptr< Species > species(const string &name) const
Return the Species object for the named species.
virtual double cp_mole() const
Molar heat capacity at constant pressure and composition [J/kmol/K].
virtual void getParameters(AnyMap &phaseNode) const
Store the parameters of a ThermoPhase object such that an identical one could be reconstructed using ...
double RT() const
Return the Gas Constant multiplied by the current temperature.
virtual void initThermo()
Initialize the ThermoPhase object after all species have been set up.
void initThermoFile(const string &inputFile, const string &id)
Initialize a ThermoPhase object using an input file.
AnyMap m_input
Data supplied via setParameters.
void getCp_R(span< double > cpr) const override
Get the nondimensional Heat Capacities at constant pressure for the species standard states at the cu...
void getStandardChemPotentials(span< double > mu) const override
Get the array of chemical potentials at unit activity for the species at their standard states at the...
void getEnthalpy_RT(span< double > hrt) const override
Get the nondimensional Enthalpy functions for the species at their standard states at the current T a...
void getEntropy_R(span< double > sr) const override
Get the array of nondimensional Entropy functions for the standard state species at the current T and...
void getStandardVolumes(span< double > vol) const override
Get the molar volumes of the species standard states at the current T and P of the solution.
const double GasConstant
Universal Gas Constant [J/kmol/K].
Namespace for the Cantera kernel.
const size_t npos
index returned by functions to indicate "no position"
const double SmallNumber
smallest number to compare to zero.
void checkArraySize(const char *procedure, size_t available, size_t required)
Wrapper for throwing ArraySizeError.
Contains declarations for string manipulation functions within Cantera.