[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