Go to the documentation of this file.
10 #ifndef CT_MULTIPHASE_H
11 #define CT_MULTIPHASE_H
150 doublereal
nAtoms(
const size_t kGlob,
const size_t mGlob)
const;
174 std::string
phaseName(
const size_t iph)
const;
181 int phaseIndex(
const std::string& pName)
const;
259 doublereal
charge()
const;
326 bool standard =
false)
const;
362 void equilibrate(
const std::string& XY,
const std::string& solver=
"auto",
363 double rtol=1e-9,
int max_steps=50000,
int max_iter=100,
364 int estimate_equil=0,
int log_level=0);
377 void setState_TP(
const doublereal T,
const doublereal Pres);
386 void setState_TPMoles(
const doublereal T,
const doublereal Pres,
const doublereal* Moles);
398 doublereal
volume()
const;
419 doublereal
gibbs()
const;
423 doublereal
cp()
const;
483 void getMoles(doublereal* molNum)
const;
515 bool tempOK(
size_t p)
const;
563 int maxiter,
int loglevel);
669 inline std::ostream& operator<<(std::ostream& s,
MultiPhase& x)
672 for (
size_t ip = 0; ip < x.
nPhases(); ip++) {
674 s <<
"*************** " << x.
phase(ip).
name() <<
" *****************" << std::endl;
676 s <<
"*************** Phase " << ip <<
" *****************" << std::endl;
678 s <<
"Moles: " << x.
phaseMoles(ip) << std::endl;
716 MultiPhase* mphase, std::vector<size_t>& orderVectorSpecies,
717 std::vector<size_t>& orderVectorElements,
760 std::vector<size_t>& orderVectorSpecies,
761 std::vector<size_t>& orderVectorElements);
void getMoleFractions(doublereal *const x) const
Returns the global Species mole fractions.
void addSpeciesMoles(const int indexS, const doublereal addedMoles)
Adds moles of a certain species to the mixture.
doublereal speciesMoles(size_t kGlob) const
Returns the moles of global species k. units = kmol.
bool solutionSpecies(size_t kGlob) const
Return true is species kGlob is a species in a multicomponent solution phase.
doublereal charge() const
Total charge summed over all phases (Coulombs).
int BasisOptimize_print_lvl
External int that is used to turn on debug printing for the BasisOptimze program.
std::map< std::string, double > compositionMap
Map connecting a string name with a double.
doublereal temperature() const
Temperature [K].
void setState_TPMoles(const doublereal T, const doublereal Pres, const doublereal *Moles)
Set the state of the underlying ThermoPhase objects in one call.
std::string elementName(size_t m) const
Returns the name of the global element m.
void getChemPotentials(doublereal *mu) const
Returns a vector of Chemical potentials.
size_t BasisOptimize(int *usedZeroedSpecies, bool doFormRxn, MultiPhase *mphase, std::vector< size_t > &orderVectorSpecies, std::vector< size_t > &orderVectorElements, vector_fp &formRxnMatrix)
Choose the optimum basis of species for the equilibrium calculations.
vector_int m_atomicNumber
Atomic number of each global element.
void getElemAbundances(doublereal *elemAbundances) const
Retrieves a vector of element abundances.
std::vector< size_t > m_spphase
Mapping between the global species number and the phase ID.
size_t nElements() const
Number of elements.
doublereal phaseCharge(size_t p) const
Charge (Coulombs) of phase with index p.
doublereal m_temp
Current value of the temperature (kelvin)
doublereal phaseMoles(const size_t n) const
Return the number of moles in phase n.
void setState_TP(const doublereal T, const doublereal Pres)
Set the state of the underlying ThermoPhase objects in one call.
doublereal nAtoms(const size_t kGlob, const size_t mGlob) const
Returns the Number of atoms of global element mGlob in global species kGlob.
void checkElementIndex(size_t m) const
Check that the specified element index is in range.
size_t nPhases() const
Number of phases.
void equilibrate(const std::string &XY, const std::string &solver="auto", double rtol=1e-9, int max_steps=50000, int max_iter=100, int estimate_equil=0, int log_level=0)
Equilibrate a MultiPhase object.
doublereal m_Tmin
Minimum temperature for which thermo parameterizations are valid.
void ElemRearrange(size_t nComponents, const vector_fp &elementAbundances, MultiPhase *mphase, std::vector< size_t > &orderVectorSpecies, std::vector< size_t > &orderVectorElements)
Handles the potential rearrangement of the constraint equations represented by the Formula Matrix.
void getMoles(doublereal *molNum) const
Get the mole numbers of all species in the multiphase object.
A class for multiphase mixtures.
void getValidChemPotentials(doublereal not_mu, doublereal *mu, bool standard=false) const
Returns a vector of Valid chemical potentials.
void checkPhaseIndex(size_t m) const
Check that the specified phase index is in range Throws an exception if m is greater than nPhases()
std::map< std::string, size_t > m_enamemap
Returns the global element index, given the element string name.
std::vector< std::string > m_snames
Vector of species names in the problem.
std::vector< bool > m_temp_OK
Vector of bools indicating whether temperatures are ok for phases.
std::vector< double > vector_fp
Turn on the use of stl vectors for the basic array type within cantera Vector of doubles.
std::string name() const
Return the name of the phase.
void calcElemAbundances() const
Calculate the element abundance vector.
void checkPhaseArraySize(size_t mm) const
Check that an array size is at least nPhases() Throws an exception if mm is less than nPhases().
void addPhases(std::vector< ThermoPhase * > &phases, const vector_fp &phaseMoles)
Add a vector of phases to the mixture.
doublereal volume() const
The total mixture volume [m^3].
size_t speciesIndex(size_t k, size_t p) const
Return the global index of the species belonging to phase number p with local index k within the phas...
doublereal IntEnergy() const
The internal energy of the mixture [J].
std::vector< size_t > m_spstart
Vector of ints containing of first species index in the global list of species for each phase.
virtual std::string report(bool show_thermo=true, doublereal threshold=-1e-14) const
returns a summary of the state of the phase as a string
void setMoles(const doublereal *n)
Sets all of the global species mole numbers.
vector_fp m_moles
Vector of the number of moles in each phase.
void init()
Process phases and build atomic composition array.
doublereal maxTemp() const
Maximum temperature for which all solution phases have valid thermo data.
size_t elementIndex(const std::string &name) const
Returns the index of the element with name name.
size_t m_nel
Number of distinct elements in all of the phases.
void checkElementArraySize(size_t mm) const
Check that an array size is at least nElements().
std::vector< ThermoPhase * > m_phase
Vector of the ThermoPhase pointers.
double equilibrate_MultiPhaseEquil(int XY, doublereal err, int maxsteps, int maxiter, int loglevel)
Set the mixture to a state of chemical equilibrium using the MultiPhaseEquil solver.
bool tempOK(size_t p) const
Return true if the phase p has valid thermo data for the current temperature.
std::string phaseName(const size_t iph) const
Returns the name of the n'th phase.
DenseMatrix m_atoms
Global Stoichiometric Coefficient array.
doublereal pressure() const
Pressure [Pa].
thermo_t & phase(size_t n)
Return a reference to phase n.
size_t m_nsp
Number of distinct species in all of the phases.
doublereal elementMoles(size_t m) const
Total moles of global element m, summed over all phases.
Base class for a phase with thermodynamic properties.
std::vector< std::string > m_enames
String names of the global elements.
doublereal moleFraction(const size_t kGlob) const
Returns the mole fraction of global species k.
void setPhaseMoleFractions(const size_t n, const doublereal *const x)
Set the Mole fractions of the nth phase.
virtual ~MultiPhase()
Destructor.
std::string speciesName(const size_t kGlob) const
Name of species with global index kGlob.
vector_fp m_elemAbundances
Vector of element abundances.
void addPhase(ThermoPhase *p, doublereal moles)
Add a phase to the mixture.
doublereal gibbs() const
The Gibbs function of the mixture [J].
doublereal minTemp() const
Minimum temperature for which all solution phases have valid thermo data.
doublereal m_Tmax
Minimum temperature for which thermo parameterizations are valid.
A class for full (non-sparse) matrices with Fortran-compatible data storage, which adds matrix operat...
int phaseIndex(const std::string &pName) const
Returns the index, given the phase name.
size_t m_eloc
Global ID of the element corresponding to the electronic charge.
void uploadMoleFractionsFromPhases()
Update the locally-stored composition within this object to match the current compositions of the pha...
void updatePhases() const
Set the states of the phase objects to the locally-stored state within this MultiPhase object.
doublereal enthalpy() const
The enthalpy of the mixture [J].
doublereal m_press
Current value of the pressure (Pa)
void setPressure(doublereal P)
Set the pressure [Pa].
std::vector< int > vector_int
Vector of ints.
bool m_init
True if the init() routine has been called, and the MultiPhase frozen.
doublereal entropy() const
The entropy of the mixture [J/K].
void checkSpeciesArraySize(size_t kk) const
Check that an array size is at least nSpecies().
size_t speciesPhaseIndex(const size_t kGlob) const
Returns the phase index of the Kth "global" species.
size_t nSpecies() const
Number of species, summed over all phases.
vector_fp m_moleFractions
Locally stored vector of mole fractions of all species comprising the MultiPhase object.
void setTemperature(const doublereal T)
Set the temperature [K].
void setMolesByName(const compositionMap &xMap)
Set the number of moles of species in the mixture.
doublereal cp() const
Heat capacity at constant pressure [J/K].
Namespace for the Cantera kernel.
void setPhaseMoles(const size_t n, const doublereal moles)
Set the number of moles of phase with index n.
void checkSpeciesIndex(size_t k) const
Check that the specified species index is in range.