23 explicit LTPError(
const std::string& msg)
25 "error parsing transport data: "
38 "error parsing transport data: "
43 m_model(LTI_MODEL_NOTSET),
48 LiquidTranInteraction::~LiquidTranInteraction()
50 size_t kmax =
m_Aij.size();
51 for (
size_t k = 0; k < kmax; k++) {
55 for (
size_t k = 0; k < kmax; k++) {
59 for (
size_t k = 0; k < kmax; k++) {
63 for (
size_t k = 0; k < kmax; k++) {
81 for (
size_t iChild = 0; iChild < num; iChild++) {
84 if (nodeName !=
"interaction") {
85 throw CanteraError(
"TransportFactory::getLiquidInteractionsTransportData",
86 "expected <interaction> element and got <" + nodeName +
">");
88 speciesA = xmlChild.
attrib(
"speciesA");
89 speciesB = xmlChild.
attrib(
"speciesB");
91 if (iSpecies ==
npos) {
92 throw CanteraError(
"TransportFactory::getLiquidInteractionsTransportData",
93 "Unknown species " + speciesA);
96 if (jSpecies ==
npos) {
97 throw CanteraError(
"TransportFactory::getLiquidInteractionsTransportData",
98 "Unknown species " + speciesB);
102 m_Eij(iSpecies,jSpecies) =
getFloat(xmlChild,
"Eij",
"actEnergy");
104 m_Eij(jSpecies,iSpecies) =
m_Eij(iSpecies,jSpecies) ;
110 while (
m_Aij.size()<poly.size()) {
112 aTemp->
resize(nsp, nsp, 0.0);
113 m_Aij.push_back(aTemp);
115 for (
int i = 0; i < (int)poly.size(); i++) {
116 (*
m_Aij[i])(iSpecies,jSpecies) = poly[i];
123 while (
m_Bij.size() < poly.size()) {
125 bTemp->
resize(nsp, nsp, 0.0);
126 m_Bij.push_back(bTemp);
128 for (
size_t i=0; i<poly.size(); i++) {
129 (*
m_Bij[i])(iSpecies,jSpecies) = poly[i];
136 while (
m_Hij.size()<poly.size()) {
138 hTemp->
resize(nsp, nsp, 0.0);
139 m_Hij.push_back(hTemp);
141 for (
size_t i=0; i<poly.size(); i++) {
142 (*
m_Hij[i])(iSpecies,jSpecies) = poly[i];
150 while (
m_Sij.size()<poly.size()) {
152 sTemp->
resize(nsp, nsp, 0.0);
153 m_Sij.push_back(sTemp);
155 for (
size_t i=0; i<poly.size(); i++) {
156 (*
m_Sij[i])(iSpecies,jSpecies) = poly[i];
162 m_Dij(iSpecies,jSpecies) =
getFloat(xmlChild,
"Dij",
"toSI");
163 m_Dij(jSpecies,iSpecies) =
m_Dij(iSpecies,jSpecies) ;
173 LiquidTranInteraction& LiquidTranInteraction::operator=(
const LiquidTranInteraction& right)
175 if (&right !=
this) {
191 LiquidTranInteraction(tp_ind)
196 doublereal LTI_Solvent::getMixTransProp(doublereal* speciesValues, doublereal* speciesWeight)
198 size_t nsp = m_thermo->nSpecies();
199 doublereal temp = m_thermo->temperature();
201 m_thermo->getMoleFractions(&molefracs[0]);
203 doublereal value = 0.0;
207 for (
size_t k = 0; k < nsp; k++) {
211 throw CanteraError(
"LTI_Solvent::getMixTransProp",
"You should be specifying the speciesWeight");
214 for (
size_t i = 0; i < nsp; i++) {
216 value += speciesValues[i] * speciesWeight[i];
222 for (
size_t j = 0; j < nsp; j++) {
223 for (
size_t k = 0; k < m_Aij.size(); k++) {
224 value += molefracs[i]*molefracs[j]*(*m_Aij[k])(i,j)*pow(molefracs[i], (
int) k);
226 for (
size_t k = 0; k < m_Bij.size(); k++) {
227 value += molefracs[i]*molefracs[j]*(*m_Bij[k])(i,j)*temp*pow(molefracs[i], (
int) k);
235 doublereal LTI_Solvent::getMixTransProp(std::vector<LTPspecies*> LTPptrs)
237 size_t nsp = m_thermo->nSpecies();
238 doublereal temp = m_thermo->temperature();
240 m_thermo->getMoleFractions(&molefracs[0]);
242 doublereal value = 0.0;
244 for (
size_t k = 0; k < nsp; k++) {
248 for (
size_t i = 0; i < nsp; i++) {
250 value += LTPptrs[i]->getSpeciesTransProp() * LTPptrs[i]->getMixWeight();
251 for (
size_t j = 0; j < nsp; j++) {
252 for (
size_t k = 0; k < m_Aij.size(); k++) {
253 value += molefracs[i]*molefracs[j]*(*m_Aij[k])(i,j)*pow(molefracs[i], (
int) k);
255 for (
size_t k = 0; k < m_Bij.size(); k++) {
256 value += molefracs[i]*molefracs[j]*(*m_Bij[k])(i,j)*temp*pow(molefracs[i], (
int) k);
264 void LTI_Solvent::getMatrixTransProp(DenseMatrix& mat, doublereal* speciesValues)
276 doublereal value = 0;
280 for (
size_t k = 0; k < nsp; k++) {
281 molefracs[k] = molefracs[k]*speciesWeight[k];
284 throw CanteraError(
"LTI_MoleFracs::getMixTransProp",
"You should be specifying the speciesWeight");
287 for (
size_t i = 0; i < nsp; i++) {
288 value += speciesValues[i] * molefracs[i];
289 for (
size_t j = 0; j < nsp; j++) {
290 for (
size_t k = 0; k <
m_Aij.size(); k++) {
291 value += molefracs[i]*molefracs[j]*(*
m_Aij[k])(i,j)*pow(molefracs[i], (
int) k);
293 for (
size_t k = 0; k <
m_Bij.size(); k++) {
294 value += molefracs[i]*molefracs[j]*(*
m_Bij[k])(i,j)*temp*pow(molefracs[i], (
int) k);
309 doublereal value = 0;
311 for (
size_t k = 0; k < nsp; k++) {
312 molefracs[k] = molefracs[k]*LTPptrs[k]->getMixWeight();
315 for (
size_t i = 0; i < nsp; i++) {
316 value += LTPptrs[i]->getSpeciesTransProp() * molefracs[i];
317 for (
size_t j = 0; j < nsp; j++) {
318 for (
size_t k = 0; k <
m_Aij.size(); k++) {
319 value += molefracs[i]*molefracs[j]*(*
m_Aij[k])(i,j)*pow(molefracs[i], (
int) k);
321 for (
size_t k = 0; k <
m_Bij.size(); k++) {
322 value += molefracs[i]*molefracs[j]*(*
m_Bij[k])(i,j)*temp*pow(molefracs[i], (
int) k);
336 doublereal value = 0;
340 for (
size_t k = 0; k < nsp; k++) {
341 massfracs[k] = massfracs[k]*speciesWeight[k];
344 throw CanteraError(
"LTI_MassFracs::getMixTransProp",
"You should be specifying the speciesWeight");
347 for (
size_t i = 0; i < nsp; i++) {
348 value += speciesValues[i] * massfracs[i];
349 for (
size_t j = 0; j < nsp; j++) {
350 for (
size_t k = 0; k <
m_Aij.size(); k++) {
351 value += massfracs[i]*massfracs[j]*(*
m_Aij[k])(i,j)*pow(massfracs[i], (
int) k);
353 for (
size_t k = 0; k <
m_Bij.size(); k++) {
354 value += massfracs[i]*massfracs[j]*(*
m_Bij[k])(i,j)*temp*pow(massfracs[i], (
int) k);
369 doublereal value = 0;
371 for (
size_t k = 0; k < nsp; k++) {
372 massfracs[k] = massfracs[k]*LTPptrs[k]->getMixWeight();
375 for (
size_t i = 0; i < nsp; i++) {
376 value += LTPptrs[i]->getSpeciesTransProp() * massfracs[i];
377 for (
size_t j = 0; j < nsp; j++) {
378 for (
size_t k = 0; k <
m_Aij.size(); k++) {
379 value += massfracs[i]*massfracs[j]*(*
m_Aij[k])(i,j)*pow(massfracs[i], (
int) k);
381 for (
size_t k = 0; k <
m_Bij.size(); k++) {
382 value += massfracs[i]*massfracs[j]*(*
m_Bij[k])(i,j)*temp*pow(massfracs[i], (
int) k);
399 doublereal value = 0;
403 for (
size_t k = 0; k < nsp; k++) {
404 molefracs[k] = molefracs[k]*speciesWeight[k];
407 throw CanteraError(
"LTI_Log_MoleFracs::getMixTransProp",
"You probably should have a speciesWeight when you call getMixTransProp to convert ion mole fractions to molecular mole fractions");
410 for (
size_t i = 0; i < nsp; i++) {
411 value += log(speciesValues[i]) * molefracs[i];
412 for (
size_t j = 0; j < nsp; j++) {
413 for (
size_t k = 0; k <
m_Hij.size(); k++) {
414 value += molefracs[i]*molefracs[j]*(*
m_Hij[k])(i,j)/temp*pow(molefracs[i], (
int) k);
416 for (
size_t k = 0; k <
m_Sij.size(); k++) {
417 value -= molefracs[i]*molefracs[j]*(*
m_Sij[k])(i,j)*pow(molefracs[i], (
int) k);
433 doublereal value = 0;
437 for (
size_t k = 0; k < nsp; k++) {
438 molefracs[k] = molefracs[k]*LTPptrs[k]->getMixWeight();
441 for (
size_t i = 0; i < nsp; i++) {
442 value += log(LTPptrs[i]->getSpeciesTransProp()) * molefracs[i];
443 for (
size_t j = 0; j < nsp; j++) {
444 for (
size_t k = 0; k <
m_Hij.size(); k++) {
445 value += molefracs[i]*molefracs[j]*(*
m_Hij[k])(i,j)/temp*pow(molefracs[i], (
int) k);
447 for (
size_t k = 0; k <
m_Sij.size(); k++) {
448 value -= molefracs[i]*molefracs[j]*(*
m_Sij[k])(i,j)*pow(molefracs[i], (
int) k);
460 m_diagonals.resize(nsp, 0);
462 for (
size_t k = 0; k < nsp; k++) {
476 doublereal value = 0;
478 throw LTPmodelError(
"Calling LTI_Pairwise_Interaction::getMixTransProp does not make sense.");
489 doublereal value = 0;
491 throw LTPmodelError(
"Calling LTI_Pairwise_Interaction::getMixTransProp does not make sense.");
503 mat.
resize(nsp, nsp, 0.0);
504 for (
size_t i = 0; i < nsp; i++)
505 for (
size_t j = 0; j < i; j++) {
506 mat(i,j) = mat(j,i) = exp(
m_Eij(i,j) / temp) /
m_Dij(i,j);
509 for (
size_t i = 0; i < nsp; i++)
510 if (mat(i,i) == 0.0 && m_diagonals[i]) {
511 mat(i,i) = 1.0 / m_diagonals[i]->getSpeciesTransProp() ;
518 size_t nsp2 = nsp*nsp;
522 m_ionCondSpecies.resize(nsp,0);
523 m_mobRatMix.
resize(nsp,nsp,0.0);
524 m_mobRatMixModel.resize(nsp2);
525 m_mobRatSpecies.resize(nsp2);
526 m_selfDiffMix.resize(nsp,0.0);
527 m_selfDiffMixModel.resize(nsp);
528 m_selfDiffSpecies.resize(nsp);
530 for (
size_t k = 0; k < nsp2; k++) {
532 m_mobRatSpecies[k].resize(nsp,0);
534 for (
size_t k = 0; k < nsp; k++) {
536 m_selfDiffSpecies[k].resize(nsp,0);
539 for (
size_t k = 0; k < nsp; k++) {
542 for (
size_t j = 0; j < nsp2; j++) {
545 for (
size_t j = 0; j < nsp; j++) {
557 doublereal value = 0;
559 throw LTPmodelError(
"Calling LTI_StefanMaxwell_PPN::getMixTransProp does not make sense.");
570 doublereal value = 0;
572 throw LTPmodelError(
"Calling LTI_StefanMaxwell_PPN::getMixTransProp does not make sense.");
582 throw CanteraError(
"LTI_StefanMaxwell_PPN::getMatrixTransProp",
"Function may only be called with a 3-ion system");
589 vector<size_t> cation;
590 vector<size_t> anion;
595 std::vector<double> viS(6);
596 std::vector<double> charges(3);
597 std::vector<size_t> neutMolIndex(3);
600 if (anion.size() != 1) {
601 throw CanteraError(
"LTI_StefanMaxwell_PPN::getMatrixTransProp",
"Must have one anion only for StefanMaxwell_PPN");
603 if (cation.size() != 2) {
604 throw CanteraError(
"LTI_StefanMaxwell_PPN::getMatrixTransProp",
"Must have two cations of equal charge for StefanMaxwell_PPN");
606 if (charges[cation[0]] != charges[cation[1]]) {
607 throw CanteraError(
"LTI_StefanMaxwell_PPN::getMatrixTransProp",
"Cations must be of equal charge for StefanMaxwell_PPN");
616 for (
size_t j = 0; j < nsp; j++) {
617 for (
size_t i = 0; i < nsp; i++) {
618 if (m_mobRatMixModel[k]) {
619 m_mobRatMix(i,j) = m_mobRatMixModel[k]->getMixTransProp(m_mobRatSpecies[k]);
620 if (m_mobRatMix(i,j) > 0.0) {
621 m_mobRatMix(j,i) = 1.0/m_mobRatMix(i,j);
629 for (k = 0; k < nsp; k++) {
630 m_selfDiffMix[k] = m_selfDiffMixModel[k]->getMixTransProp(m_selfDiffSpecies[k]);
633 double vP = max(viS[cation[0]],viS[cation[1]]);
634 double vM = viS[anion[0]];
635 double zP = charges[cation[0]];
636 double zM = charges[anion[0]];
637 doublereal xA, xB, eps;
638 doublereal inv_vP_vM_MutualDiff;
640 dlnActCoeffdlnN_diag.resize(neut_molefracs.size(),0.0);
643 xA = neut_molefracs[neutMolIndex[cation[0]]];
644 xB = neut_molefracs[neutMolIndex[cation[1]]];
645 eps = (1-m_mobRatMix(cation[1],cation[0]))/(xA+xB*m_mobRatMix(cation[1],cation[0]));
646 inv_vP_vM_MutualDiff = (xA*(1-xB+dlnActCoeffdlnN_diag[neutMolIndex[cation[1]]])/m_selfDiffMix[cation[1]]+xB*(1-xA+dlnActCoeffdlnN_diag[neutMolIndex[cation[0]]])/m_selfDiffMix[cation[0]]);
648 mat.
resize(nsp, nsp, 0.0);
649 mat(cation[0],cation[1]) = mat(cation[1],cation[0]) = (1+vM/vP)*(1+eps*xB)*(1-eps*xA)*inv_vP_vM_MutualDiff-zP*zP*Faraday*Faraday/
GasConstant/temp/m_ionCondMix/vol;
650 mat(cation[0],anion[0]) = mat(anion[0],cation[0]) = (1+vP/vM)*(-eps*xB*(1-eps*xA)*inv_vP_vM_MutualDiff)-zP*zM*Faraday*Faraday/
GasConstant/temp/m_ionCondMix/vol;
651 mat(cation[1],anion[0]) = mat(anion[0],cation[1]) = (1+vP/vM)*(eps*xA*(1+eps*xB)*inv_vP_vM_MutualDiff)-zP*zM*Faraday*Faraday/
GasConstant/temp/m_ionCondMix/vol;
654 doublereal LTI_StokesEinstein::getMixTransProp(doublereal* speciesValues, doublereal* speciesWeight)
656 size_t nsp = m_thermo->nSpecies();
658 m_thermo->getMoleFractions(&molefracs[0]);
660 doublereal value = 0;
662 throw LTPmodelError(
"Calling LTI_StokesEinstein::getMixTransProp does not make sense.");
667 doublereal LTI_StokesEinstein::getMixTransProp(std::vector<LTPspecies*> LTPptrs)
669 size_t nsp = m_thermo->nSpecies();
671 m_thermo->getMoleFractions(&molefracs[0]);
673 doublereal value = 0;
675 throw LTPmodelError(
"Calling LTI_StokesEinstein::getMixTransProp does not make sense.");
680 void LTI_StokesEinstein::setParameters(LiquidTransportParams& trParam)
682 size_t nsp = m_thermo->nSpecies();
683 m_viscosity.resize(nsp, 0);
684 m_hydroRadius.resize(nsp, 0);
685 for (
size_t k = 0; k < nsp; k++) {
692 void LTI_StokesEinstein::getMatrixTransProp(DenseMatrix& mat, doublereal* speciesValues)
694 size_t nsp = m_thermo->nSpecies();
695 doublereal temp = m_thermo->temperature();
700 for (
size_t k = 0; k < nsp; k++) {
701 viscSpec[k] = m_viscosity[k]->getSpeciesTransProp() ;
702 radiusSpec[k] = m_hydroRadius[k]->getSpeciesTransProp() ;
705 mat.resize(nsp,nsp, 0.0);
706 for (
size_t i = 0; i < nsp; i++)
707 for (
size_t j = 0; j < nsp; j++) {
708 mat(i,j) = (6.0 *
Pi * radiusSpec[i] * viscSpec[j]) /
GasConstant / temp;
719 doublereal value = 0;
723 for (
size_t k = 0; k < nsp; k++) {
724 molefracs[k] = molefracs[k]*speciesWeight[k];
727 throw CanteraError(
"LTI_MoleFracs_ExpT::getMixTransProp",
"You should be specifying the speciesWeight");
730 for (
size_t i = 0; i < nsp; i++) {
731 value += speciesValues[i] * molefracs[i];
732 for (
size_t j = 0; j < nsp; j++) {
733 for (
size_t k = 0; k <
m_Aij.size(); k++) {
734 value += molefracs[i]*molefracs[j]*(*
m_Aij[k])(i,j)*pow(molefracs[i], (
int) k)*exp((*
m_Bij[k])(i,j)*temp);
749 doublereal value = 0;
751 for (
size_t k = 0; k < nsp; k++) {
752 molefracs[k] = molefracs[k]*LTPptrs[k]->getMixWeight();
755 for (
size_t i = 0; i < nsp; i++) {
756 value += LTPptrs[i]->getSpeciesTransProp() * molefracs[i];
757 for (
size_t j = 0; j < nsp; j++) {
758 for (
size_t k = 0; k <
m_Aij.size(); k++) {
759 value += molefracs[i]*molefracs[j]*(*
m_Aij[k])(i,j)*pow(molefracs[i], (
int) k)*exp((*
m_Bij[k])(i,j)*temp);
thermo_t * m_thermo
pointer to thermo object to get current temperature
doublereal getMixTransProp(doublereal *valueSpecies, doublereal *weightSpecies=0)
Copy constructor.
TransportPropertyType
Enumeration of the types of transport properties that can be handled by the variables in the various ...
LiquidTranMixingModel m_model
Model for species interaction effects Takes enum LiquidTranMixingModel.
CTML ("Cantera Markup Language") is the variant of XML that Cantera uses to store data...
std::vector< LiquidTranInteraction * > mobilityRatio
Vector of pointer to the LiquidTranInteraction object which handles the calculation of the mobility r...
void getNeutralMolecMoleFractions(vector_fp &neutralMoleculeMoleFractions) const
Return the current value of the neutral mole fraction vector.
Header for intermediate ThermoPhase object for phases which employ Gibbs excess free energy based for...
std::vector< DenseMatrix * > m_Hij
Matrix of interaction coefficients for polynomial in molefraction*weight of speciesA (in energy units...
std::string attrib(const std::string &attr) const
Function returns the value of an attribute.
void getMassFractions(doublereal *const y) const
Get the species mass fractions.
Header for intermediate ThermoPhase object for phases which consist of ions whose thermodynamics is c...
const size_t npos
index returned by functions to indicate "no position"
doublereal getMixTransProp(doublereal *valueSpecies, doublereal *weightSpecies=0)
Return the mixture transport property value.
std::vector< DenseMatrix * > m_Bij
Matrix of interaction coefficients for polynomial in molefraction*weight of speciesA (linear temperat...
std::vector< DenseMatrix * > m_Aij
Matrix of interaction coefficients for polynomial in molefraction*weight of speciesA (no temperature ...
Class XML_Node is a tree-based representation of the contents of an XML file.
TransportPropertyType m_property
enum indicating what property this is (i.e viscosity)
Class LiquidTransportData holds transport parameters for a specific liquid-phase species.
std::string lowercase(const std::string &s)
Cast a copy of a string to lower case.
virtual doublereal getMixTransProp(doublereal *speciesValues, doublereal *weightSpecies=0)
Return the mixture transport property value.
void getMoleFractions(doublereal *const x) const
Get the species mole fraction vector.
void getMatrixTransProp(DenseMatrix &mat, doublereal *speciesValues=0)
Return the matrix of binary interaction parameters.
LTPspecies * speciesDiffusivity
Model type for the speciesDiffusivity.
void getDissociationCoeffs(vector_fp &fm_neutralMolec_ions, vector_fp &charges, std::vector< size_t > &neutMolIndex) const
Get the Salt Dissociation Coefficients Returns the vector of dissociation coefficients and vector of ...
void getMatrixTransProp(DenseMatrix &mat, doublereal *speciesValues=0)
Return the matrix of binary interaction parameters.
XML_Node & child(const size_t n) const
Return a changeable reference to the n'th child of the current node.
Base class for a phase with thermodynamic properties.
Class LiquidTransportParams holds transport model parameters relevant to transport in mixtures...
std::vector< LiquidTranInteraction * > selfDiffusion
Vector of pointer to the LiquidTranInteraction object which handles the calculation of each species' ...
Header file defining class LiquidTransportParams.
size_t speciesIndex(const std::string &name) const
Returns the index of a species named 'name' within the Phase object.
LiquidTranInteraction * ionConductivity
Object that specifes the ionic Conductivity of the mixture.
void resize(size_t n, size_t m, doublereal v=0.0)
Resize the matrix.
void setParameters(LiquidTransportParams &trParam)
Copy constructor.
doublereal molarVolume() const
Molar volume (m^3/kmol).
void getCationList(std::vector< size_t > &cation) const
Get the list of cations in this object.
DenseMatrix m_Dij
Matrix of interactions.
std::string name() const
Returns the name of the XML node.
void setParameters(LiquidTransportParams &trParam)
Copy constructor.
Base class for exceptions thrown by Cantera classes.
LiquidTranInteraction(TransportPropertyType tp_ind=TP_UNKNOWN)
Constructor.
Exception thrown if an error is encountered while reading the transport database. ...
std::vector< DenseMatrix * > m_Sij
Matrix of interaction coefficients for polynomial in molefraction*weight of speciesA (in entropy unit...
bool hasChild(const std::string &ch) const
Tests whether the current node has a child node with a particular name.
std::vector< Cantera::LiquidTransportData > LTData
Species transport parameters.
size_t nSpecies() const
Returns the number of species in the phase.
#define AssertTrace(expr)
Assertion must be true or an error is thrown.
doublereal temperature() const
Temperature (K).
void getAnionList(std::vector< size_t > &anion) const
Get the list of anions in this object.
std::vector< double > vector_fp
Turn on the use of stl vectors for the basic array type within cantera Vector of doubles.
size_t getFloatArray(const XML_Node &node, std::vector< doublereal > &v, const bool convert, const std::string &unitsString, const std::string &nodeName)
This function reads the current node or a child node of the current node with the default name...
std::vector< LTPspecies * > mobilityRatio
Model type for the mobility ratio.
doublereal getMixTransProp(doublereal *valueSpecies, doublereal *weightSpecies=0)
Copy constructor.
const doublereal GasConstant
Universal Gas Constant. [J/kmol/K].
doublereal getMixTransProp(doublereal *valueSpecies, doublereal *weightSpecies=0)
Return the mixture transport property value.
LTPspecies * hydroRadius
Model type for the hydroradius.
Contains declarations for string manipulation functions within Cantera.
doublereal getFloat(const XML_Node &parent, const std::string &name, const std::string &type)
Get a floating-point value from a child element.
std::vector< LTPspecies * > selfDiffusion
Model type for the self diffusion coefficients.
LTPspecies * viscosity
Model type for the viscosity.
MargulesVPSSTP is a derived class of GibbsExcessVPSSTP that employs the Margules approximation for th...
doublereal getMixTransProp(doublereal *valueSpecies, doublereal *weightSpecies=0)
Copy constructor.
virtual void init(const XML_Node &compModelNode=XML_Node(), thermo_t *thermo=0)
initialize LiquidTranInteraction objects with thermo and XML node
LTPspecies * ionConductivity
Model type for the ionic conductivity.
doublereal getMixTransProp(doublereal *valueSpecies, doublereal *weightSpecies=0)
Copy constructor.
ThermoPhase * neutralMoleculePhase_
This is a pointer to the neutral Molecule Phase.
DenseMatrix m_Eij
Matrix of interactions (in energy units, 1/RT temperature dependence)
Base class to handle transport property evaluation in a mixture.
size_t nChildren(bool discardComments=false) const
Return the number of children.
A class for full (non-sparse) matrices with Fortran-compatible data storage, which adds matrix operat...
Exception thrown if an error is encountered while reading the transport database. ...
virtual void getdlnActCoeffdlnN_diag(doublereal *dlnActCoeffdlnN_diag) const
Get the array of derivatives of the log activity coefficients wrt mole numbers - diagonal only...