Cleaned up Doxygen documentation for class vcs_MultiPhaseEquil
This commit is contained in:
parent
ba5115fe64
commit
fc7067b63d
2 changed files with 195 additions and 376 deletions
|
|
@ -11,58 +11,38 @@
|
|||
|
||||
namespace Cantera
|
||||
{
|
||||
|
||||
|
||||
//! Set a single-phase chemical solution to chemical equilibrium.
|
||||
/*!
|
||||
* The function uses the element abundance vector that is
|
||||
* currently consistent with the composition within the phase
|
||||
* itself. Two other thermodynamic quantities, determined by the
|
||||
* XY string, are held constant during the equilibration.
|
||||
* This is a convenience function that uses one or the other of
|
||||
* the two chemical equilibrium solvers.
|
||||
* The function uses the element abundance vector that is currently
|
||||
* consistent with the composition within the phase itself. Two other
|
||||
* thermodynamic quantities, determined by the XY string, are held constant
|
||||
* during the equilibration. This is a convenience function that uses one or
|
||||
* the other of the two chemical equilibrium solvers.
|
||||
*
|
||||
* @param s The object to set to an equilibrium state
|
||||
*
|
||||
* @param XY An integer specifying the two properties to be held
|
||||
* constant.
|
||||
*
|
||||
* @param XY An integer specifying the two properties to be held constant.
|
||||
* @param estimateEquil integer indicating whether the solver
|
||||
* should estimate its own initial condition.
|
||||
* If 0, the initial mole fraction vector
|
||||
* in the %ThermoPhase object is used as the
|
||||
* initial condition.
|
||||
* If 1, the initial mole fraction vector
|
||||
* is used if the element abundances are
|
||||
* satisfied.
|
||||
* if -1, the initial mole fraction vector
|
||||
* is thrown out, and an estimate is
|
||||
* formulated.
|
||||
*
|
||||
* @param 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).
|
||||
*
|
||||
* @param solver The equilibrium solver to use. If solver = 0,
|
||||
* the ChemEquil solver will be used, and if
|
||||
* solver = 1, the vcs_MultiPhaseEquil solver will
|
||||
* be used (slower than ChemEquil,
|
||||
* but more stable). If solver < 0 (default, then
|
||||
* - If 0, the initial mole fraction vector in the
|
||||
* ThermoPhase object is used as the initial condition.
|
||||
* - If 1, the initial mole fraction vector is used if the
|
||||
* element abundances are satisfied.
|
||||
* - if -1, the initial mole fraction vector is thrown out,
|
||||
* and an estimate is formulated.
|
||||
* @param 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).
|
||||
* @param solver The equilibrium solver to use. If solver = 0, the ChemEquil
|
||||
* solver will be used, and if solver = 1, the
|
||||
* vcs_MultiPhaseEquil solver will be used (slower than
|
||||
* ChemEquil, but more stable). If solver < 0 (default, then
|
||||
* ChemEquil will be tried first, and if it fails
|
||||
* vcs_MultiPhaseEquil will be tried.
|
||||
*
|
||||
* @param rtol Relative tolerance of the solve. Defaults to
|
||||
* 1.0E-9.
|
||||
*
|
||||
* @param maxsteps The maximum number of steps to take to find
|
||||
* the solution.
|
||||
*
|
||||
* @param maxiter For the MultiPhaseEquil solver only, this is
|
||||
* the maximum number of outer temperature or
|
||||
* pressure iterations to take when T and/or P is
|
||||
* not held fixed.
|
||||
*
|
||||
* @param rtol Relative tolerance of the solve. Defaults to 1.0E-9.
|
||||
* @param maxsteps The maximum number of steps to take to find the solution.
|
||||
* @param maxiter For the MultiPhaseEquil solver only, this is the maximum
|
||||
* number of outer temperature or pressure iterations to take
|
||||
* when T and/or P is not held fixed.
|
||||
* @param loglevel Controls amount of diagnostic output. loglevel
|
||||
* = 0 suppresses diagnostics, and increasingly-verbose
|
||||
* messages are written as loglevel increases. The
|
||||
|
|
@ -77,53 +57,35 @@ int vcs_equilibrate(thermo_t& s, const char* XY,
|
|||
int maxsteps = VCS_MAXSTEPS,
|
||||
int maxiter = 100, int loglevel = -99);
|
||||
|
||||
|
||||
//! Set a multi-phase chemical solution to chemical equilibrium.
|
||||
/*!
|
||||
* This function uses the vcs_MultiPhaseEquil interface to the
|
||||
* vcs solver.
|
||||
* The function uses the element abundance vector that is
|
||||
* currently consistent with the composition within the phases
|
||||
* themselves. Two other thermodynamic quantities, determined by the
|
||||
* XY string, are held constant during the equilibration.
|
||||
* This function uses the vcs_MultiPhaseEquil interface to the vcs solver.
|
||||
* The function uses the element abundance vector that is currently
|
||||
* consistent with the composition within the phases themselves. Two other
|
||||
* thermodynamic quantities, determined by the XY string, are held constant
|
||||
* during the equilibration.
|
||||
*
|
||||
* @param s The object to set to an equilibrium state
|
||||
*
|
||||
* @param XY A character string representing the unknowns
|
||||
* to be held constant
|
||||
*
|
||||
* @param XY A character string representing the unknowns to be held constant
|
||||
* @param estimateEquil integer indicating whether the solver
|
||||
* should estimate its own initial condition.
|
||||
* If 0, the initial mole fraction vector
|
||||
* in the %ThermoPhase object is used as the
|
||||
* initial condition.
|
||||
* If 1, the initial mole fraction vector
|
||||
* is used if the element abundances are
|
||||
* satisfied.
|
||||
* if -1, the initial mole fraction vector
|
||||
* is thrown out, and an estimate is
|
||||
* formulated.
|
||||
*
|
||||
* @param 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).
|
||||
*
|
||||
* - If 0, the initial mole fraction vector in the
|
||||
* ThermoPhase object is used as the initial condition.
|
||||
* - If 1, the initial mole fraction vector is used if the
|
||||
* element abundances are satisfied.
|
||||
* - If -1, the initial mole fraction vector is thrown out,
|
||||
* and an estimate is formulated.
|
||||
* @param 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).
|
||||
* @param solver Determines which solver is used.
|
||||
* - 1 MultiPhaseEquil solver
|
||||
* - 2 VCSnonideal Solver (default)
|
||||
*
|
||||
* @param rtol Relative tolerance of the solve. Defaults to
|
||||
* 1.0E-9.
|
||||
*
|
||||
* @param maxsteps The maximum number of steps to take to find
|
||||
* the solution.
|
||||
*
|
||||
* @param maxiter For the MultiPhaseEquil solver only, this is
|
||||
* the maximum number of outer temperature or
|
||||
* pressure iterations to take when T and/or P is
|
||||
* not held fixed.
|
||||
*
|
||||
* @param rtol Relative tolerance of the solve. Defaults to 1.0E-9.
|
||||
* @param maxsteps The maximum number of steps to take to find the solution.
|
||||
* @param maxiter For the MultiPhaseEquil solver only, this is the maximum
|
||||
* number of outer temperature or pressure iterations to take
|
||||
* when T and/or P is not held fixed.
|
||||
* @param loglevel Controls amount of diagnostic output. loglevel
|
||||
* = 0 suppresses diagnostics, and increasingly-verbose
|
||||
* messages are written as loglevel increases. The
|
||||
|
|
@ -140,50 +102,34 @@ int vcs_equilibrate(MultiPhase& s, const char* XY,
|
|||
|
||||
//! Set a multi-phase chemical solution to chemical equilibrium.
|
||||
/*!
|
||||
* This function uses the vcs_MultiPhaseEquil interface to the
|
||||
* vcs solver.
|
||||
* The function uses the element abundance vector that is
|
||||
* currently consistent with the composition within the phases
|
||||
* themselves. Two other thermodynamic quantities, determined by the
|
||||
* XY string, are held constant during the equilibration.
|
||||
* This function uses the vcs_MultiPhaseEquil interface to the vcs solver.
|
||||
* The function uses the element abundance vector that is currently
|
||||
* consistent with the composition within the phases themselves. Two other
|
||||
* thermodynamic quantities, determined by the XY string, are held constant
|
||||
* during the equilibration.
|
||||
*
|
||||
* @param s The MultiPhase object to be set to an equilibrium state
|
||||
*
|
||||
* @param ixy An integer specifying the two properties to be held
|
||||
* constant.
|
||||
*
|
||||
* @param ixy An integer specifying the two properties to be held constant.
|
||||
* @param estimateEquil integer indicating whether the solver
|
||||
* should estimate its own initial condition.
|
||||
* If 0, the initial mole fraction vector
|
||||
* in the %ThermoPhase object is used as the
|
||||
* initial condition.
|
||||
* If 1, the initial mole fraction vector
|
||||
* is used if the element abundances are
|
||||
* satisfied.
|
||||
* if -1, the initial mole fraction vector
|
||||
* is thrown out, and an estimate is
|
||||
* formulated.
|
||||
*
|
||||
* @param 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).
|
||||
*
|
||||
* - If 0, the initial mole fraction vector in the
|
||||
* ThermoPhase object is used as the initial condition.
|
||||
* - If 1, the initial mole fraction vector is used if the
|
||||
* element abundances are satisfied.
|
||||
* - if -1, the initial mole fraction vector is thrown out,
|
||||
* and an estimate is formulated.
|
||||
* @param 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).
|
||||
* @param solver Determines which solver is used.
|
||||
* - 1 MultiPhaseEquil solver
|
||||
* - 2 VCSnonideal Solver (default)
|
||||
*
|
||||
* @param rtol Relative tolerance of the solve. Defaults to
|
||||
* 1.0E-9.
|
||||
*
|
||||
* @param maxsteps The maximum number of steps to take to find
|
||||
* the solution.
|
||||
*
|
||||
* @param rtol Relative tolerance of the solve. Defaults to 1.0E-9.
|
||||
* @param maxsteps The maximum number of steps to take to find the solution.
|
||||
* @param maxiter For the MultiPhaseEquil solver only, this is
|
||||
* the maximum number of outer temperature or
|
||||
* pressure iterations to take when T and/or P is
|
||||
* not held fixed.
|
||||
*
|
||||
* @param loglevel Controls amount of diagnostic output. loglevel
|
||||
* = 0 suppresses diagnostics, and increasingly-verbose
|
||||
* messages are written as loglevel increases. The
|
||||
|
|
@ -201,18 +147,14 @@ int vcs_equilibrate_1(MultiPhase& s, int ixy,
|
|||
//! Determine the phase stability of a single phase given the current conditions
|
||||
//! in a MultiPhase object
|
||||
/*!
|
||||
*
|
||||
* @param s The MultiPhase object to be set to an equilibrium state
|
||||
* @param iphase Phase index within the multiphase object to be
|
||||
* tested for stability.
|
||||
* @param funcStab Function value that tests equilibrium. > 0 indicates stable
|
||||
* < 0 indicates unstable
|
||||
*
|
||||
* @param 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).
|
||||
*
|
||||
* @param 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).
|
||||
* @param loglevel Controls amount of diagnostic output. loglevel
|
||||
* = 0 suppresses diagnostics, and increasingly-verbose
|
||||
* messages are written as loglevel increases. The
|
||||
|
|
@ -224,10 +166,10 @@ int vcs_determine_PhaseStability(MultiPhase& s, int iphase,
|
|||
|
||||
}
|
||||
|
||||
//! Contains classes and functions implementing the VCS multi-phase
|
||||
//! equilibrium solver.
|
||||
namespace VCSnonideal
|
||||
{
|
||||
|
||||
|
||||
class VCS_PROB;
|
||||
class VCS_SOLVE;
|
||||
|
||||
|
|
@ -249,55 +191,48 @@ int vcs_Cantera_to_vprob(Cantera::MultiPhase* mphase,
|
|||
*
|
||||
* @param mphase MultiPhase object that is the source for all of the information
|
||||
* @param vprob VCS_PROB problem definition that gets all of the information
|
||||
*
|
||||
*/
|
||||
int vcs_Cantera_update_vprob(Cantera::MultiPhase* mphase,
|
||||
VCSnonideal::VCS_PROB* vprob);
|
||||
|
||||
//! Cantera's Interface to the Multiphase chemical equilibrium solver.
|
||||
//! %Cantera's Interface to the Multiphase chemical equilibrium solver.
|
||||
/*!
|
||||
* Class MultiPhaseEquil is designed to be used to set a mixture
|
||||
* 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.
|
||||
* 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.
|
||||
*
|
||||
* @ingroup equilfunctions
|
||||
*/
|
||||
class vcs_MultiPhaseEquil
|
||||
{
|
||||
public:
|
||||
//! Default empty constructor
|
||||
vcs_MultiPhaseEquil();
|
||||
|
||||
|
||||
//! 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.
|
||||
* 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.
|
||||
*
|
||||
* @param mix Object containing the MultiPhase object
|
||||
* @param printLvl Determines the amount of printing to stdout
|
||||
* that occurs for each call:
|
||||
* - 0 No printing
|
||||
* - 1 Only printing to the .csv file
|
||||
* - 2 print the soln only
|
||||
* - 3 Print the setup and then the soln only
|
||||
* - 4 Print a table for each iteration
|
||||
* - 5 Print more than a table for each iteration
|
||||
*
|
||||
* - 0: No printing
|
||||
* - 1: Only printing to the .csv file
|
||||
* - 2: print the soln only
|
||||
* - 3: Print the setup and then the soln only
|
||||
* - 4: Print a table for each iteration
|
||||
* - 5: Print more than a table for each iteration
|
||||
*/
|
||||
vcs_MultiPhaseEquil(Cantera::MultiPhase* mix, int printLvl);
|
||||
|
||||
//! Destructor for the class
|
||||
virtual ~vcs_MultiPhaseEquil();
|
||||
|
||||
//! Return the index of the ith component
|
||||
|
|
@ -323,9 +258,8 @@ public:
|
|||
* all involve the components of the mixture.
|
||||
*
|
||||
* @param rxn Reaction number.
|
||||
* @param nu Vector of coefficients for the formation reaction.
|
||||
* Length is equal to the number of species in
|
||||
* the MultiPhase object.
|
||||
* @param nu Vector of coefficients for the formation reaction. Length is
|
||||
* equal to the number of species in the MultiPhase object.
|
||||
*/
|
||||
void getStoichVector(size_t rxn, Cantera::vector_fp& nu);
|
||||
|
||||
|
|
@ -337,61 +271,50 @@ public:
|
|||
//! Equilibrate the solution using the current element abundances
|
||||
//! stored in the MultiPhase object
|
||||
/*!
|
||||
* Use the vcs algorithm to equilibrate the current multiphase
|
||||
* mixture.
|
||||
* Use the vcs algorithm to equilibrate the current multiphase mixture.
|
||||
*
|
||||
* @param XY Integer representing what two thermo quantities
|
||||
* are held constant during the equilibration
|
||||
*
|
||||
* @param estimateEquil integer indicating whether the solver
|
||||
* should estimate its own initial condition.
|
||||
* If 0, the initial mole fraction vector
|
||||
* in the %ThermoPhase object is used as the
|
||||
* initial condition.
|
||||
* If 1, the initial mole fraction vector
|
||||
* is used if the element abundances are
|
||||
* satisfied.
|
||||
* if -1, the initial mole fraction vector
|
||||
* is thrown out, and an estimate is
|
||||
* formulated.
|
||||
*
|
||||
* @param 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).
|
||||
* @param err Internal error level
|
||||
* @param XY Integer representing what two thermo quantities are
|
||||
* held constant during the equilibration
|
||||
* @param estimateEquil integer indicating whether the solver should
|
||||
* estimate its own initial condition.
|
||||
* - If 0, the initial mole fraction vector in the
|
||||
* ThermoPhase object is used as the initial condition.
|
||||
* - If 1, the initial mole fraction vector is used if
|
||||
* the element abundances are satisfied.
|
||||
* - if -1, the initial mole fraction vector is thrown
|
||||
* out, and an estimate is formulated.
|
||||
* @param 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).
|
||||
* @param err Internal error level
|
||||
* @param maxsteps max steps allowed.
|
||||
* @param loglevel for
|
||||
* @param loglevel Determines the amount of printing to the HTML
|
||||
* output file.
|
||||
*/
|
||||
int equilibrate(int XY, int estimateEquil = 0,
|
||||
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 using constant T and P
|
||||
/*!
|
||||
* Use the vcs algorithm to equilibrate the current multiphase
|
||||
* mixture.
|
||||
* Use the vcs algorithm to equilibrate the current multiphase mixture.
|
||||
*
|
||||
* @param estimateEquil integer indicating whether the solver
|
||||
* should estimate its own initial condition.
|
||||
* If 0, the initial mole fraction vector
|
||||
* in the %ThermoPhase object is used as the
|
||||
* initial condition.
|
||||
* If 1, the initial mole fraction vector
|
||||
* is used if the element abundances are
|
||||
* satisfied.
|
||||
* if -1, the initial mole fraction vector
|
||||
* is thrown out, and an estimate is
|
||||
* formulated.
|
||||
*
|
||||
* @param 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).
|
||||
* @param estimateEquil integer indicating whether the solver should
|
||||
* estimate its own initial condition.
|
||||
* - If 0, the initial mole fraction vector in the
|
||||
* ThermoPhase object is used as the initial condition.
|
||||
* - If 1, the initial mole fraction vector is used if the
|
||||
* element abundances are satisfied.
|
||||
* - if -1, the initial mole fraction vector is thrown
|
||||
* out, and an estimate is formulated.
|
||||
* @param 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).
|
||||
* @param err Internal error level
|
||||
* @param maxsteps max steps allowed.
|
||||
* @param loglevel for
|
||||
* @param loglevel Determines the amount of printing to the HTML
|
||||
* output file.
|
||||
*/
|
||||
int equilibrate_TP(int estimateEquil = 0,
|
||||
int printLvl= 0, doublereal err = 1.0e-6,
|
||||
|
|
@ -405,44 +328,30 @@ public:
|
|||
* mixture. The pressure of the calculation is taken from
|
||||
* the current pressure stored with the MultiPhase object.
|
||||
*
|
||||
* @param 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
|
||||
*
|
||||
* @param 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
|
||||
* @param XY Integer flag indicating what is held constant.
|
||||
* Must be either HP or UP.
|
||||
*
|
||||
* @param Tlow Lower limit of the temperature. It's an
|
||||
* error condition if the temperature falls
|
||||
* below Tlow.
|
||||
*
|
||||
* @param Thigh Upper limit of the temperature. It's an
|
||||
* error condition if the temperature goes
|
||||
* higher than Thigh.
|
||||
*
|
||||
* @param Tlow Lower limit of the temperature. It's an error condition
|
||||
* if the temperature falls below Tlow.
|
||||
* @param Thigh Upper limit of the temperature. It's an error condition
|
||||
* if the temperature goes higher than Thigh.
|
||||
* @param estimateEquil integer indicating whether the solver
|
||||
* should estimate its own initial condition.
|
||||
* If 0, the initial mole fraction vector
|
||||
* in the %ThermoPhase object is used as the
|
||||
* initial condition.
|
||||
* If 1, the initial mole fraction vector
|
||||
* is used if the element abundances are
|
||||
* satisfied.
|
||||
* if -1, the initial mole fraction vector
|
||||
* is thrown out, and an estimate is
|
||||
* formulated.
|
||||
*
|
||||
* should estimate its own initial condition.
|
||||
* - If 0, the initial mole fraction vector in the
|
||||
* ThermoPhase object is used as the initial condition.
|
||||
* - If 1, the initial mole fraction vector is used if the
|
||||
* element abundances are satisfied.
|
||||
* - if -1, the initial mole fraction vector is thrown
|
||||
* out, and an estimate is formulated.
|
||||
* @param 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.
|
||||
*
|
||||
* @param err Internal error level
|
||||
*
|
||||
* @param maxsteps max steps allowed.
|
||||
*
|
||||
* @param loglevel Determines the amount of printing to the HTML
|
||||
* output file.
|
||||
*/
|
||||
|
|
@ -458,42 +367,28 @@ public:
|
|||
* mixture. The pressure of the calculation is taken from
|
||||
* the current pressure stored with the MultiPhase object.
|
||||
*
|
||||
* @param Starget Value of the total mixture entropy
|
||||
* that will be
|
||||
* kept constant. Note, this is and must be an extensive
|
||||
* @param Starget Value of the total mixture entropy that will be kept
|
||||
* constant. Note, this is and must be an extensive
|
||||
* quantity. units = Joules/K
|
||||
*
|
||||
*
|
||||
* @param Tlow Lower limit of the temperature. It's an
|
||||
* error condition if the temperature falls
|
||||
* below Tlow.
|
||||
*
|
||||
* @param Thigh Upper limit of the temperature. It's an
|
||||
* error condition if the temperature goes
|
||||
* higher than Thigh.
|
||||
*
|
||||
* @param estimateEquil integer indicating whether the solver
|
||||
* should estimate its own initial condition.
|
||||
* If 0, the initial mole fraction vector
|
||||
* in the %ThermoPhase object is used as the
|
||||
* initial condition.
|
||||
* If 1, the initial mole fraction vector
|
||||
* is used if the element abundances are
|
||||
* satisfied.
|
||||
* if -1, the initial mole fraction vector
|
||||
* is thrown out, and an estimate is
|
||||
* formulated.
|
||||
*
|
||||
* @param Tlow Lower limit of the temperature. It's an error condition
|
||||
* if the temperature falls below Tlow.
|
||||
* @param Thigh Upper limit of the temperature. It's an error condition
|
||||
* if the temperature goes higher than Thigh.
|
||||
* @param estimateEquil integer indicating whether the solver should
|
||||
* estimate its own initial condition.
|
||||
* - If 0, the initial mole fraction vector in the
|
||||
* %ThermoPhase object is used as the initial condition.
|
||||
* - If 1, the initial mole fraction vector is used if the
|
||||
* element abundances are satisfied.
|
||||
* - If -1, the initial mole fraction vector is thrown
|
||||
* out, and an estimate is formulated.
|
||||
* @param 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.
|
||||
*
|
||||
* @param err Internal error level
|
||||
*
|
||||
* @param maxsteps max steps allowed.
|
||||
*
|
||||
* @param loglevel Determines the amount of printing to the HTML
|
||||
* output file.
|
||||
*/
|
||||
|
|
@ -502,46 +397,33 @@ public:
|
|||
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.
|
||||
//! 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.
|
||||
*
|
||||
*
|
||||
* @param XY Integer flag indicating what is held constant.
|
||||
* Must be either TV, HV, UV, or SV.
|
||||
*
|
||||
* @param 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
|
||||
*
|
||||
* @param estimateEquil integer indicating whether the solver
|
||||
* should estimate its own initial condition.
|
||||
* If 0, the initial mole fraction vector
|
||||
* in the %ThermoPhase object is used as the
|
||||
* initial condition.
|
||||
* If 1, the initial mole fraction vector
|
||||
* is used if the element abundances are
|
||||
* satisfied.
|
||||
* if -1, the initial mole fraction vector
|
||||
* is thrown out, and an estimate is
|
||||
* formulated.
|
||||
*
|
||||
* @param 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.
|
||||
*
|
||||
* @param estimateEquil integer indicating whether the solver should
|
||||
* estimate its own initial condition.
|
||||
* - If 0, the initial mole fraction vector in the
|
||||
* ThermoPhase object is used as the initial condition.
|
||||
* - If 1, the initial mole fraction vector is used if the
|
||||
* element abundances are satisfied.
|
||||
* - if -1, the initial mole fraction vector is thrown
|
||||
* out, and an estimate is formulated.
|
||||
* @param 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.
|
||||
* @param err Internal error level
|
||||
*
|
||||
* @param maxsteps max steps allowed.
|
||||
*
|
||||
* @param logLevel Determines the amount of printing to the HTML
|
||||
* output file.
|
||||
*/
|
||||
|
|
@ -557,10 +439,9 @@ public:
|
|||
* @param iph Phase number to determine the equilibrium. If the phase
|
||||
* has a non-zero mole number....
|
||||
* @param funcStab Value of the phase pop function
|
||||
* @param 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).
|
||||
* @param 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).
|
||||
* @param logLevel Determines the amount of printing to the HTML output file.
|
||||
*/
|
||||
int determine_PhaseStability(int iph, double& funcStab, int printLvl= 0, int logLevel = -99);
|
||||
|
|
@ -588,36 +469,31 @@ public:
|
|||
*/
|
||||
size_t numElemConstraints() const;
|
||||
|
||||
|
||||
|
||||
// Friend functions
|
||||
|
||||
friend int vcs_Cantera_to_vprob(Cantera::MultiPhase* mphase,
|
||||
VCSnonideal::VCS_PROB* vprob);
|
||||
friend int vcs_Cantera_update_vprob(Cantera::MultiPhase* mphase,
|
||||
VCSnonideal::VCS_PROB* vprob);
|
||||
|
||||
protected:
|
||||
|
||||
//! Vector that takes into account of the current sorting of the species
|
||||
//! 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.
|
||||
* 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
|
||||
* `m_order[korig] = k_sorted`
|
||||
*/
|
||||
Cantera::vector_int m_order;
|
||||
|
||||
//! 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.
|
||||
* 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.
|
||||
*/
|
||||
VCSnonideal::VCS_PROB* m_vprob;
|
||||
|
||||
|
|
@ -629,19 +505,16 @@ protected:
|
|||
|
||||
//! Print level from the VCSnonlinear package
|
||||
/*!
|
||||
* (Note, you may have to compile with debug
|
||||
* flags to get some printing).
|
||||
* (Note, you may have to compile with debug flags to get some printing).
|
||||
*
|
||||
* - 0 No IO from the routine whatsoever
|
||||
* - 1 file IO from reportCSV() carried out.
|
||||
* One line print statements from equilibrate_XY() functions
|
||||
* - 2 Problem statement information from vcs_Cantera_update_vprob()
|
||||
* - Final state of the system from vcs_solve_TP()
|
||||
* - 3 Several more setup tables
|
||||
* - Problem initialization routine
|
||||
* - 4 One table for each iteration within vcs_solve_Tp()
|
||||
* - 5 Multiple tables for each iteration within vcs_solve_TP()
|
||||
* - full discussion of decisions made for each variable.
|
||||
* - 0: No IO from the routine whatsoever
|
||||
* - 1: file IO from reportCSV() carried out. One line print statements
|
||||
* from equilibrate_XY() functions
|
||||
* - 2: Problem statement information from vcs_Cantera_update_vprob();
|
||||
* Final state of the system from vcs_solve_TP()
|
||||
* - 3: Several more setup tables; Problem initialization routine
|
||||
* - 4: One table for each iteration within vcs_solve_Tp()
|
||||
* - 5: Multiple tables for each iteration within vcs_solve_TP()
|
||||
*/
|
||||
int m_printLvl;
|
||||
|
||||
|
|
@ -651,11 +524,9 @@ protected:
|
|||
//! Iteration Count
|
||||
int m_iter;
|
||||
|
||||
//! Vector of indices for species that are included in the
|
||||
//! calculation.
|
||||
//! Vector of indices for species that are included in the calculation.
|
||||
/*!
|
||||
* This is used to exclude pure-phase species
|
||||
* with invalid thermo data
|
||||
* This is used to exclude pure-phase species with invalid thermo data
|
||||
*/
|
||||
Cantera::vector_int m_species;
|
||||
|
||||
|
|
@ -665,18 +536,15 @@ protected:
|
|||
* than this object or the VCS_PROB object. This object owns the pointer.
|
||||
*/
|
||||
VCSnonideal::VCS_SOLVE* m_vsolvePtr;
|
||||
|
||||
};
|
||||
|
||||
//! Global hook for turning on and off time printing.
|
||||
/*!
|
||||
* Default is to allow printing. But, you can assign this to zero
|
||||
* globally to turn off all time printing.
|
||||
* This is helpful for test suite purposes where you are interested
|
||||
* in differences in text files.
|
||||
* Default is to allow printing. But, you can assign this to zero globally to
|
||||
* turn off all time printing. This is helpful for test suite purposes where
|
||||
* you are interested in differences in text files.
|
||||
*/
|
||||
extern int vcs_timing_print_lvl;
|
||||
|
||||
}
|
||||
#endif
|
||||
|
||||
|
|
|
|||
|
|
@ -33,12 +33,9 @@
|
|||
|
||||
using namespace Cantera;
|
||||
using namespace std;
|
||||
//using namespace VCSnonideal;
|
||||
|
||||
namespace VCSnonideal
|
||||
{
|
||||
//====================================================================================================================
|
||||
|
||||
vcs_MultiPhaseEquil::vcs_MultiPhaseEquil() :
|
||||
m_vprob(0),
|
||||
m_mix(0),
|
||||
|
|
@ -46,7 +43,7 @@ vcs_MultiPhaseEquil::vcs_MultiPhaseEquil() :
|
|||
m_vsolvePtr(0)
|
||||
{
|
||||
}
|
||||
//====================================================================================================================
|
||||
|
||||
vcs_MultiPhaseEquil::vcs_MultiPhaseEquil(Cantera::MultiPhase* mix, int printLvl) :
|
||||
m_vprob(0),
|
||||
m_mix(0),
|
||||
|
|
@ -81,13 +78,12 @@ vcs_MultiPhaseEquil::~vcs_MultiPhaseEquil()
|
|||
m_vsolvePtr = 0;
|
||||
}
|
||||
}
|
||||
//====================================================================================================================
|
||||
|
||||
int vcs_MultiPhaseEquil::equilibrate_TV(int XY, doublereal xtarget,
|
||||
int estimateEquil,
|
||||
int printLvl, doublereal err,
|
||||
int maxsteps, int loglevel)
|
||||
{
|
||||
|
||||
addLogEntry("problem type","fixed T, V");
|
||||
// doublereal dt = 1.0e3;
|
||||
doublereal Vtarget = m_mix->volume();
|
||||
|
|
@ -203,7 +199,6 @@ done:
|
|||
return iSuccess;
|
||||
}
|
||||
|
||||
//====================================================================================================================
|
||||
int vcs_MultiPhaseEquil::equilibrate_HP(doublereal Htarget,
|
||||
int XY, double Tlow, double Thigh,
|
||||
int estimateEquil,
|
||||
|
|
@ -362,7 +357,7 @@ done:
|
|||
;
|
||||
return iSuccess;
|
||||
}
|
||||
//====================================================================================================================
|
||||
|
||||
int vcs_MultiPhaseEquil::equilibrate_SP(doublereal Starget,
|
||||
double Tlow, double Thigh,
|
||||
int estimateEquil,
|
||||
|
|
@ -519,11 +514,7 @@ int vcs_MultiPhaseEquil::equilibrate_SP(doublereal Starget,
|
|||
throw CanteraError("MultiPhase::equilibrate_SP",
|
||||
"No convergence for T");
|
||||
}
|
||||
//====================================================================================================================
|
||||
|
||||
/*
|
||||
* Equilibrate the solution using the current element abundances
|
||||
*/
|
||||
int vcs_MultiPhaseEquil::equilibrate(int XY, int estimateEquil,
|
||||
int printLvl, doublereal err,
|
||||
int maxsteps, int loglevel)
|
||||
|
|
@ -571,16 +562,11 @@ int vcs_MultiPhaseEquil::equilibrate(int XY, int estimateEquil,
|
|||
}
|
||||
return iSuccess;
|
||||
}
|
||||
//====================================================================================================================
|
||||
/*
|
||||
* Equilibrate the solution using the current element abundances
|
||||
*/
|
||||
|
||||
int vcs_MultiPhaseEquil::equilibrate_TP(int estimateEquil,
|
||||
int printLvl, doublereal err,
|
||||
int maxsteps, int loglevel)
|
||||
{
|
||||
// Debugging level
|
||||
|
||||
int maxit = maxsteps;
|
||||
clockWC tickTock;
|
||||
|
||||
|
|
@ -736,12 +722,6 @@ int vcs_MultiPhaseEquil::equilibrate_TP(int estimateEquil,
|
|||
return iSuccess;
|
||||
}
|
||||
|
||||
|
||||
//====================================================================================================================
|
||||
/**************************************************************************
|
||||
*
|
||||
*
|
||||
*/
|
||||
void vcs_MultiPhaseEquil::reportCSV(const std::string& reportFile)
|
||||
{
|
||||
size_t k;
|
||||
|
|
@ -911,10 +891,8 @@ static void print_char(const char letter, const int num)
|
|||
plogf("%c", letter);
|
||||
}
|
||||
}
|
||||
//====================================================================================================================
|
||||
|
||||
/*
|
||||
*
|
||||
*
|
||||
* HKM -> Work on transferring the current value of the voltages into the
|
||||
* equilibrium problem.
|
||||
*/
|
||||
|
|
@ -1328,11 +1306,7 @@ int vcs_Cantera_to_vprob(Cantera::MultiPhase* mphase,
|
|||
|
||||
return VCS_SUCCESS;
|
||||
}
|
||||
//====================================================================================================================
|
||||
// Transfer the current state of mphase into the VCS_PROB object
|
||||
/*
|
||||
* The basic problem has already been set up.
|
||||
*/
|
||||
|
||||
int vcs_Cantera_update_vprob(Cantera::MultiPhase* mphase,
|
||||
VCSnonideal::VCS_PROB* vprob)
|
||||
{
|
||||
|
|
@ -1465,8 +1439,7 @@ int vcs_Cantera_update_vprob(Cantera::MultiPhase* mphase,
|
|||
|
||||
return VCS_SUCCESS;
|
||||
}
|
||||
//====================================================================================================================
|
||||
// This routine hasn't been checked yet
|
||||
|
||||
void vcs_MultiPhaseEquil::getStoichVector(size_t rxn, Cantera::vector_fp& nu)
|
||||
{
|
||||
size_t nsp = m_vsolvePtr->m_numSpeciesTot;
|
||||
|
|
@ -1508,7 +1481,6 @@ size_t vcs_MultiPhaseEquil::numElemConstraints() const
|
|||
return nec;
|
||||
}
|
||||
|
||||
|
||||
size_t vcs_MultiPhaseEquil::component(size_t m) const
|
||||
{
|
||||
size_t nc = numComponents();
|
||||
|
|
@ -1519,28 +1491,8 @@ size_t vcs_MultiPhaseEquil::component(size_t m) const
|
|||
}
|
||||
}
|
||||
|
||||
//====================================================================================================================
|
||||
// Determine the phase stability of a phase at the current conditions
|
||||
/*
|
||||
* Equilibration of the solution is not done before the determination is made.
|
||||
*
|
||||
* @param iph Phase number to determine the equilibrium. If the phase
|
||||
* has a non-zero mole number....
|
||||
*
|
||||
* @param funcStab Value of the phase pop function
|
||||
*
|
||||
* @param 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).
|
||||
*
|
||||
* @param loglevel Determines the amount of printing to the HTML
|
||||
* output file.
|
||||
*/
|
||||
int vcs_MultiPhaseEquil::determine_PhaseStability(int iph, double& funcStab, int printLvl, int loglevel)
|
||||
{
|
||||
|
||||
|
||||
clockWC tickTock;
|
||||
size_t nsp = m_mix->nSpecies();
|
||||
size_t nel = m_mix->nElements();
|
||||
|
|
@ -1674,6 +1626,5 @@ int vcs_MultiPhaseEquil::determine_PhaseStability(int iph, double& funcStab, int
|
|||
|
||||
return iStable;
|
||||
}
|
||||
//====================================================================================================================
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue