From fc7067b63de7ebe06e97c1be1ffb1885be8b736d Mon Sep 17 00:00:00 2001 From: Ray Speth Date: Thu, 18 Apr 2013 22:08:22 +0000 Subject: [PATCH] Cleaned up Doxygen documentation for class vcs_MultiPhaseEquil --- include/cantera/equil/vcs_MultiPhaseEquil.h | 508 ++++++++------------ src/equil/vcs_MultiPhaseEquil.cpp | 63 +-- 2 files changed, 195 insertions(+), 376 deletions(-) diff --git a/include/cantera/equil/vcs_MultiPhaseEquil.h b/include/cantera/equil/vcs_MultiPhaseEquil.h index e25fba577..967868da7 100644 --- a/include/cantera/equil/vcs_MultiPhaseEquil.h +++ b/include/cantera/equil/vcs_MultiPhaseEquil.h @@ -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 - diff --git a/src/equil/vcs_MultiPhaseEquil.cpp b/src/equil/vcs_MultiPhaseEquil.cpp index c2d581d68..77a0aa0f0 100644 --- a/src/equil/vcs_MultiPhaseEquil.cpp +++ b/src/equil/vcs_MultiPhaseEquil.cpp @@ -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; } -//==================================================================================================================== }