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);
Headers for the DenseMatrix object, which deals with dense rectangular matrices and description of th...
Header file for class ThermoPhase, the base class for phases with thermodynamic properties,...
A class for full (non-sparse) matrices with Fortran-compatible data storage, which adds matrix operat...
A class for multiphase mixtures.
doublereal maxTemp() const
Maximum temperature for which all solution phases have valid thermo data.
void init()
Process phases and build atomic composition array.
void getMoleFractions(doublereal *const x) const
Returns the global Species mole fractions.
void setState_TPMoles(const doublereal T, const doublereal Pres, const doublereal *Moles)
Set the state of the underlying ThermoPhase objects in one call.
void checkPhaseIndex(size_t m) const
Check that the specified phase index is in range Throws an exception if m is greater than nPhases()
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...
bool solutionSpecies(size_t kGlob) const
Return true is species kGlob is a species in a multicomponent solution phase.
doublereal m_press
Current value of the pressure (Pa)
void setMoles(const doublereal *n)
Sets all of the global species mole numbers.
DenseMatrix m_atoms
Global Stoichiometric Coefficient array.
void getMoles(doublereal *molNum) const
Get the mole numbers of all species in the multiphase object.
void checkSpeciesIndex(size_t k) const
Check that the specified species index is in range.
size_t m_nel
Number of distinct elements in all of the phases.
vector_fp m_moleFractions
Locally stored vector of mole fractions of all species comprising the MultiPhase object.
doublereal minTemp() const
Minimum temperature for which all solution phases have valid thermo data.
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.
void calcElemAbundances() const
Calculate the element abundance vector.
size_t nSpecies() const
Number of species, summed over all phases.
doublereal gibbs() const
The Gibbs function of the mixture [J].
doublereal cp() const
Heat capacity at constant pressure [J/K].
doublereal pressure() const
Pressure [Pa].
doublereal enthalpy() const
The enthalpy of the mixture [J].
std::map< std::string, size_t > m_enamemap
Returns the global element index, given the element string name.
doublereal speciesMoles(size_t kGlob) const
Returns the moles of global species k. units = kmol.
void addSpeciesMoles(const int indexS, const doublereal addedMoles)
Adds moles of a certain species to the mixture.
doublereal m_temp
Current value of the temperature (kelvin)
doublereal IntEnergy() const
The internal energy of the mixture [J].
void checkPhaseArraySize(size_t mm) const
Check that an array size is at least nPhases() Throws an exception if mm is less than nPhases().
vector_fp m_elemAbundances
Vector of element abundances.
std::vector< size_t > m_spstart
Vector of ints containing of first species index in the global list of species for each phase.
doublereal m_Tmax
Minimum temperature for which thermo parameterizations are valid.
doublereal m_Tmin
Minimum temperature for which thermo parameterizations are valid.
vector_fp m_moles
Vector of the number of moles in each phase.
size_t nPhases() const
Number of phases.
size_t m_eloc
Global ID of the element corresponding to the electronic charge.
doublereal moleFraction(const size_t kGlob) const
Returns the mole fraction of global species k.
doublereal phaseMoles(const size_t n) const
Return the number of moles in phase n.
std::vector< size_t > m_spphase
Mapping between the global species number and the phase ID.
std::vector< std::string > m_snames
Vector of species names in the problem.
std::string speciesName(const size_t kGlob) const
Name of species with global index kGlob.
vector_int m_atomicNumber
Atomic number of each global element.
size_t elementIndex(const std::string &name) const
Returns the index of the element with name name.
bool tempOK(size_t p) const
Return true if the phase p has valid thermo data for the current temperature.
std::string elementName(size_t m) const
Returns the name of the global element m.
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 checkElementArraySize(size_t mm) const
Check that an array size is at least nElements().
size_t speciesPhaseIndex(const size_t kGlob) const
Returns the phase index of the Kth "global" species.
void addPhases(std::vector< ThermoPhase * > &phases, const vector_fp &phaseMoles)
Add a vector of phases to the mixture.
std::vector< std::string > m_enames
String names of the global elements.
void setPressure(doublereal P)
Set the pressure [Pa].
doublereal elementMoles(size_t m) const
Total moles of global element m, summed over all phases.
void setPhaseMoleFractions(const size_t n, const doublereal *const x)
Set the Mole fractions of the nth phase.
doublereal charge() const
Total charge summed over all phases (Coulombs).
std::string phaseName(const size_t iph) const
Returns the name of the n'th phase.
void getValidChemPotentials(doublereal not_mu, doublereal *mu, bool standard=false) const
Returns a vector of Valid chemical potentials.
void setState_TP(const doublereal T, const doublereal Pres)
Set the state of the underlying ThermoPhase objects in one call.
doublereal entropy() const
The entropy of the mixture [J/K].
void setMolesByName(const compositionMap &xMap)
Set the number of moles of species in the mixture.
size_t m_nsp
Number of distinct species in all of the phases.
void uploadMoleFractionsFromPhases()
Update the locally-stored composition within this object to match the current compositions of the pha...
bool m_init
True if the init() routine has been called, and the MultiPhase frozen.
doublereal volume() const
The total mixture volume [m^3].
void updatePhases() const
Set the states of the phase objects to the locally-stored state within this MultiPhase object.
void setPhaseMoles(const size_t n, const doublereal moles)
Set the number of moles of phase with index n.
void checkSpeciesArraySize(size_t kk) const
Check that an array size is at least nSpecies().
void getElemAbundances(doublereal *elemAbundances) const
Retrieves a vector of element abundances.
doublereal temperature() const
Temperature [K].
size_t nElements() const
Number of elements.
virtual ~MultiPhase()
Destructor.
std::vector< bool > m_temp_OK
Vector of bools indicating whether temperatures are ok for phases.
int phaseIndex(const std::string &pName) const
Returns the index, given the phase name.
std::vector< ThermoPhase * > m_phase
Vector of the ThermoPhase pointers.
void addPhase(ThermoPhase *p, doublereal moles)
Add a phase to the mixture.
void getChemPotentials(doublereal *mu) const
Returns a vector of Chemical potentials.
void checkElementIndex(size_t m) const
Check that the specified element index is in range.
doublereal phaseCharge(size_t p) const
Charge (Coulombs) of phase with index p.
thermo_t & phase(size_t n)
Return a reference to phase n.
void setTemperature(const doublereal T)
Set the temperature [K].
std::string name() const
Return the name of the phase.
Base class for a phase with thermodynamic properties.
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
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.
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 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.
std::vector< int > vector_int
Vector of ints.
std::vector< double > vector_fp
Turn on the use of stl vectors for the basic array type within cantera Vector of doubles.
std::map< std::string, double > compositionMap
Map connecting a string name with a double.
Namespace for the Cantera kernel.
int BasisOptimize_print_lvl
External int that is used to turn on debug printing for the BasisOptimze program.