[cig-commits] r16231 - short/3D/PyLith/trunk/libsrc/problems

brad at geodynamics.org brad at geodynamics.org
Thu Feb 4 11:29:24 PST 2010


Author: brad
Date: 2010-02-04 11:29:24 -0800 (Thu, 04 Feb 2010)
New Revision: 16231

Modified:
   short/3D/PyLith/trunk/libsrc/problems/Solver.cc
   short/3D/PyLith/trunk/libsrc/problems/Solver.hh
   short/3D/PyLith/trunk/libsrc/problems/SolverLinear.cc
   short/3D/PyLith/trunk/libsrc/problems/SolverLinear.hh
   short/3D/PyLith/trunk/libsrc/problems/SolverLumped.cc
   short/3D/PyLith/trunk/libsrc/problems/SolverLumped.hh
   short/3D/PyLith/trunk/libsrc/problems/SolverNonlinear.cc
   short/3D/PyLith/trunk/libsrc/problems/SolverNonlinear.hh
Log:
Added some logging to solvers.

Modified: short/3D/PyLith/trunk/libsrc/problems/Solver.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/problems/Solver.cc	2010-02-04 01:44:40 UTC (rev 16230)
+++ short/3D/PyLith/trunk/libsrc/problems/Solver.cc	2010-02-04 19:29:24 UTC (rev 16231)
@@ -14,12 +14,15 @@
 
 #include "Solver.hh" // implementation of class methods
 
+#include "pylith/utils/EventLogger.hh" // USES EventLogger
+
 #include <cassert> // USES assert()
 
 // ----------------------------------------------------------------------
 // Constructor
 pylith::problems::Solver::Solver(void) :
-  _formulation(0)
+  _formulation(0),
+  _logger(0)
 { // constructor
 } // constructor
 
@@ -36,6 +39,7 @@
 pylith::problems::Solver::deallocate(void)
 { // deallocate
   _formulation = 0; // Handle only, do not manage memory.
+  delete _logger; _logger = 0;
 } // deallocate
   
 // ----------------------------------------------------------------------

Modified: short/3D/PyLith/trunk/libsrc/problems/Solver.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/problems/Solver.hh	2010-02-04 01:44:40 UTC (rev 16230)
+++ short/3D/PyLith/trunk/libsrc/problems/Solver.hh	2010-02-04 19:29:24 UTC (rev 16231)
@@ -24,8 +24,8 @@
 #include "problemsfwd.hh" // forward declarations
 
 #include "pylith/topology/topologyfwd.hh" // USES SolutionFields
+#include "pylith/utils/utilsfwd.hh" // USES EventLogger
 
-
 // Solver ---------------------------------------------------------
 /** @brief Abstract C++ base class for using PETSc linear and
  * nonlinear solvers.
@@ -64,6 +64,7 @@
 protected :
 
   Formulation* _formulation; ///< Handle to formulation for system of eqns.
+  utils::EventLogger* _logger; ///< Event logger.
 
 // NOT IMPLEMENTED //////////////////////////////////////////////////////
 private :

Modified: short/3D/PyLith/trunk/libsrc/problems/SolverLinear.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/problems/SolverLinear.cc	2010-02-04 01:44:40 UTC (rev 16230)
+++ short/3D/PyLith/trunk/libsrc/problems/SolverLinear.cc	2010-02-04 19:29:24 UTC (rev 16231)
@@ -17,6 +17,7 @@
 #include "pylith/topology/SolutionFields.hh" // USES SolutionFields
 #include "pylith/topology/Jacobian.hh" // USES Jacobian
 #include "pylith/problems/Formulation.hh" // USES Formulation
+#include "pylith/utils/EventLogger.hh" // USES EventLogger
 
 #include <petscksp.h> // USES PetscKSP
 
@@ -65,6 +66,7 @@
 { // initialize
   assert(0 != formulation);
 
+  _initializeLogger();
   Solver::initialize(fields, jacobian, formulation);
 
   PetscErrorCode err = 0;
@@ -104,11 +106,18 @@
   assert(0 != solution);
   assert(0 != jacobian);
 
-  PetscErrorCode err = 0;
+  const int setupEvent = _logger->eventId("SoLi setup");
+  const int solveEvent = _logger->eventId("SoLi solve");
+  const int scatterEvent = _logger->eventId("SoLi scatter");
+  _logger->eventBegin(scatterEvent);
 
   // Update PetscVector view of field.
   residual.scatterSectionToVector();
 
+  _logger->eventEnd(scatterEvent);
+  _logger->eventBegin(setupEvent);
+
+  PetscErrorCode err = 0;
   const PetscMat jacobianMat = jacobian->matrix();
   if (!jacobian->valuesChanged()) {
     err = KSPSetOperators(_ksp, jacobianMat, jacobianMat, 
@@ -121,11 +130,34 @@
 
   const PetscVec residualVec = residual.vector();
   const PetscVec solutionVec = solution->vector();
+
+  _logger->eventEnd(setupEvent);
+  _logger->eventBegin(solveEvent);
+
   err = KSPSolve(_ksp, residualVec, solutionVec); CHECK_PETSC_ERROR(err);
 
+  _logger->eventEnd(solveEvent);
+  _logger->eventBegin(scatterEvent);
+
   // Update section view of field.
   solution->scatterVectorToSection();
+
+  _logger->eventEnd(scatterEvent);
 } // solve
 
+// ----------------------------------------------------------------------
+// Initialize logger.
+void
+pylith::problems::SolverLinear::_initializeLogger(void)
+{ // initializeLogger
+  delete _logger; _logger = new utils::EventLogger;
+  assert(0 != _logger);
+  _logger->className("SolverLinear");
+  _logger->initialize();
+  _logger->registerEvent("SoLi setup");
+  _logger->registerEvent("SoLi solve");
+  _logger->registerEvent("SoLi scatter");
+} // initializeLogger
 
+
 // End of file

Modified: short/3D/PyLith/trunk/libsrc/problems/SolverLinear.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/problems/SolverLinear.hh	2010-02-04 01:44:40 UTC (rev 16230)
+++ short/3D/PyLith/trunk/libsrc/problems/SolverLinear.hh	2010-02-04 19:29:24 UTC (rev 16231)
@@ -69,6 +69,12 @@
 	     topology::Jacobian* jacobian,
 	     const topology::Field<topology::Mesh>& residual);
 
+// PRIVATE METHODS //////////////////////////////////////////////////////
+private :
+
+  /// Initialize logger.
+  void _initializeLogger(void);
+
 // PRIVATE MEMBERS //////////////////////////////////////////////////////
 private :
 

Modified: short/3D/PyLith/trunk/libsrc/problems/SolverLumped.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/problems/SolverLumped.cc	2010-02-04 01:44:40 UTC (rev 16230)
+++ short/3D/PyLith/trunk/libsrc/problems/SolverLumped.cc	2010-02-04 19:29:24 UTC (rev 16231)
@@ -18,6 +18,8 @@
 #include "pylith/topology/Jacobian.hh" // USES Jacobian
 #include "pylith/problems/Formulation.hh" // USES Formulation
 
+#include "pylith/utils/EventLogger.hh" // USES EventLogger
+
 // ----------------------------------------------------------------------
 typedef pylith::topology::Mesh::SieveMesh SieveMesh;
 typedef pylith::topology::Mesh::RealSection RealSection;
@@ -53,6 +55,8 @@
 { // initialize
   assert(0 != formulation);
 
+  _initializeLogger();
+
   _formulation = formulation;
 } // initialize
 
@@ -69,6 +73,11 @@
   
   // solution = residual / jacobian
   
+  const int setupEvent = _logger->eventId("SoLu setup");
+  const int solveEvent = _logger->eventId("SoLu solve");
+  const int adjustEvent = _logger->eventId("SoLu adjust");
+  _logger->eventBegin(setupEvent);
+
   const spatialdata::geocoords::CoordSys* cs = solution->mesh().coordsys();
   assert(0 != cs);
   const int spaceDim = cs->spaceDim();
@@ -96,6 +105,9 @@
   const ALE::Obj<RealSection>& residualSection = residual.section();
   assert(!residualSection.isNull());
   
+  _logger->eventEnd(setupEvent);
+  _logger->eventBegin(solveEvent);
+
   for (SieveMesh::label_sequence::iterator v_iter=verticesBegin; 
        v_iter != verticesEnd;
        ++v_iter) {
@@ -114,12 +126,29 @@
     assert(solutionSection->getFiberDimension(*v_iter) == spaceDim);
     solutionSection->updatePoint(*v_iter, &solutionVertex[0]);
   } // for
+  PetscLogFlops(vertices->size() * spaceDim);
+  _logger->eventEnd(solveEvent);
+  _logger->eventBegin(adjustEvent);
 
   // Adjust solution to match constraints
   _formulation->adjustSolnLumped();
 
-  PetscLogFlops(vertices->size() * spaceDim);
+  _logger->eventEnd(adjustEvent);
 } // solve
 
+// ----------------------------------------------------------------------
+// Initialize logger.
+void
+pylith::problems::SolverLumped::_initializeLogger(void)
+{ // initializeLogger
+  delete _logger; _logger = new utils::EventLogger;
+  assert(0 != _logger);
+  _logger->className("SolverLumped");
+  _logger->initialize();
+  _logger->registerEvent("SoLu setup");
+  _logger->registerEvent("SoLu solve");
+  _logger->registerEvent("SoLu adjust");
+} // initializeLogger
 
+
 // End of file

Modified: short/3D/PyLith/trunk/libsrc/problems/SolverLumped.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/problems/SolverLumped.hh	2010-02-04 01:44:40 UTC (rev 16230)
+++ short/3D/PyLith/trunk/libsrc/problems/SolverLumped.hh	2010-02-04 19:29:24 UTC (rev 16231)
@@ -65,6 +65,12 @@
 	     const topology::Field<topology::Mesh>& jacobian,
 	     const topology::Field<topology::Mesh>& residual);
 
+// PRIVATE METHODS //////////////////////////////////////////////////////
+private :
+
+  /// Initialize logger.
+  void _initializeLogger(void);
+
 // NOT IMPLEMENTED //////////////////////////////////////////////////////
 private :
 

Modified: short/3D/PyLith/trunk/libsrc/problems/SolverNonlinear.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/problems/SolverNonlinear.cc	2010-02-04 01:44:40 UTC (rev 16230)
+++ short/3D/PyLith/trunk/libsrc/problems/SolverNonlinear.cc	2010-02-04 19:29:24 UTC (rev 16231)
@@ -17,6 +17,7 @@
 #include "Formulation.hh" // USES Formulation
 #include "pylith/topology/SolutionFields.hh" // USES SolutionFields
 #include "pylith/topology/Jacobian.hh" // USES Jacobian
+#include "pylith/utils/EventLogger.hh" // USES EventLogger
 
 #include <petscsnes.h> // USES PetscSNES
 
@@ -66,6 +67,7 @@
 { // initialize
   assert(0 != formulation);
 
+  _initializeLogger();
   Solver::initialize(fields, jacobian, formulation);
 
   PetscErrorCode err = 0;
@@ -101,13 +103,21 @@
 { // solve
   assert(0 != solution);
 
+  const int solveEvent = _logger->eventId("SoLi solve");
+  const int scatterEvent = _logger->eventId("SoLi scatter");
+  _logger->eventBegin(solveEvent);
+
   PetscErrorCode err = 0;
-
   const PetscVec solutionVec = solution->vector();
   err = SNESSolve(_snes, PETSC_NULL, solutionVec); CHECK_PETSC_ERROR(err);
   
+  _logger->eventEnd(solveEvent);
+  _logger->eventBegin(scatterEvent);
+
   // Update section view of field.
   solution->scatterVectorToSection();
+
+  _logger->eventEnd(scatterEvent);
 } // solve
 
 // ----------------------------------------------------------------------
@@ -393,5 +403,19 @@
   PetscFunctionReturn(0);
 } // lineSearch
 
+// ----------------------------------------------------------------------
+// Initialize logger.
+void
+pylith::problems::SolverNonlinear::_initializeLogger(void)
+{ // initializeLogger
+  delete _logger; _logger = new utils::EventLogger;
+  assert(0 != _logger);
+  _logger->className("SolverNonlinear");
+  _logger->initialize();
+  _logger->registerEvent("SoNl setup");
+  _logger->registerEvent("SoNl solve");
+  _logger->registerEvent("SoNl scatter");
+} // initializeLogger
 
+
 // End of file

Modified: short/3D/PyLith/trunk/libsrc/problems/SolverNonlinear.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/problems/SolverNonlinear.hh	2010-02-04 01:44:40 UTC (rev 16230)
+++ short/3D/PyLith/trunk/libsrc/problems/SolverNonlinear.hh	2010-02-04 19:29:24 UTC (rev 16231)
@@ -135,6 +135,12 @@
 			    PetscReal *gnorm,
 			    PetscTruth *flag);
 
+// PRIVATE METHODS //////////////////////////////////////////////////////
+private :
+
+  /// Initialize logger.
+  void _initializeLogger(void);
+
 // PRIVATE MEMBERS //////////////////////////////////////////////////////
 private :
 



More information about the CIG-COMMITS mailing list