From 37342f92fabee6e747d1fd515d72f4ad8c3f531a Mon Sep 17 00:00:00 2001 From: Harry Moffat Date: Wed, 18 Mar 2009 17:27:16 +0000 Subject: [PATCH] Fixed a bug in the logfile capability --- Cantera/src/equil/MultiPhase.cpp | 12 ++-- Cantera/src/equil/MultiPhaseEquil.cpp | 2 +- Cantera/src/equil/equilibrate.cpp | 78 ++++++++++++----------- Cantera/src/equil/vcs_MultiPhaseEquil.cpp | 10 +++ Cantera/src/equil/vcs_equilibrate.cpp | 31 +++++---- 5 files changed, 74 insertions(+), 59 deletions(-) diff --git a/Cantera/src/equil/MultiPhase.cpp b/Cantera/src/equil/MultiPhase.cpp index c11ca45b7..f139083c5 100644 --- a/Cantera/src/equil/MultiPhase.cpp +++ b/Cantera/src/equil/MultiPhase.cpp @@ -4,7 +4,7 @@ * object that is used to set up multiphase equilibrium problems (see \ref equilfunctions). */ /* - * $Author$ + * * $Date$ * $Revision$ */ @@ -544,9 +544,9 @@ namespace Cantera { // create an equilibrium manager e = new MultiPhaseEquil(this); try { - error = e->equilibrate(XY, err, maxsteps); + error = e->equilibrate(XY, err, maxsteps, loglevel); } - catch (CanteraError err) { + catch (CanteraError &err) { if (loglevel > 0) endLogGroup(); delete e; @@ -579,7 +579,7 @@ namespace Cantera { beginLogGroup("iteration "+int2str(n)); try { - error = e->equilibrate(TP, err, maxsteps); + error = e->equilibrate(TP, err, maxsteps, loglevel); hnow = enthalpy(); // the equilibrium enthalpy monotonically increases with T; // if the current value is below the target, the we know the @@ -690,7 +690,7 @@ namespace Cantera { beginLogGroup("iteration "+int2str(n)); try { - error = e->equilibrate(TP, err, maxsteps); + error = e->equilibrate(TP, err, maxsteps, loglevel); snow = entropy(); if (snow < s0) { if (m_temp > Tlow) Tlow = m_temp; @@ -769,7 +769,7 @@ namespace Cantera { start = false; beginLogGroup("iteration "+int2str(n)); - error = e.equilibrate(TP, err, maxsteps); + error = e.equilibrate(TP, err, maxsteps, loglevel); vnow = volume(); verr = fabs((v0 - vnow)/v0); addLogEntry("P",fp2str(pressure())); diff --git a/Cantera/src/equil/MultiPhaseEquil.cpp b/Cantera/src/equil/MultiPhaseEquil.cpp index 85dd13516..9e46bd43b 100644 --- a/Cantera/src/equil/MultiPhaseEquil.cpp +++ b/Cantera/src/equil/MultiPhaseEquil.cpp @@ -207,7 +207,7 @@ namespace Cantera { doublereal MultiPhaseEquil::equilibrate(int XY, doublereal err, - int maxsteps, int loglevel) { + int maxsteps, int loglevel) { int i; m_iter = 0; string iterstr; diff --git a/Cantera/src/equil/equilibrate.cpp b/Cantera/src/equil/equilibrate.cpp index 2f7d3864a..548df4f68 100644 --- a/Cantera/src/equil/equilibrate.cpp +++ b/Cantera/src/equil/equilibrate.cpp @@ -3,7 +3,9 @@ * Driver routines for the chemical equilibrium solvers. * */ - +/* + * $Id$ + */ #include "equil.h" #include "ChemEquil.h" #include "MultiPhaseEquil.h" @@ -26,42 +28,42 @@ namespace Cantera { doublereal tol, int maxsteps, int maxiter, int loglevel) { - if (loglevel > 0) { - beginLogGroup("equilibrate",loglevel); - addLogEntry("multiphase equilibrate function"); - beginLogGroup("arguments"); - addLogEntry("XY",XY); - addLogEntry("tol",tol); - addLogEntry("maxsteps",maxsteps); - addLogEntry("maxiter",maxiter); - addLogEntry("loglevel",loglevel); - endLogGroup("arguments"); - } - s.init(); - int ixy = _equilflag(XY); - if (ixy == TP || ixy == HP || ixy == SP || ixy == TV) { - try { - double err = s.equilibrate(ixy, tol, maxsteps, maxiter, loglevel); - if (loglevel > 0) { - addLogEntry("Success. Error",err); - endLogGroup("equilibrate"); + if (loglevel > 0) { + beginLogGroup("equilibrate",loglevel); + addLogEntry("multiphase equilibrate function"); + beginLogGroup("arguments"); + addLogEntry("XY",XY); + addLogEntry("tol",tol); + addLogEntry("maxsteps",maxsteps); + addLogEntry("maxiter",maxiter); + addLogEntry("loglevel",loglevel); + endLogGroup("arguments"); + } + s.init(); + int ixy = _equilflag(XY); + if (ixy == TP || ixy == HP || ixy == SP || ixy == TV) { + try { + double err = s.equilibrate(ixy, tol, maxsteps, maxiter, loglevel); + if (loglevel > 0) { + addLogEntry("Success. Error",err); + endLogGroup("equilibrate"); - } - return err; - } - catch (CanteraError e) { - if (loglevel > 0) { - addLogEntry("Failure.",lastErrorMessage()); - endLogGroup("equilibrate"); - } - throw e; - } + } + return err; + } + catch (CanteraError &err) { + if (loglevel > 0) { + addLogEntry("Failure.",lastErrorMessage()); + endLogGroup("equilibrate"); + } + throw err; + } + } + else { + if (loglevel > 0) { + addLogEntry("multiphase equilibrium can be done only for TP, HP, SP, or TV"); + endLogGroup("equilibrate"); } - else { - if (loglevel > 0) { - addLogEntry("multiphase equilibrium can be done only for TP, HP, SP, or TV"); - endLogGroup("equilibrate"); - } throw CanteraError("equilibrate","unsupported option"); //return -1.0; } @@ -142,7 +144,7 @@ namespace Cantera { delete m; retn = nAttempts; } - catch (CanteraError err) { + catch (CanteraError &err) { if (loglevel > 0) addLogEntry("VCSnonideal solver failed."); delete m; @@ -174,7 +176,7 @@ namespace Cantera { delete m; retn = nAttempts; } - catch (CanteraError err) { + catch (CanteraError &err) { if (loglevel > 0) addLogEntry("MultiPhaseEquil solver failed."); delete m; @@ -222,7 +224,7 @@ namespace Cantera { addLogEntry("ChemEquil solver succeeded."); } - catch (CanteraError err) { + catch (CanteraError &err) { delete e; if (loglevel > 0) addLogEntry("ChemEquil solver failed."); diff --git a/Cantera/src/equil/vcs_MultiPhaseEquil.cpp b/Cantera/src/equil/vcs_MultiPhaseEquil.cpp index 0f59754c9..c8348e946 100644 --- a/Cantera/src/equil/vcs_MultiPhaseEquil.cpp +++ b/Cantera/src/equil/vcs_MultiPhaseEquil.cpp @@ -585,6 +585,7 @@ namespace VCSnonideal { } m_printLvl = printLvl; m_vprob->m_printLvl = printLvl; + /* * Extract the current state information @@ -595,6 +596,7 @@ namespace VCSnonideal { if (res != 0) { plogf("problems\n"); } + // Set the estimation technique if (estimateEquil) { @@ -617,6 +619,11 @@ namespace VCSnonideal { "Pressure less than zero on input"); } + beginLogGroup("vcs_MultiPhaseEquil::equilibrate_TP", loglevel); + addLogEntry("problem type","fixed T,P"); + addLogEntry("Temperature", T); + addLogEntry("Pressure", pres); + /* * Print out the problem specification from the point of @@ -719,6 +726,9 @@ namespace VCSnonideal { } } } + if (loglevel > 0) { + endLogGroup(); + } return iSuccess; } diff --git a/Cantera/src/equil/vcs_equilibrate.cpp b/Cantera/src/equil/vcs_equilibrate.cpp index a72178f81..ed46e6c14 100644 --- a/Cantera/src/equil/vcs_equilibrate.cpp +++ b/Cantera/src/equil/vcs_equilibrate.cpp @@ -310,6 +310,7 @@ namespace Cantera { doublereal tol, int maxsteps, int maxiter, int loglevel) { static int counter = 0; int retn = 1; + beginLogGroup("equilibrate",loglevel); addLogEntry("multiphase equilibrate function"); beginLogGroup("arguments"); @@ -319,15 +320,17 @@ namespace Cantera { addLogEntry("maxiter",maxiter); addLogEntry("loglevel",loglevel); endLogGroup("arguments"); + int printLvlSub = MAX(0, printLvl-1); s.init(); if (solver == 2) { try { - VCSnonideal::vcs_MultiPhaseEquil *eqsolve = new VCSnonideal::vcs_MultiPhaseEquil(&s, printLvlSub); + VCSnonideal::vcs_MultiPhaseEquil *eqsolve = + new VCSnonideal::vcs_MultiPhaseEquil(&s, printLvlSub); int err = eqsolve->equilibrate(ixy, estimateEquil, printLvlSub, - tol, maxsteps, maxiter); + tol, maxsteps, loglevel); if (err != 0) { retn = -1; addLogEntry("vcs_equilibrate Error - ", err); @@ -356,25 +359,25 @@ namespace Cantera { if (ixy == TP || ixy == HP || ixy == SP || ixy == TV) { try { double err = s.equilibrate(ixy, tol, maxsteps, maxiter, loglevel); - if (loglevel > 0) { - addLogEntry("Success. Error",err); - endLogGroup("equilibrate"); - } + + addLogEntry("Success. Error",err); + endLogGroup("equilibrate"); + return 0; } catch (CanteraError &e) { - if (loglevel > 0) { - addLogEntry("Failure.",lastErrorMessage()); - endLogGroup("equilibrate"); - } + + addLogEntry("Failure.",lastErrorMessage()); + endLogGroup("equilibrate"); + throw e; } } else { - if (loglevel > 0) { - addLogEntry("multiphase equilibrium can be done only for TP, HP, SP, or TV"); - endLogGroup("equilibrate"); - } + + addLogEntry("multiphase equilibrium can be done only for TP, HP, SP, or TV"); + endLogGroup("equilibrate"); + throw CanteraError("equilibrate","unsupported option"); //return -1.0; }