diff --git a/doc/sphinx/cxx-guide/demoequil.cpp b/doc/sphinx/cxx-guide/demoequil.cpp index dd6f775bf..4688c2959 100644 --- a/doc/sphinx/cxx-guide/demoequil.cpp +++ b/doc/sphinx/cxx-guide/demoequil.cpp @@ -1,4 +1,3 @@ -#include "cantera/equilibrium.h" #include "cantera/thermo.h" using namespace Cantera; @@ -7,7 +6,7 @@ void equil_demo() { ThermoPhase* gas = newPhase("h2o2.cti","ohmech"); gas->setState_TPX(1500.0, 2.0*OneAtm, "O2:1.0, H2:3.0, AR:1.0"); - equilibrate(*gas, "TP"); + gas->equilibrate("TP"); std::cout << gas->report() << std::endl; } diff --git a/doc/sphinx/cxx-guide/equil-example.rst b/doc/sphinx/cxx-guide/equil-example.rst index f37948966..252992416 100644 --- a/doc/sphinx/cxx-guide/equil-example.rst +++ b/doc/sphinx/cxx-guide/equil-example.rst @@ -3,9 +3,8 @@ Chemical Equilibrium Example Program ************************************ -In the program below, the `equilibrate` function is called to set the gas to a -state of chemical equilibrium, holding the temperature and pressure fixed. This -function is declared in the `equilibrium.h` header file. +In the program below, the `equilibrate` method is called to set the gas to a +state of chemical equilibrium, holding the temperature and pressure fixed. .. literalinclude:: demoequil.cpp :language: c++ @@ -54,10 +53,5 @@ this is true in the output above---the chemical potential of H2 is exactly twice that of H, the chemical potential for OH is the sum of the values for H and O, the value for H2O2 is twice as large as the value for OH, and so on. -We'll see later how the :ct:`equilibrate ` function really works. For now, though, -the important points are these: - -- The `equilibrate` procedure operates on an object, setting its state to a - chemical equilibrium state. -- To use `equilibrate`, you need to include the `equilibrium.h` header file. +We'll see later how the :ct:`equilibrate ` +function really works. diff --git a/doc/sphinx/cxx-guide/headers.rst b/doc/sphinx/cxx-guide/headers.rst index 18d734e91..f9ff9f6a8 100644 --- a/doc/sphinx/cxx-guide/headers.rst +++ b/doc/sphinx/cxx-guide/headers.rst @@ -5,16 +5,11 @@ C++ Header Files Cantera provides some header files designed for use in C++ application programs. These are designed to include those portions of Cantera needed for -particular types of calculations. For example, the header file ``equilibrium.h`` -includes header files needed to do equilibrium calculations (specifically, files -``ChemEquil.h`` and ``MultiPhaseEquil.h``). +particular types of calculations. These headers are designed for use in C++ application programs, and are not included by the Cantera core. The headers and their functions are: -``equilibrium.h`` - Chemical equilibrium. - ``IdealGasMix.h`` Provides class :ct:`IdealGasMix`. diff --git a/include/cantera/equil/MultiPhase.h b/include/cantera/equil/MultiPhase.h index 61ca73858..bcb468f55 100644 --- a/include/cantera/equil/MultiPhase.h +++ b/include/cantera/equil/MultiPhase.h @@ -569,6 +569,22 @@ private: //! Calculate the element abundance vector void calcElemAbundances() const; + //! Set the mixture to a state of chemical equilibrium using the + //! MultiPhaseEquil solver. + /*! + * @param XY Integer flag specifying properties to hold fixed. + * @param err Error tolerance for \f$\Delta \mu/RT \f$ for all reactions. + * Also used as the relative error tolerance for the outer + * loop. + * @param maxsteps Maximum number of steps to take in solving the fixed + * TP problem. + * @param maxiter Maximum number of "outer" iterations for problems holding + * fixed something other than (T,P). + * @param loglevel Level of diagnostic output + */ + double equilibrate_MultiPhaseEquil(int XY, doublereal err, int maxsteps, + int maxiter, int loglevel); + //! Vector of the number of moles in each phase. /*! * Length = m_np, number of phases. diff --git a/include/cantera/equil/equil.h b/include/cantera/equil/equil.h index 80c3bdd56..806fca851 100644 --- a/include/cantera/equil/equil.h +++ b/include/cantera/equil/equil.h @@ -2,6 +2,8 @@ * @file equil.h * This file contains the definition of some high level general equilibration * routines. + * @deprecated All functions defined in this file are deprecated. To be removed + * after Cantera 2.2. */ // Copyright 2001 California Institute of Technology @@ -9,6 +11,8 @@ #ifndef CT_KERNEL_EQUIL_H #define CT_KERNEL_EQUIL_H + +#pragma message "cantera/equil/equil.h is deprecated" #include "MultiPhase.h" #include "vcs_defs.h" @@ -47,7 +51,7 @@ namespace Cantera * are written as loglevel increases. * * @return The number of iterations it took to equilibrate the system. - * + * @deprecated Use ThermoPhase::equilibrate instead. To be removed after Cantera 2.2. * @ingroup equilfunctions */ int equilibrate(thermo_t& s, const char* XY, @@ -72,7 +76,7 @@ int equilibrate(thermo_t& s, const char* XY, * @param loglevel loglevel * * @return The number of iterations it took to equilibrate the system. - * + * @deprecated Use MultiPhase::equilibrate instead. To be removed after Cantera 2.2. * @ingroup equilfunctions */ doublereal equilibrate(MultiPhase& s, const char* XY, diff --git a/include/cantera/equil/vcs_MultiPhaseEquil.h b/include/cantera/equil/vcs_MultiPhaseEquil.h index 1382bae7e..baef822f8 100644 --- a/include/cantera/equil/vcs_MultiPhaseEquil.h +++ b/include/cantera/equil/vcs_MultiPhaseEquil.h @@ -46,7 +46,8 @@ namespace Cantera * @param loglevel Controls amount of diagnostic output. loglevel * = 0 suppresses diagnostics, and increasingly-verbose * messages are written as loglevel increases. - * + * @deprecated Use ThermoPhase::equilibrate instead. To be removed after + * Cantera 2.2. * @ingroup equilfunctions */ int vcs_equilibrate(thermo_t& s, const char* XY, @@ -87,7 +88,8 @@ int vcs_equilibrate(thermo_t& s, const char* XY, * @param loglevel Controls amount of diagnostic output. loglevel * = 0 suppresses diagnostics, and increasingly-verbose * messages are written as loglevel increases. - * + * @deprecated Use MultiPhase::equilibrate instead. To be removed after + * Cantera 2.2. * @ingroup equilfunctions */ int vcs_equilibrate(MultiPhase& s, const char* XY, @@ -129,7 +131,8 @@ int vcs_equilibrate(MultiPhase& s, const char* XY, * @param loglevel Controls amount of diagnostic output. loglevel * = 0 suppresses diagnostics, and increasingly-verbose * messages are written as loglevel increases. - * + * @deprecated Use MultiPhase::equilibrate instead. To be removed after + * Cantera 2.2. * @ingroup equilfunctions */ int vcs_equilibrate_1(MultiPhase& s, int ixy, diff --git a/include/cantera/equilibrium.h b/include/cantera/equilibrium.h index cb6862b76..512265f70 100644 --- a/include/cantera/equilibrium.h +++ b/include/cantera/equilibrium.h @@ -2,9 +2,12 @@ * @file equilibrium.h * cxx layer - Header file providing support for chemical equilibrium calculations * (see \ref equilfunctions) + * @deprecated Equilibrium solvers are directly available through class + * Cantera::ThermoPhase and class Cantera::MultiPhase */ #ifndef CT_EQUIL_INCL #define CT_EQUIL_INCL +#pragma message "cantera/equil/equil.h is deprecated" #include "equil/equil.h" #include "equil/ChemEquil.h" #include "equil/MultiPhaseEquil.h" diff --git a/include/cantera/thermo/ThermoPhase.h b/include/cantera/thermo/ThermoPhase.h index f415e54b1..2d1b8fd06 100644 --- a/include/cantera/thermo/ThermoPhase.h +++ b/include/cantera/thermo/ThermoPhase.h @@ -1190,11 +1190,10 @@ public: //! Stores the element potentials in the ThermoPhase object /*! - * Called by function 'equilibrate' in ChemEquil.h to transfer - * the element potentials to this object after every successful - * equilibration routine. - * The element potentials are stored in their dimensionless - * forms, calculated by dividing by RT. + * Called by the ChemEquil equilibrium solver to transfer the element + * potentials to this object after every successful equilibration routine. + * The element potentials are stored in their dimensionless forms, + * calculated by dividing by RT. * * @param lambda Input vector containing the element potentials. * Length = nElements. Units are Joules/kmol. diff --git a/samples/cxx/demo.cpp b/samples/cxx/demo.cpp index 64e3f2f6e..2197eae96 100644 --- a/samples/cxx/demo.cpp +++ b/samples/cxx/demo.cpp @@ -12,7 +12,6 @@ // to include core headers directly, use the format "cantera/module/*.h". #include "cantera/IdealGasMix.h" // defines class IdealGasMix -#include "cantera/equilibrium.h" // chemical equilibrium #include "cantera/transport.h" // transport properties // All Cantera kernel names are in namespace Cantera. You can either @@ -49,7 +48,7 @@ void demoprog() // set the gas to the equilibrium state with the same specific // enthalpy and pressure - equilibrate(gas,"HP"); + gas.equilibrate("HP"); printf("\n\nEquilibrium state:\n\n"); printf( diff --git a/samples/cxx/flamespeed/flamespeed.cpp b/samples/cxx/flamespeed/flamespeed.cpp index cc6b4830d..c086a6a5f 100644 --- a/samples/cxx/flamespeed/flamespeed.cpp +++ b/samples/cxx/flamespeed/flamespeed.cpp @@ -9,7 +9,6 @@ #include "cantera/oneD/Inlet1D.h" #include "cantera/oneD/StFlow.h" #include "cantera/IdealGasMix.h" -#include "cantera/equilibrium.h" #include "cantera/transport.h" using namespace Cantera; @@ -64,7 +63,7 @@ int flamespeed(int np, void* p) gas.getMassFractions(yin); try { - equilibrate(gas,"HP"); + gas.equilibrate("HP"); } catch (CanteraError& err) { std::cout << err.what() << std::endl; } diff --git a/samples/f77/demo_ftnlib.cpp b/samples/f77/demo_ftnlib.cpp index 609838dff..21c45fc05 100644 --- a/samples/f77/demo_ftnlib.cpp +++ b/samples/f77/demo_ftnlib.cpp @@ -40,7 +40,6 @@ IdealGasMix* _gasptr() return _gas; } -#include "cantera/equilibrium.h" #include "cantera/transport.h" // store a pointer to a transport manager @@ -277,7 +276,7 @@ extern "C" { "two-character string required."); } string optstr = string(opt, 2); - equilibrate(*_gas, optstr.c_str()); + _gas->equilibrate(optstr); } catch (CanteraError& err) { handleError(err); } diff --git a/src/clib/ct.cpp b/src/clib/ct.cpp index 0235dd1bc..efd75f56d 100644 --- a/src/clib/ct.cpp +++ b/src/clib/ct.cpp @@ -12,7 +12,6 @@ #include "ct.h" // Cantera includes -#include "cantera/equil/equil.h" #include "cantera/kinetics/KineticsFactory.h" #include "cantera/transport/TransportFactory.h" #include "cantera/base/ctml.h" @@ -516,7 +515,7 @@ extern "C" { try { ThermoPhase& thrm = ThermoCabinet::item(n); thrm.checkElementArraySize(lenm); - equilibrate(thrm, "TP", 0); + thrm.equilibrate("TP", "element_potential"); thrm.getElementPotentials(lambda); return 0; } catch (...) { @@ -592,14 +591,27 @@ extern "C" { double rtol, int maxsteps, int maxiter, int loglevel) { try { - equilibrate(ThermoCabinet::item(n), XY, solver, rtol, maxsteps, - maxiter, loglevel); + string ssolver; + if (solver < 0) { + ssolver = "auto"; + } else if (solver == 0) { + ssolver = "element_potential"; + } else if (solver == 1) { + ssolver = "gibbs"; + } else if (solver == 2) { + ssolver = "vcs"; + } else { + throw CanteraError("th_equil", + "Invalid equilibrium solver specified."); + } + ThermoCabinet::item(n).equilibrate(XY, ssolver, rtol, maxsteps, + maxiter, 0, loglevel); return 0; } catch (...) { return handleAllExceptions(-1, ERR); } } - + doublereal th_refPressure(int n) { try { diff --git a/src/clib/ctmultiphase.cpp b/src/clib/ctmultiphase.cpp index 52d9dab6c..5a5f88689 100644 --- a/src/clib/ctmultiphase.cpp +++ b/src/clib/ctmultiphase.cpp @@ -5,10 +5,7 @@ #include "ctmultiphase.h" // Cantera includes -#include "cantera/equil/equil.h" #include "cantera/equil/MultiPhase.h" -#include "cantera/equil/MultiPhaseEquil.h" -#include "cantera/equil/vcs_MultiPhaseEquil.h" #include "Cabinet.h" using namespace std; @@ -297,8 +294,9 @@ extern "C" { int maxiter, int loglevel) { try { - return equilibrate(mixCabinet::item(i), XY, - rtol, maxsteps, maxiter, loglevel); + mixCabinet::item(i).equilibrate(XY, "auto", rtol, maxsteps, maxiter, + 0, loglevel); + return 0; } catch (...) { return handleAllExceptions(DERR, DERR); } @@ -309,9 +307,20 @@ extern "C" { int maxsteps, int maxiter, int loglevel) { try { - int retn = vcs_equilibrate(mixCabinet::item(i), XY, estimateEquil, printLvl, solver, - rtol, maxsteps, maxiter, loglevel); - return (double) retn; + string ssolver; + if (solver < 0) { + ssolver = "auto"; + } else if (solver == 1) { + ssolver = "gibbs"; + } else if (solver == 2) { + ssolver = "vcs"; + } else { + throw CanteraError("mix_vcs_equilibrate", + "Invalid equilibrium solver specified."); + } + mixCabinet::item(i).equilibrate(XY, ssolver, rtol, maxsteps, + maxiter, estimateEquil, loglevel); + return 0; } catch (...) { return handleAllExceptions(ERR, ERR); } diff --git a/src/equil/MultiPhase.cpp b/src/equil/MultiPhase.cpp index 6d7e5d988..dc45805f5 100644 --- a/src/equil/MultiPhase.cpp +++ b/src/equil/MultiPhase.cpp @@ -562,8 +562,18 @@ doublereal MultiPhase::volume() const return sum; } -doublereal MultiPhase::equilibrate(int XY, doublereal err, - int maxsteps, int maxiter, int loglevel) +double MultiPhase::equilibrate(int XY, doublereal err, int maxsteps, + int maxiter, int loglevel) +{ + warn_deprecated("MultiPhase::equilibrate(int XY, ...)", + "Use MultiPhase::equilibrate(string XY, ...) instead. To be removed " + "after Cantera 2.2."); + return equilibrate_MultiPhaseEquil(XY, err, maxsteps, maxiter, loglevel); +} + +double MultiPhase::equilibrate_MultiPhaseEquil(int XY, doublereal err, + int maxsteps, int maxiter, + int loglevel) { bool strt = false; doublereal dt; @@ -667,7 +677,7 @@ doublereal MultiPhase::equilibrate(int XY, doublereal err, } } } - throw CanteraError("MultiPhase::equilibrate", + throw CanteraError("MultiPhase::equilibrate_MultiPhaseEquil", "No convergence for T"); } else if (XY == SP) { s0 = entropy(); @@ -714,7 +724,7 @@ doublereal MultiPhase::equilibrate(int XY, doublereal err, } } } - throw CanteraError("MultiPhase::equilibrate", + throw CanteraError("MultiPhase::equilibrate_MultiPhaseEquil", "No convergence for T"); } else if (XY == TV) { doublereal v0 = volume(); @@ -742,7 +752,8 @@ doublereal MultiPhase::equilibrate(int XY, doublereal err, } else { - throw CanteraError("MultiPhase::equilibrate","unknown option"); + throw CanteraError("MultiPhase::equilibrate_MultiPhaseEquil", + "unknown option"); } return -1.0; } @@ -790,7 +801,8 @@ void MultiPhase::equilibrate(const std::string& XY, const std::string& solver, try { writelog("Trying MultiPhaseEquil (Gibbs) equilibrium solver\n", log_level); - equilibrate(ixy, rtol, max_steps, max_iter, log_level-1); + equilibrate_MultiPhaseEquil(ixy, rtol, max_steps, max_iter, + log_level-1); writelog("MultiPhaseEquil solver succeeded\n", log_level); return; } catch (std::exception& err) { diff --git a/src/equil/equilibrate.cpp b/src/equil/equilibrate.cpp index da59b091e..bb04d90ad 100644 --- a/src/equil/equilibrate.cpp +++ b/src/equil/equilibrate.cpp @@ -12,6 +12,8 @@ doublereal equilibrate(MultiPhase& s, const char* XY, doublereal tol, int maxsteps, int maxiter, int loglevel) { + warn_deprecated("equilibrate(MultiPhase&, ...)", + "Use MultiPhase::equilibrate instead. To be removed after Cantera 2.2."); s.init(); int ixy = _equilflag(XY); if (ixy == TP || ixy == HP || ixy == SP || ixy == TV) { @@ -32,6 +34,8 @@ doublereal equilibrate(MultiPhase& s, const char* XY, int equilibrate(thermo_t& s, const char* XY, int solver, doublereal rtol, int maxsteps, int maxiter, int loglevel) { + warn_deprecated("equilibrate(ThermoPhase&, ...)", + "Use ThermoPhase::equilibrate instead. To be removed after Cantera 2.2."); bool redo = true; int retn = -1; int nAttempts = 0; diff --git a/src/equil/vcs_equilibrate.cpp b/src/equil/vcs_equilibrate.cpp index fd2ef6782..c98399d36 100644 --- a/src/equil/vcs_equilibrate.cpp +++ b/src/equil/vcs_equilibrate.cpp @@ -23,6 +23,8 @@ int vcs_equilibrate(thermo_t& s, const char* XY, doublereal rtol, int maxsteps, int maxiter, int loglevel) { + warn_deprecated("vcs_equilibrate", "Use ThermoPhase::equilibrate instead. " + "To be removed after Cantera 2.2."); MultiPhase* m = 0; int retn = 1; @@ -107,6 +109,8 @@ int vcs_equilibrate_1(MultiPhase& s, int ixy, int estimateEquil, int printLvl, int solver, doublereal tol, int maxsteps, int maxiter, int loglevel) { + warn_deprecated("vcs_equilibrate_1", "Use MultiPhase::equilibrate instead. " + "To be removed after Cantera 2.2."); static int counter = 0; int retn = 1; diff --git a/src/fortran/fct.cpp b/src/fortran/fct.cpp index d152961d4..306a6c583 100644 --- a/src/fortran/fct.cpp +++ b/src/fortran/fct.cpp @@ -7,7 +7,6 @@ * pointers are passed to or from the calling application. */ // Cantera includes -#include "cantera/equil/equil.h" #include "cantera/kinetics/KineticsFactory.h" #include "cantera/transport/TransportFactory.h" #include "cantera/thermo/ThermoFactory.h" @@ -559,7 +558,7 @@ extern "C" { status_t th_equil_(const integer* n, char* XY, ftnlen lenxy) { try { - equilibrate(*_fth(n), f2string(XY,lenxy).c_str()); + _fth(n)->equilibrate(f2string(XY,lenxy)); } catch (...) { return handleAllExceptions(-1, ERR); } diff --git a/test_problems/ChemEquil_gri_matrix/gri_matrix.cpp b/test_problems/ChemEquil_gri_matrix/gri_matrix.cpp index 9b1ed5e68..db6653b51 100644 --- a/test_problems/ChemEquil_gri_matrix/gri_matrix.cpp +++ b/test_problems/ChemEquil_gri_matrix/gri_matrix.cpp @@ -3,7 +3,6 @@ */ #include "cantera/IdealGasMix.h" -#include "cantera/equilibrium.h" using namespace std; using namespace Cantera; @@ -16,9 +15,8 @@ int main(int argc, char** argv) int numSucc = 0; int numFail = 0; try { - int retnSub; double T = 500.; - int solver = -1; + string solver = "auto"; IdealGasMix g("gri30.xml", "gri30_mix"); double pres = OneAtm; @@ -38,19 +36,8 @@ int main(int argc, char** argv) Xmol[iN2] = 0.4; g.setState_TPX(T, pres, DATA_PTR(Xmol)); try { - retnSub = equilibrate(g, "TP", solver); + g.equilibrate("TP", solver); cout << g.report(true, 0.0); - if (retnSub != 1) { - cerr << "ERROR: ChemEquil equilibration step failed at " - << " T = " << T - << " Pres = " << pres - << endl; - cout << "ERROR: ChemEquil equilibration step failed at " - << " T = " << T - << " Pres = " << pres - << endl; - exit(-1); - } } catch (CanteraError& err) { cout << g.report(true, 0.0); std::cerr << err.what() << std::endl; @@ -74,19 +61,8 @@ int main(int argc, char** argv) Xmol[iN2] = 0.4; g.setState_TPX(T, pres, DATA_PTR(Xmol)); try { - retnSub = equilibrate(g, "TP", solver); + g.equilibrate("TP", solver); cout << g.report(true, 0.0); - if (retnSub != 1) { - cerr << "ERROR: ChemEquil equilibration step failed at " - << " T = " << T - << " Pres = " << pres - << endl; - cout << "ERROR: ChemEquil equilibration step failed at " - << " T = " << T - << " Pres = " << pres - << endl; - exit(-1); - } } catch (CanteraError& err) { cout << g.report(true, 0.0); std::cerr << err.what() << std::endl; @@ -112,19 +88,8 @@ int main(int argc, char** argv) pres = OneAtm; g.setState_TPX(T, pres, DATA_PTR(Xmol)); try { - retnSub = equilibrate(g, "TP", solver); + g.equilibrate("TP", solver); cout << g.report(true, 0.0); - if (retnSub != 1) { - cerr << "ERROR: ChemEquil equilibration step failed at " - << " T = " << T - << " Pres = " << pres - << endl; - cout << "ERROR: ChemEquil equilibration step failed at " - << " T = " << T - << " Pres = " << pres - << endl; - exit(-1); - } } catch (CanteraError& err) { cout << g.report(true, 0.0); std::cerr << err.what() << std::endl; @@ -150,19 +115,8 @@ int main(int argc, char** argv) pres = 1.0; g.setState_TPX(T, pres, DATA_PTR(Xmol)); try { - retnSub = equilibrate(g, "TP", solver); + g.equilibrate("TP", solver); cout << g.report(true, 0.0); - if (retnSub != 1) { - cerr << "ERROR: ChemEquil equilibration step failed at " - << " T = " << T - << " Pres = " << pres - << endl; - cout << "ERROR: ChemEquil equilibration step failed at " - << " T = " << T - << " Pres = " << pres - << endl; - exit(-1); - } } catch (CanteraError& err) { cout << g.report(true, 0.0); std::cerr << err.what() << std::endl; @@ -194,19 +148,9 @@ int main(int argc, char** argv) */ g.setState_TPX(T, pres, DATA_PTR(Xmol)); - retnSub = 0; try { - retnSub = equilibrate(g, "TP", solver); - if (retnSub != 1) { - cerr << "ERROR: ChemEquil equilibration step failed at " - << " T = " << T - << " Pres = " << pres - << endl; - cout << "ERROR: ChemEquil equilibration step failed at " - << " T = " << T - << " Pres = " << pres - << endl; - } + g.equilibrate("TP", solver); + numSucc++; } catch (CanteraError& err) { std::cerr << err.what() << std::endl; cerr << "ERROR: equilibration step failed at " @@ -217,16 +161,11 @@ int main(int argc, char** argv) << " T = " << T << " Pres = " << pres << endl; + numFail++; } if (showResults) { cout << g.report(true, 0.0); } - if (retnSub ==1) { - numSucc++; - } else { - numFail++; - } - } } } diff --git a/test_problems/ChemEquil_gri_pairs/gri_pairs.cpp b/test_problems/ChemEquil_gri_pairs/gri_pairs.cpp index e5d63cf5a..38a9d5c18 100644 --- a/test_problems/ChemEquil_gri_pairs/gri_pairs.cpp +++ b/test_problems/ChemEquil_gri_pairs/gri_pairs.cpp @@ -3,7 +3,6 @@ */ #include "cantera/IdealGasMix.h" -#include "cantera/equilibrium.h" #include @@ -19,14 +18,14 @@ int main(int argc, char** argv) IdealGasMix g("gri30.xml", "gri30_mix"); double pres = 1.0E5; g.setState_TPX(1500.0, pres, "CH4:0.3, O2:0.3, N2:0.4"); - equilibrate(g, "TP", -1); + g.equilibrate("TP", "auto"); //cout << g; double enth = g.enthalpy_mass(); printf(" enth = %g\n", enth); enth -= 1.0E5; printf("attempted equil at (H,P) = %10.5g, %10.5g\n", enth, pres); g.setState_HP(enth, pres); - equilibrate(g, "HP", -1); + g.equilibrate("HP", "auto"); //cout << g; double entrop = g.entropy_mass(); @@ -34,7 +33,7 @@ int main(int argc, char** argv) entrop += 1.0E2; printf("attempted equil at (S,P) = %10.5g, %10.5g\n", entrop, pres); g.setState_SP(entrop, pres); - equilibrate(g, "SP", -1); + g.equilibrate("SP", "auto"); //cout << g; double dens = g.density(); @@ -43,13 +42,13 @@ int main(int argc, char** argv) double vol = 1.0/dens; printf("attempted equil at (S,V,dens) = %10.5g, %10.5g, %10.5g\n", entrop, vol, 1.0/vol); g.setState_SV(entrop, vol); - equilibrate(g, "SV", -1); + g.equilibrate("SV", "auto"); //cout << g; double temp = 1800.; printf("attempted equil at (T,V, dens) = %10.5g, %10.5g, %10.5g\n", temp, vol, 1.0/vol); g.setTemperature(temp); - equilibrate(g, "TV", -1); + g.equilibrate("TV", "auto"); //cout << g; double inte = g.intEnergy_mass(); @@ -57,7 +56,7 @@ int main(int argc, char** argv) inte -= 1.0E5; printf("attempted equil at (U,V,dens) = %10.5g, %10.5g, %10.5g\n", inte, vol, 1.0/vol); g.setState_UV(inte, vol); - equilibrate(g, "UV", -1); + g.equilibrate("UV", "auto"); //cout << g; diff --git a/test_problems/ChemEquil_ionizedGas/ionizedGasEquil.cpp b/test_problems/ChemEquil_ionizedGas/ionizedGasEquil.cpp index 04b614f17..f4069cda7 100644 --- a/test_problems/ChemEquil_ionizedGas/ionizedGasEquil.cpp +++ b/test_problems/ChemEquil_ionizedGas/ionizedGasEquil.cpp @@ -1,5 +1,4 @@ #include "cantera/IdealGasMix.h" -#include "cantera/equilibrium.h" #include @@ -57,7 +56,7 @@ int main(int argc, char** argv) double pres = gas->pressure(); printf("Initial T = %g, pres = %g atm\n", tkelvin, pres/OneAtm); - equilibrate(*gas,"UV", 0, 1e-12); + gas->equilibrate("UV", "element_potential", 1e-12); tkelvin = gas->temperature(); pres = gas->pressure(); diff --git a/test_problems/ChemEquil_red1/basopt_red1.cpp b/test_problems/ChemEquil_red1/basopt_red1.cpp index 5fd62e980..696a22b99 100644 --- a/test_problems/ChemEquil_red1/basopt_red1.cpp +++ b/test_problems/ChemEquil_red1/basopt_red1.cpp @@ -1,5 +1,5 @@ #include "cantera/IdealGasMix.h" -#include "cantera/equilibrium.h" +#include "cantera/equil/MultiPhase.h" using namespace std; using namespace Cantera; @@ -43,11 +43,7 @@ int main(int argc, char** argv) * The ChemEquil solver throws an error for this case. * The MultiPhaseEquil solver just gets the wrong result. */ - int it = equilibrate(g, "TP", -1); - if (it != 1) { - cerr << "incorrect number of iterations." << endl; - return -1; - } + g.equilibrate("TP", "auto"); cout.unsetf(ios::floatfield); cout.precision(3); //cout << g; diff --git a/test_problems/CpJump/CpJump.cpp b/test_problems/CpJump/CpJump.cpp index 7677cb57b..6558620e5 100644 --- a/test_problems/CpJump/CpJump.cpp +++ b/test_problems/CpJump/CpJump.cpp @@ -3,7 +3,6 @@ */ #include "cantera/IdealGasMix.h" -#include "cantera/equilibrium.h" using namespace std; using namespace Cantera; @@ -17,14 +16,14 @@ int main(int argc, char** argv) IdealGasMix g("bad_air.xml", "air"); double pres = 1.0E5; g.setState_TPX(1000.1, pres, "O2:0.4, N2:0.6"); - equilibrate(g, "TP", -1); + g.equilibrate("TP", "auto"); //cout << g; double enth = g.enthalpy_mass(); printf(" enth = %g\n", enth); enth -= 2.0E2; printf("attempted equil at (H,P) = %10.5g, %10.5g\n", enth, pres); g.setState_HP(enth, pres); - equilibrate(g, "HP", -1); + g.equilibrate("HP", "auto"); enth = g.enthalpy_mass(); printf(" enth = %g\n", enth); //cout << g; diff --git a/test_problems/VCSnonideal/LatticeSolid_LiSi/latsol.cpp b/test_problems/VCSnonideal/LatticeSolid_LiSi/latsol.cpp index 5abc7caca..b2fc44951 100644 --- a/test_problems/VCSnonideal/LatticeSolid_LiSi/latsol.cpp +++ b/test_problems/VCSnonideal/LatticeSolid_LiSi/latsol.cpp @@ -2,10 +2,11 @@ #include "cantera/thermo/MargulesVPSSTP.h" #include "cantera/thermo/FixedChemPotSSTP.h" #include "cantera/thermo/LatticeSolidPhase.h" -#include "cantera/equilibrium.h" +#include "cantera/equil/vcs_MultiPhaseEquil.h" #include "cantera/thermo.h" #include +#include using namespace Cantera; @@ -54,11 +55,10 @@ void testProblem() mmm.addPhase(LiSi_solid.get(), 1.); mmm.addPhase(&LiFixed, 100.); - int solver = 2; int printLvl = 3; int estimateEquil = 0; - vcs_equilibrate(mmm, "TP", estimateEquil, printLvl, solver); + mmm.equilibrate("TP", "vcs", 1e-9, 50000, 100, estimateEquil, printLvl); std::cout << mmm << std::endl; Cantera::appdelete(); diff --git a/test_problems/VCSnonideal/LatticeSolid_LiSi/output_blessed.txt b/test_problems/VCSnonideal/LatticeSolid_LiSi/output_blessed.txt index 31731a0ee..7e63bbc02 100644 --- a/test_problems/VCSnonideal/LatticeSolid_LiSi/output_blessed.txt +++ b/test_problems/VCSnonideal/LatticeSolid_LiSi/output_blessed.txt @@ -2,6 +2,7 @@ Number of elements = 3 chem pot = -2.3e+07 dg_corr = -1.57754e+08 um_li_chempot = -1.65555e+08 +Trying VCS equilibrium solver Unknown Cantera EOS to VCSnonideal: 0 Unknown Cantera EOS to VCSnonideal: 20 Unknown Cantera EOS to VCSnonideal: 70 @@ -235,6 +236,7 @@ Li(i) 1.398e-13 1.398e-13 -1.691e+08 V(i) 5.000e-01 5.000e-01 -3.513e+06 LiFixed 1.000e+02 1.000e+00 -1.656e+08 ------------------------------------------------------------- +VCS solver succeeded *************** MoltenSalt_electrolyte ***************** Moles: 10 diff --git a/test_problems/VCSnonideal/NaCl_equil/good_out.txt b/test_problems/VCSnonideal/NaCl_equil/good_out.txt index fe4cfd45e..0f6a3468d 100644 --- a/test_problems/VCSnonideal/NaCl_equil/good_out.txt +++ b/test_problems/VCSnonideal/NaCl_equil/good_out.txt @@ -1,3 +1,4 @@ +Trying VCS equilibrium solver Unknown Cantera EOS to VCSnonideal: 45012 ================================================================================ @@ -308,6 +309,7 @@ N2 4.000e+00 9.763e-01 -5.719e+07 OH 3.747e-07 9.145e-08 -2.670e+08 NaCl(S) 4.788e+00 1.000e+00 -4.326e+08 ------------------------------------------------------------- +VCS solver succeeded *************** NaCl_electrolyte ***************** Moles: 2.32744 diff --git a/test_problems/VCSnonideal/NaCl_equil/nacl_equil.cpp b/test_problems/VCSnonideal/NaCl_equil/nacl_equil.cpp index b8f5e1eec..e755131c5 100644 --- a/test_problems/VCSnonideal/NaCl_equil/nacl_equil.cpp +++ b/test_problems/VCSnonideal/NaCl_equil/nacl_equil.cpp @@ -2,9 +2,7 @@ * Copyright 2002 California Institute of Technology */ -#include "cantera/equilibrium.h" #include "cantera/equil/vcs_MultiPhaseEquil.h" -#include "cantera/equil/vcs_internal.h" #include "cantera/thermo/ThermoFactory.h" #include "cantera/thermo/IdealGasPhase.h" @@ -83,7 +81,6 @@ int main(int argc, char** argv) try { - int retnSub; int estimateEquil = 0; double T = 298.15; double pres = OneAtm; @@ -122,20 +119,8 @@ int main(int argc, char** argv) try { - retnSub = vcs_equilibrate(*mp, "TP", estimateEquil, printLvl); - + mp->equilibrate("TP", "vcs", 1e-9, 50000, 100, estimateEquil, printLvl); cout << *mp; - if (retnSub != 1) { - cerr << "ERROR: MultiEquil equilibration step failed at " - << " T = " << T - << " Pres = " << pres - << endl; - cout << "ERROR: MultiEquil equilibration step failed at " - << " T = " << T - << " Pres = " << pres - << endl; - exit(-1); - } numSucc++; } catch (CanteraError& err) { cout << *mp; diff --git a/test_problems/VPsilane_test/silane_equil.cpp b/test_problems/VPsilane_test/silane_equil.cpp index b4cea5d1a..916cf0a18 100644 --- a/test_problems/VPsilane_test/silane_equil.cpp +++ b/test_problems/VPsilane_test/silane_equil.cpp @@ -3,7 +3,6 @@ */ #include "cantera/IdealGasMix.h" -#include "cantera/equilibrium.h" #include "cantera/thermo/IdealSolnGasVPSS.h" #include "cantera/thermo/ThermoFactory.h" @@ -22,7 +21,7 @@ int main(int argc, char** argv) cout.precision(4); g->setState_TPX(1500.0, 100.0, "SIH4:0.01, H2:0.99"); //g.setState_TPX(1500.0, 1.0132E5, "SIH4:0.01, H2:0.99"); - equilibrate(*g, "TP"); + g->equilibrate("TP"); cout << g->report(true, 0.0) << endl; return 0; } catch (CanteraError& err) { diff --git a/test_problems/cxx_ex/equil_example1.cpp b/test_problems/cxx_ex/equil_example1.cpp index 7cb59a1ca..171ccfe89 100644 --- a/test_problems/cxx_ex/equil_example1.cpp +++ b/test_problems/cxx_ex/equil_example1.cpp @@ -6,7 +6,6 @@ ///////////////////////////////////////////////////////////// #include "example_utils.h" -#include "cantera/equilibrium.h" #include "cantera/IdealGasMix.h" @@ -80,8 +79,7 @@ int equil_example1(int job) } gas.setState_TPX(temp, pres, "SIH4:0.01, H2:0.99"); - // equilibrate(gas,"TP",1,1.0e-9,1000,100,15); - equilibrate(gas,"TP"); + gas.equilibrate("TP"); output(0,i) = temp; output(1,i) = gas.pressure(); gas.getMoleFractions(&output(2,i)); diff --git a/test_problems/cxx_ex/transport_example2.cpp b/test_problems/cxx_ex/transport_example2.cpp index 4fb18773b..cbaf5638e 100644 --- a/test_problems/cxx_ex/transport_example2.cpp +++ b/test_problems/cxx_ex/transport_example2.cpp @@ -8,7 +8,6 @@ #include "cantera/transport.h" #include "example_utils.h" -#include "cantera/equilibrium.h" #include "cantera/IdealGasMix.h" using namespace Cantera; @@ -34,7 +33,7 @@ int transport_example2(int job) doublereal temp = 2000.0; doublereal pres = 2.0*OneAtm; gas.setState_TPX(temp, pres, "H2:1.0, O2:0.5, CH4:0.1, N2:0.2"); - equilibrate(gas,"TP"); + gas.equilibrate("TP"); // create a transport manager that implements // multicomponent transport properties diff --git a/test_problems/silane_equil/silane_equil.cpp b/test_problems/silane_equil/silane_equil.cpp index 24bd7c4d0..606d64e70 100644 --- a/test_problems/silane_equil/silane_equil.cpp +++ b/test_problems/silane_equil/silane_equil.cpp @@ -3,7 +3,6 @@ */ #include "cantera/IdealGasMix.h" -#include "cantera/equilibrium.h" using namespace std; using namespace Cantera; @@ -16,7 +15,7 @@ int main(int argc, char** argv) try { IdealGasMix g("silane.xml", "silane"); g.setState_TPX(1500.0, 100.0, "SIH4:0.01, H2:0.99"); - equilibrate(g, "TP"); + g.equilibrate("TP"); //cout << g; return 0; } catch (CanteraError& err) {