Cleaned up Doxygen documentation for class vcs_MultiPhaseEquil

This commit is contained in:
Ray Speth 2013-04-18 22:08:22 +00:00
parent ba5115fe64
commit fc7067b63d
2 changed files with 195 additions and 376 deletions

View file

@ -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

View file

@ -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;
}
//====================================================================================================================
}