From a5ade5036f733cbd45a785dcce231e2a0b59de0d Mon Sep 17 00:00:00 2001 From: Dave Goodwin Date: Fri, 27 Jul 2007 03:37:48 +0000 Subject: [PATCH] made some log message writing optional --- Cantera/src/transport/MMCollisionInt.cpp | 54 ++++--- Cantera/src/transport/TransportFactory.cpp | 165 +++++++++++---------- Cantera/src/transport/TransportFactory.h | 19 +-- 3 files changed, 123 insertions(+), 115 deletions(-) diff --git a/Cantera/src/transport/MMCollisionInt.cpp b/Cantera/src/transport/MMCollisionInt.cpp index 5a4e15f92..43f6ce42d 100755 --- a/Cantera/src/transport/MMCollisionInt.cpp +++ b/Cantera/src/transport/MMCollisionInt.cpp @@ -227,10 +227,12 @@ namespace Cantera { void MMCollisionInt::init(XML_Writer* xml, doublereal tsmin, doublereal tsmax, int log_level) { + ostream& logfile = xml->output(); m_xml = xml; m_loglevel = log_level; - m_xml->XML_comment(logfile, "Collision Integral Polynomial Fits"); + if (m_loglevel > 0) + m_xml->XML_comment(logfile, "Collision Integral Polynomial Fits"); m_nmin = -1; m_nmax = -1; char p[200]; @@ -242,20 +244,24 @@ namespace Cantera { m_nmin = 0; m_nmax = 36; } - m_xml->XML_item(logfile, "Tstar_min", tstar[m_nmin + 1]); - m_xml->XML_item(logfile, "Tstar_max", tstar[m_nmax + 1]); + if (m_loglevel > 0) { + m_xml->XML_item(logfile, "Tstar_min", tstar[m_nmin + 1]); + m_xml->XML_item(logfile, "Tstar_max", tstar[m_nmax + 1]); + } m_logTemp.resize(37); doublereal rmserr, e22 = 0.0, ea = 0.0, eb = 0.0, ec = 0.0; - m_xml->XML_open(logfile, "dstar_fits"); - m_xml->XML_comment(logfile, "Collision integral fits at each " - "tabulated T* vs. delta*.\n" - "These polynomial fits are used to interpolate between " - "columns (delta*)\n in the Monchick and Mason tables." - " They are only used for nonzero delta*."); - if (log_level < 4) { - m_xml->XML_comment(logfile, - "polynomial coefficients not printed (log_level < 4)"); + if (m_loglevel > 0) { + m_xml->XML_open(logfile, "dstar_fits"); + m_xml->XML_comment(logfile, "Collision integral fits at each " + "tabulated T* vs. delta*.\n" + "These polynomial fits are used to interpolate between " + "columns (delta*)\n in the Monchick and Mason tables." + " They are only used for nonzero delta*."); + if (log_level < 4) { + m_xml->XML_comment(logfile, + "polynomial coefficients not printed (log_level < 4)"); + } } string indent = " "; @@ -270,7 +276,7 @@ namespace Cantera { m_xml->XML_open(logfile, "dstar_fit", p); m_xml->XML_item(logfile, "Tstar", tstar[i+1]); m_xml->XML_writeVector(logfile, indent, "omega22", - c.size(), DATA_PTR(c)); + c.size(), DATA_PTR(c)); } m_o22poly.push_back(c); if (rmserr > e22) e22 = rmserr; @@ -298,15 +304,19 @@ namespace Cantera { if (log_level > 3) m_xml->XML_close(logfile, "dstar_fit"); + + + if (log_level > 0) { + sprintf(p, + "max RMS errors in fits vs. delta*:\n" + " omega_22 = %12.6g \n" + " A* = %12.6g \n" + " B* = %12.6g \n" + " C* = %12.6g \n", e22, ea, eb, ec); + m_xml->XML_comment(logfile, p); + m_xml->XML_close(logfile, "dstar_fits"); + } } - sprintf(p, - "max RMS errors in fits vs. delta*:\n" - " omega_22 = %12.6g \n" - " A* = %12.6g \n" - " B* = %12.6g \n" - " C* = %12.6g \n", e22, ea, eb, ec); - m_xml->XML_comment(logfile, p); - m_xml->XML_close(logfile, "dstar_fits"); } MMCollisionInt::~MMCollisionInt() {} @@ -434,7 +444,7 @@ namespace Cantera { w[0]= -1.0; rmserr = polyfit(n, logT, DATA_PTR(values), DATA_PTR(w), degree, ndeg, 0.0, o22); - if (rmserr > 0.01) { + if (m_loglevel > 0 && rmserr > 0.01) { char p[100]; sprintf(p, "Warning: RMS error = %12.6g in omega_22 fit with delta* = %12.6g\n", rmserr, deltastar); m_xml->XML_comment(logfile, p); diff --git a/Cantera/src/transport/TransportFactory.cpp b/Cantera/src/transport/TransportFactory.cpp index 7803f4a49..92dcc5acf 100755 --- a/Cantera/src/transport/TransportFactory.cpp +++ b/Cantera/src/transport/TransportFactory.cpp @@ -241,7 +241,7 @@ namespace Cantera { * m_models[], a mapping between the string name * for a transport model and the integer name. */ - TransportFactory::TransportFactory() : m_integrals(0) { + TransportFactory::TransportFactory() : m_integrals(0), m_verbose(false) { m_models["Mix"] = cMixtureAveraged; m_models["Multi"] = cMulticomponent; m_models["Solid"] = cSolidTransport; @@ -428,25 +428,28 @@ namespace Cantera { // Chemkin fits the entire T* range in the Monchick and Mason tables, // so modify tstar_min and tstar_max if in Chemkin compatibility mode - // NOTE: the 'if' was commented out DGG 11/12/03 - if (mode == CK_Mode) { // uncommented + if (mode == CK_Mode) { tstar_min = 0.101; tstar_max = 99.9; - } // uncommented + } // initialize the collision integral calculator for the desired // T* range - tr.xml->XML_open(flog, "collision_integrals"); + if (m_verbose) + tr.xml->XML_open(flog, "collision_integrals"); m_integrals = new MMCollisionInt; m_integrals->init(tr.xml, tstar_min, tstar_max, log_level); fitCollisionIntegrals(flog, tr); - tr.xml->XML_close(flog, "collision_integrals"); + if (m_verbose) + tr.xml->XML_close(flog, "collision_integrals"); // make polynomial fits - tr.xml->XML_open(flog, "property fits"); + if (m_verbose) + tr.xml->XML_open(flog, "property fits"); fitProperties(tr,flog); - tr.xml->XML_close(flog, "property fits"); + if (m_verbose) + tr.xml->XML_close(flog, "property fits"); } @@ -457,17 +460,19 @@ namespace Cantera { TransportParams tr; ofstream flog("transport_log.xml"); + tr.xml = new XML_Writer(flog); - tr.xml->XML_open(flog, "transport"); + if (m_verbose) { + tr.xml->XML_open(flog, "transport"); + } // set up Monchick and Mason collision integrals setupMM(flog, transport_database, thermo, mode, log_level, tr); // do model-specific initialization tran->init(tr); - - tr.xml->XML_close(flog, "transport"); - flog.close(); + if (m_verbose) + tr.xml->XML_close(flog, "transport"); // finished with log file flog.close(); @@ -498,12 +503,13 @@ namespace Cantera { // Chemkin fits to sixth order polynomials int degree = (mode == CK_Mode ? 6 : COLL_INT_POLY_DEGREE); - tr.xml->XML_open(logfile, "tstar_fits"); - tr.xml->XML_comment(logfile, "fits to A*, B*, and C* vs. log(T*).\n" - "These are done only for the required dstar(j,k) values."); - if (tr.log_level < 3) - tr.xml->XML_comment(logfile, "*** polynomial coefficients not printed (log_level < 3) ***"); - + if (m_verbose) { + tr.xml->XML_open(logfile, "tstar_fits"); + tr.xml->XML_comment(logfile, "fits to A*, B*, and C* vs. log(T*).\n" + "These are done only for the required dstar(j,k) values."); + if (tr.log_level < 3) + tr.xml->XML_comment(logfile, "*** polynomial coefficients not printed (log_level < 3) ***"); + } for (i = 0; i < nsp; i++) { for (j = i; j < nsp; j++) @@ -545,7 +551,8 @@ namespace Cantera { tr.poly[j][i] = tr.poly[i][j]; } } - tr.xml->XML_close(logfile, "tstar_fits"); + if (m_verbose) + tr.xml->XML_close(logfile, "tstar_fits"); } @@ -742,23 +749,26 @@ namespace Cantera { // fit the pure-species viscosity and thermal conductivity for // each species - if (tr.log_level < 2) + if (tr.log_level < 2 && m_verbose) tr.xml->XML_comment(logfile, - "*** polynomial coefficients not printed (log_level < 3) ***"); + "*** polynomial coefficients not printed (log_level < 2) ***"); int ipoly; doublereal sqrt_T, visc, err, relerr, mxerr = 0.0, mxrelerr = 0.0, mxerr_cond = 0.0, mxrelerr_cond = 0.0; - tr.xml->XML_open(logfile, "viscosity"); - tr.xml->XML_comment(logfile,"Polynomial fits for viscosity"); - if (mode == CK_Mode) { - tr.xml->XML_comment(logfile,"log(viscosity) fit to cubic " - "polynomial in log(T)"); - } - else { - sprintf(s, "viscosity/sqrt(T) fit to " - "polynomial of degree %d in log(T)",degree); - tr.xml->XML_comment(logfile,s); + + if (m_verbose) { + tr.xml->XML_open(logfile, "viscosity"); + tr.xml->XML_comment(logfile,"Polynomial fits for viscosity"); + if (mode == CK_Mode) { + tr.xml->XML_comment(logfile,"log(viscosity) fit to cubic " + "polynomial in log(T)"); + } + else { + sprintf(s, "viscosity/sqrt(T) fit to " + "polynomial of degree %d in log(T)",degree); + tr.xml->XML_comment(logfile,s); + } } @@ -876,52 +886,55 @@ namespace Cantera { tr.visccoeffs.push_back(c); tr.condcoeffs.push_back(c2); - if (tr.log_level >= 2) { + if (tr.log_level >= 2 && m_verbose) { tr.xml->XML_writeVector(logfile, " ", tr.thermo->speciesName(k), c.size(), DATA_PTR(c)); } } - sprintf(s, "Maximum viscosity absolute error: %12.6g", mxerr); - tr.xml->XML_comment(logfile,s); - sprintf(s, "Maximum viscosity relative error: %12.6g", mxrelerr); - tr.xml->XML_comment(logfile,s); - tr.xml->XML_close(logfile, "viscosity"); - - - tr.xml->XML_open(logfile, "conductivity"); - tr.xml->XML_comment(logfile,"Polynomial fits for conductivity"); - if (mode == CK_Mode) - tr.xml->XML_comment(logfile,"log(conductivity) fit to cubic " - "polynomial in log(T)"); - else { - sprintf(s, "conductivity/sqrt(T) fit to " - "polynomial of degree %d in log(T)",degree); + if (m_verbose) { + sprintf(s, "Maximum viscosity absolute error: %12.6g", mxerr); tr.xml->XML_comment(logfile,s); - } - if (tr.log_level >= 2) - for (k = 0; k < tr.nsp; k++) { - tr.xml->XML_writeVector(logfile, " ", tr.thermo->speciesName(k), - degree+1, DATA_PTR(tr.condcoeffs[k])); - } - sprintf(s, "Maximum conductivity absolute error: %12.6g", mxerr_cond); - tr.xml->XML_comment(logfile,s); - sprintf(s, "Maximum conductivity relative error: %12.6g", mxrelerr_cond); - tr.xml->XML_comment(logfile,s); - tr.xml->XML_close(logfile, "conductivity"); + sprintf(s, "Maximum viscosity relative error: %12.6g", mxrelerr); + tr.xml->XML_comment(logfile,s); + tr.xml->XML_close(logfile, "viscosity"); - // fit the binary diffusion coefficients for each species pair - tr.xml->XML_open(logfile, "binary_diffusion_coefficients"); - tr.xml->XML_comment(logfile, "binary diffusion coefficients"); - if (mode == CK_Mode) - tr.xml->XML_comment(logfile,"log(D) fit to cubic " - "polynomial in log(T)"); - else { - sprintf(s, "D/T**(3/2) fit to " - "polynomial of degree %d in log(T)",degree); + tr.xml->XML_open(logfile, "conductivity"); + tr.xml->XML_comment(logfile,"Polynomial fits for conductivity"); + if (mode == CK_Mode) + tr.xml->XML_comment(logfile,"log(conductivity) fit to cubic " + "polynomial in log(T)"); + else { + sprintf(s, "conductivity/sqrt(T) fit to " + "polynomial of degree %d in log(T)",degree); + tr.xml->XML_comment(logfile,s); + } + if (tr.log_level >= 2) + for (k = 0; k < tr.nsp; k++) { + tr.xml->XML_writeVector(logfile, " ", tr.thermo->speciesName(k), + degree+1, DATA_PTR(tr.condcoeffs[k])); + } + sprintf(s, "Maximum conductivity absolute error: %12.6g", mxerr_cond); tr.xml->XML_comment(logfile,s); + sprintf(s, "Maximum conductivity relative error: %12.6g", mxrelerr_cond); + tr.xml->XML_comment(logfile,s); + tr.xml->XML_close(logfile, "conductivity"); + + // fit the binary diffusion coefficients for each species pair + + tr.xml->XML_open(logfile, "binary_diffusion_coefficients"); + tr.xml->XML_comment(logfile, "binary diffusion coefficients"); + if (mode == CK_Mode) + tr.xml->XML_comment(logfile,"log(D) fit to cubic " + "polynomial in log(T)"); + else { + sprintf(s, "D/T**(3/2) fit to " + "polynomial of degree %d in log(T)",degree); + tr.xml->XML_comment(logfile,s); + } } + mxerr = 0.0, mxrelerr = 0.0; vector_fp diff(np + 1); doublereal eps, sigma; @@ -982,18 +995,20 @@ namespace Cantera { if (fabs(relerr) > mxrelerr) mxrelerr = fabs(relerr); } tr.diffcoeffs.push_back(c); - if (tr.log_level >= 2) + if (tr.log_level >= 2 && m_verbose) tr.xml->XML_writeVector(logfile, " ", tr.thermo->speciesName(k) + "__"+tr.thermo->speciesName(j), c.size(), DATA_PTR(c)); } } - sprintf(s,"Maximum binary diffusion coefficient absolute error:" - " %12.6g", mxerr); - tr.xml->XML_comment(logfile,s); - sprintf(s, "Maximum binary diffusion coefficient relative error:" - "%12.6g", mxrelerr); - tr.xml->XML_comment(logfile,s); - tr.xml->XML_close(logfile, "binary_diffusion_coefficients"); + if (m_verbose) { + sprintf(s,"Maximum binary diffusion coefficient absolute error:" + " %12.6g", mxerr); + tr.xml->XML_comment(logfile,s); + sprintf(s, "Maximum binary diffusion coefficient relative error:" + "%12.6g", mxrelerr); + tr.xml->XML_comment(logfile,s); + tr.xml->XML_close(logfile, "binary_diffusion_coefficients"); + } } } diff --git a/Cantera/src/transport/TransportFactory.h b/Cantera/src/transport/TransportFactory.h index df86fd93c..fc8aa13f7 100755 --- a/Cantera/src/transport/TransportFactory.h +++ b/Cantera/src/transport/TransportFactory.h @@ -138,17 +138,12 @@ namespace Cantera { #if defined(THREAD_SAFE_CANTERA) static boost::mutex transport_mutex ; #endif + bool m_verbose; // The constructor is private; use static method factory() to // get a pointer to a factory instance TransportFactory(); - /// Read in transport parameters from a database - //void readTransportDatabase(ostream& logfile, - // XML_Node* db, - // const vector& names, - // TransportParams& tr); - void getTransportData(const XML_Node* db, XML_Node& log, const std::vector& names, TransportParams& tr); @@ -167,18 +162,6 @@ namespace Cantera { thermo_t* thermo, int mode, int log_level, TransportParams& tr); - /// construct a new power-law transport manager - //Transport* newPowerTransport(const string& transport_database, - // phase_t* mix); - - /// construct a new multicomponent transport manager - // Transport* newMultiTransport(const string& fname, - // thermo_t* thermo, int mode = 0, int log_level = 0); - - /// construct a new mixture-averaged transport server - //Transport* newMixTransport(const string& fname, - // thermo_t* thermo, int mode = 0, int log_level = 0); - /// Second-order correction to the binary diffusion coefficients void getBinDiffCorrection(doublereal t,