[cig-commits] [commit] knepley/upgrade-petsc-interface: Clean up of refinement (fix memory leak). (0de634f)
cig_noreply at geodynamics.org
cig_noreply at geodynamics.org
Fri Nov 22 12:18:24 PST 2013
Repository : ssh://geoshell/pylith
On branch : knepley/upgrade-petsc-interface
Link : https://github.com/geodynamics/pylith/compare/7f05bb78e08828b094f5f86f3bf5808774dc2591...0de634fa7e9338451f19d5aa3cb546c2c0e3484c
>---------------------------------------------------------------
commit 0de634fa7e9338451f19d5aa3cb546c2c0e3484c
Author: Brad Aagaard <baagaard at usgs.gov>
Date: Fri Nov 22 12:21:08 2013 -0800
Clean up of refinement (fix memory leak).
Fix several bugs related with uniform refinement. Fix memory leak (don't
create PetscDM) and recursive refinement.
>---------------------------------------------------------------
0de634fa7e9338451f19d5aa3cb546c2c0e3484c
libsrc/pylith/topology/RefineUniform.cc | 19 ++++++++++++++-----
pylith/topology/MeshImporter.py | 2 ++
pylith/topology/RefineUniform.py | 11 ++---------
unittests/libtests/topology/test_topology.cc | 2 +-
4 files changed, 19 insertions(+), 15 deletions(-)
diff --git a/libsrc/pylith/topology/RefineUniform.cc b/libsrc/pylith/topology/RefineUniform.cc
index 157134d..ae0e816 100644
--- a/libsrc/pylith/topology/RefineUniform.cc
+++ b/libsrc/pylith/topology/RefineUniform.cc
@@ -56,12 +56,14 @@ pylith::topology::RefineUniform::refine(Mesh* const newMesh,
{ // refine
PYLITH_METHOD_BEGIN;
+ if (levels < 1) {
+ PYLITH_METHOD_END;
+ } // if
+
assert(newMesh);
PetscErrorCode err;
-
- PetscDM dmNew = newMesh->dmMesh();
- PetscDM dmOrig = mesh.dmMesh();
+ PetscDM dmOrig = mesh.dmMesh();assert(dmOrig);
PetscInt meshDepth = 0;
err = DMPlexGetDepth(dmOrig, &meshDepth);
@@ -74,10 +76,17 @@ pylith::topology::RefineUniform::refine(Mesh* const newMesh,
throw std::runtime_error(msg.str());
} // if
+ // Refine, keeping original mesh intact.
+ PetscDM dmNew = NULL;
err = DMPlexSetRefinementUniform(dmOrig, PETSC_TRUE);PYLITH_CHECK_ERROR(err);
+ err = DMRefine(dmOrig, mesh.comm(), &dmNew);PYLITH_CHECK_ERROR(err);
+
+ for (int i=1; i < levels; ++i) {
+ PetscDM dmCur = dmNew; dmNew = NULL;
+ err = DMPlexSetRefinementUniform(dmCur, PETSC_TRUE);PYLITH_CHECK_ERROR(err);
+ err = DMRefine(dmCur, mesh.comm(), &dmNew);PYLITH_CHECK_ERROR(err);
- for (int i=0; i < levels; ++i) {
- err = DMRefine(dmOrig, mesh.comm(), &dmNew);PYLITH_CHECK_ERROR(err);
+ err = DMDestroy(&dmCur);PYLITH_CHECK_ERROR(err);
} // for
newMesh->dmMesh(dmNew);
diff --git a/pylith/topology/MeshImporter.py b/pylith/topology/MeshImporter.py
index 0498c80..befbacc 100644
--- a/pylith/topology/MeshImporter.py
+++ b/pylith/topology/MeshImporter.py
@@ -129,6 +129,8 @@ class MeshImporter(MeshGenerator):
mesh.memLoggingStage = "DistributedMesh"
# Refine mesh (if necessary)
+ if 0 == comm.rank:
+ self._info.log("Refining mesh.")
newMesh = self.refiner.refine(mesh)
if not newMesh == mesh:
mesh.cleanup()
diff --git a/pylith/topology/RefineUniform.py b/pylith/topology/RefineUniform.py
index 690ca6a..92a97a3 100644
--- a/pylith/topology/RefineUniform.py
+++ b/pylith/topology/RefineUniform.py
@@ -61,19 +61,12 @@ class RefineUniform(MeshRefiner, ModuleRefineUniform):
logEvent = "%srefine" % self._loggingPrefix
self._eventLogger.eventBegin(logEvent)
- newMesh = mesh
from Mesh import Mesh
- newMesh = Mesh(dim=mesh.dimension(), comm=mesh.comm())
+ newMesh = Mesh()
newMesh.debug(mesh.debug())
newMesh.coordsys(mesh.coordsys())
ModuleRefineUniform.refine(self, newMesh, mesh, self.levels)
- if not newMesh == mesh:
- #from pylith.utils.petsc import MemoryLogger
- #memoryLogger = MemoryLogger.singleton()
-
- #memoryLogger.stagePush(mesh.memLoggingStage)
- mesh.cleanup()
- #memoryLogger.stagePop()
+ mesh.cleanup()
self._eventLogger.eventEnd(logEvent)
return newMesh
diff --git a/unittests/libtests/topology/test_topology.cc b/unittests/libtests/topology/test_topology.cc
index c0a47fb..7883469 100644
--- a/unittests/libtests/topology/test_topology.cc
+++ b/unittests/libtests/topology/test_topology.cc
@@ -32,7 +32,7 @@
#include <stdlib.h> // USES abort()
-//#define MALLOC_DUMP
+#define MALLOC_DUMP
int
main(int argc,
More information about the CIG-COMMITS
mailing list