[cig-commits] [commit] knepley/fix-fault-pc-multiple: Fixed a couple small bugs related to memory management of the sub DM in Field. (2e7ca52)

cig_noreply at geodynamics.org cig_noreply at geodynamics.org
Mon Oct 27 14:12:50 PDT 2014


Repository : https://github.com/geodynamics/pylith

On branch  : knepley/fix-fault-pc-multiple
Link       : https://github.com/geodynamics/pylith/compare/54aff19a1d46eee6cb723fdc638b37004cee20ce...2e7ca5277d3dc9a54bdc53050783652d0216976b

>---------------------------------------------------------------

commit 2e7ca5277d3dc9a54bdc53050783652d0216976b
Author: Brad Aagaard <baagaard at usgs.gov>
Date:   Mon Oct 27 14:09:58 2014 -0700

    Fixed a couple small bugs related to memory management of the sub DM in Field.


>---------------------------------------------------------------

2e7ca5277d3dc9a54bdc53050783652d0216976b
 libsrc/pylith/faults/FaultCohesiveLagrange.cc |  2 --
 libsrc/pylith/topology/Field.cc               | 15 +++++++++------
 2 files changed, 9 insertions(+), 8 deletions(-)

diff --git a/libsrc/pylith/faults/FaultCohesiveLagrange.cc b/libsrc/pylith/faults/FaultCohesiveLagrange.cc
index 2176915..6b4d779 100644
--- a/libsrc/pylith/faults/FaultCohesiveLagrange.cc
+++ b/libsrc/pylith/faults/FaultCohesiveLagrange.cc
@@ -762,8 +762,6 @@ pylith::faults::FaultCohesiveLagrange::calcPreconditioner(PetscMat* const precon
   err = MatDestroy(&jacobianNP);PYLITH_CHECK_ERROR(err);
   PetscLogFlops(numVertices*spaceDim*6);
 
-  err = DMDestroy(&lagrangeDM);PYLITH_CHECK_ERROR(err);
-
 #if !defined(DETAILED_EVENT_LOGGING)
     _logger->eventEnd(computeEvent);
 #endif
diff --git a/libsrc/pylith/topology/Field.cc b/libsrc/pylith/topology/Field.cc
index a6cd26e..788dc98 100644
--- a/libsrc/pylith/topology/Field.cc
+++ b/libsrc/pylith/topology/Field.cc
@@ -543,9 +543,11 @@ pylith::topology::Field::cloneSection(const Field& src)
   err = PetscObjectSetName((PetscObject) _localVec,  _metadata.label.c_str());PYLITH_CHECK_ERROR(err);
     
   // Reuse scatters in clone
+  _scatters.clear();
   const scatter_map_type::const_iterator scattersEnd = src._scatters.end();
   for (scatter_map_type::const_iterator s_iter=src._scatters.begin(); s_iter != scattersEnd; ++s_iter) {
-    ScatterInfo sinfo;
+    ScatterInfo& sinfo = _scatters[s_iter->first];
+    sinfo.dm = 0;
     sinfo.vector = 0;
 
     // Copy DM
@@ -563,18 +565,19 @@ pylith::topology::Field::cloneSection(const Field& src)
       err = PetscObjectReference((PetscObject) sinfo.vector);PYLITH_CHECK_ERROR(err);
     } // if/else
     err = PetscObjectSetName((PetscObject)sinfo.vector, _metadata.label.c_str());PYLITH_CHECK_ERROR(err);
-    
-    _scatters[s_iter->first] = sinfo;
   } // for
 
   // Reuse subfields in clone
+  _subfields.clear();
   const subfields_type::const_iterator subfieldsEnd = src._subfields.end();
   for (subfields_type::const_iterator s_iter=src._subfields.begin(); s_iter != subfieldsEnd; ++s_iter) {
-    SubfieldInfo sinfo = s_iter->second;
+    SubfieldInfo& sinfo = _subfields[s_iter->first];
+    sinfo.metadata = s_iter->second.metadata;
+    sinfo.index = s_iter->second.index;
+    sinfo.dm = s_iter->second.dm;
     if (sinfo.dm) {
       err = PetscObjectReference((PetscObject) sinfo.dm);PYLITH_CHECK_ERROR(err);
     } // if
-    _subfields[s_iter->first] = sinfo;
   } // for
 
   PYLITH_METHOD_END;
@@ -746,7 +749,7 @@ pylith::topology::Field::copy(const Field& field)
   PetscErrorCode err = VecCopy(field._localVec, _localVec);PYLITH_CHECK_ERROR(err);
 
   // Update metadata
-  _metadata.label = field._metadata.label;
+  label(field._metadata.label.c_str());
   _metadata.vectorFieldType = field._metadata.vectorFieldType;
   _metadata.scale = field._metadata.scale;
 



More information about the CIG-COMMITS mailing list