Cantera
2.3.0
|
Cantera's Interface to the Multiphase chemical equilibrium solver. More...
#include <vcs_MultiPhaseEquil.h>
Public Member Functions | |
vcs_MultiPhaseEquil (MultiPhase *mix, int printLvl) | |
Constructor for the multiphase equilibrium solver. More... | |
size_t | component (size_t m) const |
Return the index of the ith component. More... | |
void | getStoichVector (size_t rxn, vector_fp &nu) |
Get the stoichiometric reaction coefficients for a single reaction index. More... | |
int | iterations () const |
return the number of iterations More... | |
int | equilibrate (int XY, int estimateEquil=0, int printLvl=0, doublereal err=1.0e-6, int maxsteps=VCS_MAXSTEPS, int loglevel=-99) |
Equilibrate the solution using the current element abundances stored in the MultiPhase object. More... | |
int | equilibrate_TP (int estimateEquil=0, int printLvl=0, doublereal err=1.0e-6, int maxsteps=VCS_MAXSTEPS, int loglevel=-99) |
Equilibrate the solution using the current element abundances stored in the MultiPhase object using constant T and P. More... | |
int | equilibrate_HP (doublereal Htarget, int XY, double Tlow, double Thigh, int estimateEquil=0, int printLvl=0, doublereal err=1.0E-6, int maxsteps=VCS_MAXSTEPS, int loglevel=-99) |
Equilibrate the solution using the current element abundances stored in the MultiPhase object using either constant H and P or constant U and P. More... | |
int | equilibrate_SP (doublereal Starget, double Tlow, double Thigh, int estimateEquil=0, int printLvl=0, doublereal err=1.0E-6, int maxsteps=VCS_MAXSTEPS, int loglevel=-99) |
Equilibrate the solution using the current element abundances stored in the MultiPhase object using constant S and P. More... | |
int | equilibrate_TV (int XY, doublereal xtarget, int estimateEquil=0, int printLvl=0, doublereal err=1.0E-6, int maxsteps=VCS_MAXSTEPS, int logLevel=-99) |
Equilibrate the solution using the current element abundances stored in the MultiPhase object using constant V and constant T, H, U or S. More... | |
int | determine_PhaseStability (int iph, double &funcStab, int printLvl=0, int logLevel=-99) |
Determine the phase stability of a phase at the current conditions. More... | |
void | reportCSV (const std::string &reportFile) |
Report the equilibrium answer in a comma separated table format. More... | |
size_t | numComponents () const |
reports the number of components in the equilibration problem More... | |
size_t | numElemConstraints () const |
Reports the number of element constraints in the equilibration problem. More... | |
Protected Attributes | |
vector_int | m_order |
Vector that takes into account of the current sorting of the species. More... | |
VCS_PROB | m_vprob |
Object which contains the problem statement. More... | |
MultiPhase * | m_mix |
Pointer to the MultiPhase mixture that will be equilibrated. More... | |
int | m_printLvl |
Print level from the VCSnonlinear package. More... | |
DenseMatrix | m_N |
Stoichiometric matrix. More... | |
int | m_iter |
Iteration Count. More... | |
vector_int | m_species |
Vector of indices for species that are included in the calculation. More... | |
VCS_SOLVE | m_vsolve |
The object that does all of the equilibration work. More... | |
Friends | |
int | vcs_Cantera_to_vprob (MultiPhase *mphase, VCS_PROB *vprob) |
Translate a MultiPhase object into a VCS_PROB problem definition object. More... | |
int | vcs_Cantera_update_vprob (MultiPhase *mphase, VCS_PROB *vprob) |
Translate a MultiPhase information into a VCS_PROB problem definition object. More... | |
Cantera's Interface to the Multiphase chemical equilibrium solver.
Class vcs_MultiPhaseEquil is designed to be used to set a mixture containing one or more phases to a state of chemical equilibrium.
Note, as currently constructed, the underlying ThermoPhase objects are shared between the MultiPhase object and this object. Therefore, mix is not a const argument, and the return parameters are contained in underlying ThermoPhase objects.
Definition at line 51 of file vcs_MultiPhaseEquil.h.
vcs_MultiPhaseEquil | ( | MultiPhase * | mix, |
int | printLvl | ||
) |
Constructor for the multiphase equilibrium solver.
This constructor will initialize the object with a MultiPhase object, setting up the internal equilibration problem. Note, as currently constructed, the underlying ThermoPhase objects are shared between the MultiPhase object and this object. Therefore, mix is not a const argument, and the return parameters are contained in underlying ThermoPhase objects.
mix | Object containing the MultiPhase object |
printLvl | Determines the amount of printing to stdout that occurs for each call:
|
Definition at line 31 of file vcs_MultiPhaseEquil.cpp.
References vcs_MultiPhaseEquil::m_mix, VCS_PROB::m_printLvl, vcs_MultiPhaseEquil::m_printLvl, vcs_MultiPhaseEquil::m_vprob, plogf, and vcs_MultiPhaseEquil::vcs_Cantera_to_vprob.
size_t component | ( | size_t | m | ) | const |
Return the index of the ith component.
Returns the index of the ith component in the equilibrium calculation. The index refers to the ordering of the species in the MultiPhase object.
m | Index of the component. Must be between 0 and the number of components, which can be obtained from the numComponents() command. |
Definition at line 1111 of file vcs_MultiPhaseEquil.cpp.
References VCS_SOLVE::m_speciesMapIndex, vcs_MultiPhaseEquil::m_vsolve, Cantera::npos, vcs_MultiPhaseEquil::numComponents(), and Cantera::warn_deprecated().
void getStoichVector | ( | size_t | rxn, |
vector_fp & | nu | ||
) |
Get the stoichiometric reaction coefficients for a single reaction index.
This returns a stoichiometric reaction vector for a single formation reaction for a noncomponent species. There are (nSpecies() - nComponents) formation reactions. Each formation reaction will have a value of 1.0 for the species that is being formed, and the other non-zero coefficients will all involve the components of the mixture.
rxn | Reaction number. |
nu | Vector of coefficients for the formation reaction. Length is equal to the number of species in the MultiPhase object. |
Definition at line 1075 of file vcs_MultiPhaseEquil.cpp.
References VCS_SOLVE::m_numSpeciesTot, VCS_SOLVE::m_speciesMapIndex, VCS_SOLVE::m_stoichCoeffRxnMatrix, vcs_MultiPhaseEquil::m_vsolve, vcs_MultiPhaseEquil::numComponents(), and Cantera::warn_deprecated().
|
inline |
return the number of iterations
Definition at line 107 of file vcs_MultiPhaseEquil.h.
References vcs_MultiPhaseEquil::m_iter.
int equilibrate | ( | int | XY, |
int | estimateEquil = 0 , |
||
int | printLvl = 0 , |
||
doublereal | err = 1.0e-6 , |
||
int | maxsteps = VCS_MAXSTEPS , |
||
int | loglevel = -99 |
||
) |
Equilibrate the solution using the current element abundances stored in the MultiPhase object.
Use the vcs algorithm to equilibrate the current multiphase mixture.
XY | Integer representing what two thermo quantities are held constant during the equilibration |
estimateEquil | integer indicating whether the solver should estimate its own initial condition.
|
printLvl | Determines the amount of printing that gets sent to stdout from the vcs package (Note, you may have to compile with debug flags to get some printing). |
err | Internal error level |
maxsteps | max steps allowed. |
loglevel | Determines the amount of printing to the output file. |
Definition at line 387 of file vcs_MultiPhaseEquil.cpp.
References MultiPhase::enthalpy(), MultiPhase::entropy(), vcs_MultiPhaseEquil::equilibrate_HP(), vcs_MultiPhaseEquil::equilibrate_SP(), vcs_MultiPhaseEquil::equilibrate_TP(), vcs_MultiPhaseEquil::equilibrate_TV(), MultiPhase::IntEnergy(), vcs_MultiPhaseEquil::m_mix, MultiPhase::maxTemp(), MultiPhase::minTemp(), and MultiPhase::temperature().
Referenced by MultiPhase::equilibrate().
int equilibrate_TP | ( | int | estimateEquil = 0 , |
int | printLvl = 0 , |
||
doublereal | err = 1.0e-6 , |
||
int | maxsteps = VCS_MAXSTEPS , |
||
int | loglevel = -99 |
||
) |
Equilibrate the solution using the current element abundances stored in the MultiPhase object using constant T and P.
Use the vcs algorithm to equilibrate the current multiphase mixture.
estimateEquil | integer indicating whether the solver should estimate its own initial condition.
|
printLvl | Determines the amount of printing that gets sent to stdout from the vcs package (Note, you may have to compile with debug flags to get some printing). |
err | Internal error level |
maxsteps | max steps allowed. |
loglevel | Determines the amount of printing to the output file. |
Definition at line 432 of file vcs_MultiPhaseEquil.cpp.
References VCS_PROB::iest, VCS_PROB::m_gibbsSpecies, vcs_MultiPhaseEquil::m_mix, VCS_PROB::m_printLvl, vcs_MultiPhaseEquil::m_printLvl, VCS_SOLVE::m_timing_print_lvl, vcs_MultiPhaseEquil::m_vprob, vcs_MultiPhaseEquil::m_vsolve, VCS_PROB::mf, VCS_PROB::NPhase, VCS_PROB::nspecies, Phase::nSpecies(), vcs_VolPhase::nSpecies(), MultiPhase::phase(), VCS_PROB::PhaseID, plogf, VCS_PROB::PresPA, MultiPhase::pressure(), VCS_PROB::prob_report(), clockWC::secondsWC(), MultiPhase::setPhaseMoles(), VCS_PROB::SpeciesUnknownType, VCS_PROB::SpName, VCS_PROB::T, MultiPhase::temperature(), MultiPhase::uploadMoleFractionsFromPhases(), VCS_SOLVE::vcs(), vcs_MultiPhaseEquil::vcs_Cantera_update_vprob, VCS_SPECIES_TYPE_INTERFACIALVOLTAGE, VCS_PROB::VPhaseList, and VCS_PROB::w.
Referenced by vcs_MultiPhaseEquil::equilibrate(), vcs_MultiPhaseEquil::equilibrate_HP(), vcs_MultiPhaseEquil::equilibrate_SP(), and vcs_MultiPhaseEquil::equilibrate_TV().
int equilibrate_HP | ( | doublereal | Htarget, |
int | XY, | ||
double | Tlow, | ||
double | Thigh, | ||
int | estimateEquil = 0 , |
||
int | printLvl = 0 , |
||
doublereal | err = 1.0E-6 , |
||
int | maxsteps = VCS_MAXSTEPS , |
||
int | loglevel = -99 |
||
) |
Equilibrate the solution using the current element abundances stored in the MultiPhase object using either constant H and P or constant U and P.
Use the vcs algorithm to equilibrate the current multiphase mixture. The pressure of the calculation is taken from the current pressure stored with the MultiPhase object.
Htarget | Value of the total mixture enthalpy or total internal energy that will be kept constant. Note, this is and must be an extensive quantity. units = Joules |
XY | Integer flag indicating what is held constant. Must be either HP or UP. |
Tlow | Lower limit of the temperature. It's an error condition if the temperature falls below Tlow. |
Thigh | Upper limit of the temperature. It's an error condition if the temperature goes higher than Thigh. |
estimateEquil | integer indicating whether the solver should estimate its own initial condition.
|
printLvl | Determines the amount of printing that gets sent to stdout from the vcs package (Note, you may have to compile with debug flags to get some printing). See main constructor call for meaning of the levels. |
err | Internal error level |
maxsteps | max steps allowed. |
loglevel | Determines the amount of printing to the output file. |
Definition at line 144 of file vcs_MultiPhaseEquil.cpp.
References Cantera::clip(), MultiPhase::enthalpy(), vcs_MultiPhaseEquil::equilibrate_TP(), MultiPhase::IntEnergy(), vcs_MultiPhaseEquil::m_mix, MultiPhase::maxTemp(), MultiPhase::minTemp(), MultiPhase::phaseMoles(), plogendl, plogf, MultiPhase::temperature(), and Cantera::Undef.
Referenced by vcs_MultiPhaseEquil::equilibrate(), and vcs_MultiPhaseEquil::equilibrate_TV().
int equilibrate_SP | ( | doublereal | Starget, |
double | Tlow, | ||
double | Thigh, | ||
int | estimateEquil = 0 , |
||
int | printLvl = 0 , |
||
doublereal | err = 1.0E-6 , |
||
int | maxsteps = VCS_MAXSTEPS , |
||
int | loglevel = -99 |
||
) |
Equilibrate the solution using the current element abundances stored in the MultiPhase object using constant S and P.
Use the vcs algorithm to equilibrate the current multiphase mixture. The pressure of the calculation is taken from the current pressure stored with the MultiPhase object.
Starget | Value of the total mixture entropy that will be kept constant. Note, this is and must be an extensive quantity. units = Joules/K |
Tlow | Lower limit of the temperature. It's an error condition if the temperature falls below Tlow. |
Thigh | Upper limit of the temperature. It's an error condition if the temperature goes higher than Thigh. |
estimateEquil | integer indicating whether the solver should estimate its own initial condition.
|
printLvl | Determines the amount of printing that gets sent to stdout from the vcs package (Note, you may have to compile with debug flags to get some printing). See main constructor call for meaning of the levels. |
err | Internal error level |
maxsteps | max steps allowed. |
loglevel | Determines the amount of printing to the output file. |
Definition at line 261 of file vcs_MultiPhaseEquil.cpp.
References MultiPhase::entropy(), vcs_MultiPhaseEquil::equilibrate_TP(), vcs_MultiPhaseEquil::m_mix, MultiPhase::maxTemp(), MultiPhase::minTemp(), MultiPhase::phaseMoles(), plogf, MultiPhase::temperature(), and Cantera::Undef.
Referenced by vcs_MultiPhaseEquil::equilibrate(), and vcs_MultiPhaseEquil::equilibrate_TV().
int equilibrate_TV | ( | int | XY, |
doublereal | xtarget, | ||
int | estimateEquil = 0 , |
||
int | printLvl = 0 , |
||
doublereal | err = 1.0E-6 , |
||
int | maxsteps = VCS_MAXSTEPS , |
||
int | logLevel = -99 |
||
) |
Equilibrate the solution using the current element abundances stored in the MultiPhase object using constant V and constant T, H, U or S.
Use the vcs algorithm to equilibrate the current multiphase mixture. The pressure of the calculation is taken from the current pressure stored with the MultiPhase object.
XY | Integer flag indicating what is held constant. Must be either TV, HV, UV, or SV. |
xtarget | Value of the total thermodynamic parameter to be held constant in addition to V. Note, except for T, this must be an extensive quantity. units = Joules/K or Joules |
estimateEquil | integer indicating whether the solver should estimate its own initial condition.
|
printLvl | Determines the amount of printing that gets sent to stdout from the vcs package (Note, you may have to compile with debug flags to get some printing). See main constructor call for meaning of the levels. |
err | Internal error level |
maxsteps | max steps allowed. |
logLevel | Determines the amount of printing to the output file. |
Definition at line 47 of file vcs_MultiPhaseEquil.cpp.
References vcs_MultiPhaseEquil::equilibrate_HP(), vcs_MultiPhaseEquil::equilibrate_SP(), vcs_MultiPhaseEquil::equilibrate_TP(), vcs_MultiPhaseEquil::m_mix, MultiPhase::maxTemp(), MultiPhase::minTemp(), MultiPhase::pressure(), MultiPhase::setPressure(), MultiPhase::setTemperature(), and MultiPhase::volume().
Referenced by vcs_MultiPhaseEquil::equilibrate().
int determine_PhaseStability | ( | int | iph, |
double & | funcStab, | ||
int | printLvl = 0 , |
||
int | logLevel = -99 |
||
) |
Determine the phase stability of a phase at the current conditions.
Equilibration of the solution is not done before the determination is made.
iph | Phase number to determine the equilibrium. If the phase has a non-zero mole number.... |
funcStab | Value of the phase pop function |
printLvl | Determines the amount of printing that gets sent to stdout from the vcs package (Note, you may have to compile with debug flags to get some printing). |
logLevel | Determines the amount of printing to the output file. |
Definition at line 1123 of file vcs_MultiPhaseEquil.cpp.
References vcs_MultiPhaseEquil::m_mix, VCS_PROB::m_printLvl, vcs_MultiPhaseEquil::m_printLvl, vcs_MultiPhaseEquil::m_vprob, plogf, vcs_MultiPhaseEquil::vcs_Cantera_update_vprob, and Cantera::warn_deprecated().
void reportCSV | ( | const std::string & | reportFile | ) |
Report the equilibrium answer in a comma separated table format.
This routine is used for in the test suite.
reportFile | Base name of the file to get the report. File name is incremented by 1 for each report. |
Definition at line 541 of file vcs_MultiPhaseEquil.cpp.
References ThermoPhase::activityConvention(), ThermoPhase::getActivities(), ThermoPhase::getActivityCoefficients(), ThermoPhase::getChemPotentials(), MolalityVPSSTP::getMolalities(), ThermoPhase::getPartialMolarVolumes(), ThermoPhase::getStandardChemPotentials(), VCS_PROB::m_gibbsSpecies, VCS_PROB::m_Iterations, vcs_MultiPhaseEquil::m_mix, VCS_PROB::m_NumBasisOptimizations, vcs_MultiPhaseEquil::m_vprob, VCS_PROB::mf, Phase::name(), VCS_PROB::NPhase, Phase::nSpecies(), MultiPhase::phase(), MultiPhase::pressure(), MultiPhase::speciesIndex(), Phase::speciesName(), MultiPhase::temperature(), vcs_VolPhase::totalMoles(), Cantera::vcs_doubleEqual(), and VCS_PROB::VPhaseList.
size_t numComponents | ( | ) | const |
reports the number of components in the equilibration problem
Definition at line 1097 of file vcs_MultiPhaseEquil.cpp.
References VCS_SOLVE::m_numComponents, vcs_MultiPhaseEquil::m_vsolve, and Cantera::warn_deprecated().
Referenced by vcs_MultiPhaseEquil::component(), and vcs_MultiPhaseEquil::getStoichVector().
size_t numElemConstraints | ( | ) | const |
Reports the number of element constraints in the equilibration problem.
Definition at line 1104 of file vcs_MultiPhaseEquil.cpp.
References VCS_SOLVE::m_numElemConstraints, vcs_MultiPhaseEquil::m_vsolve, and Cantera::warn_deprecated().
|
friend |
Translate a MultiPhase object into a VCS_PROB problem definition object.
mphase | MultiPhase object that is the source for all of the information |
vprob | VCS_PROB problem definition that gets all of the information |
Note, both objects share the underlying ThermoPhase objects. So, neither can be const objects.
Definition at line 678 of file vcs_MultiPhaseEquil.cpp.
Referenced by vcs_MultiPhaseEquil::vcs_MultiPhaseEquil().
|
friend |
Translate a MultiPhase information into a VCS_PROB problem definition object.
This version updates the problem statement information only. All species and phase definitions remain the same.
mphase | MultiPhase object that is the source for all of the information |
vprob | VCS_PROB problem definition that gets all of the information |
Definition at line 967 of file vcs_MultiPhaseEquil.cpp.
Referenced by vcs_MultiPhaseEquil::determine_PhaseStability(), and vcs_MultiPhaseEquil::equilibrate_TP().
|
protected |
Vector that takes into account of the current sorting of the species.
The index of m_order is the original k value of the species in the multiphase. The value of m_order, k_sorted, is the current value of the species index.
m_order[korig] = k_sorted
Definition at line 321 of file vcs_MultiPhaseEquil.h.
|
protected |
Object which contains the problem statement.
The problem statement may contain some subtleties. For example, the element constraints may be different than just an element conservation contraint equations. There may be kinetically frozen degrees of freedom. There may be multiple electrolyte phases with zero charge constraints. All of these make the problem statement different than the simple element conservation statement.
Definition at line 332 of file vcs_MultiPhaseEquil.h.
Referenced by vcs_MultiPhaseEquil::determine_PhaseStability(), vcs_MultiPhaseEquil::equilibrate_TP(), vcs_MultiPhaseEquil::reportCSV(), and vcs_MultiPhaseEquil::vcs_MultiPhaseEquil().
|
protected |
Pointer to the MultiPhase mixture that will be equilibrated.
Equilibrium solutions will be returned via this variable.
Definition at line 338 of file vcs_MultiPhaseEquil.h.
Referenced by vcs_MultiPhaseEquil::determine_PhaseStability(), vcs_MultiPhaseEquil::equilibrate(), vcs_MultiPhaseEquil::equilibrate_HP(), vcs_MultiPhaseEquil::equilibrate_SP(), vcs_MultiPhaseEquil::equilibrate_TP(), vcs_MultiPhaseEquil::equilibrate_TV(), vcs_MultiPhaseEquil::reportCSV(), and vcs_MultiPhaseEquil::vcs_MultiPhaseEquil().
|
protected |
Print level from the VCSnonlinear package.
(Note, you may have to compile with debug flags to get some printing).
Definition at line 353 of file vcs_MultiPhaseEquil.h.
Referenced by vcs_MultiPhaseEquil::determine_PhaseStability(), vcs_MultiPhaseEquil::equilibrate_TP(), and vcs_MultiPhaseEquil::vcs_MultiPhaseEquil().
|
protected |
Stoichiometric matrix.
Definition at line 356 of file vcs_MultiPhaseEquil.h.
|
protected |
Iteration Count.
Definition at line 359 of file vcs_MultiPhaseEquil.h.
Referenced by vcs_MultiPhaseEquil::iterations().
|
protected |
Vector of indices for species that are included in the calculation.
This is used to exclude pure-phase species with invalid thermo data
Definition at line 363 of file vcs_MultiPhaseEquil.h.
|
protected |
The object that does all of the equilibration work.
VCS_SOLVE will have different ordering for species and element constraints than this object or the VCS_PROB object.
Definition at line 370 of file vcs_MultiPhaseEquil.h.
Referenced by vcs_MultiPhaseEquil::component(), vcs_MultiPhaseEquil::equilibrate_TP(), vcs_MultiPhaseEquil::getStoichVector(), vcs_MultiPhaseEquil::numComponents(), and vcs_MultiPhaseEquil::numElemConstraints().