[cig-commits] r15602 - short/3D/PyLith/trunk/libsrc/topology

brad at geodynamics.org brad at geodynamics.org
Wed Aug 26 17:32:43 PDT 2009


Author: brad
Date: 2009-08-26 17:32:43 -0700 (Wed, 26 Aug 2009)
New Revision: 15602

Modified:
   short/3D/PyLith/trunk/libsrc/topology/Field.cc
   short/3D/PyLith/trunk/libsrc/topology/Field.hh
Log:
Revert push with bug (elimination of local PETSC vector in scatter).

Modified: short/3D/PyLith/trunk/libsrc/topology/Field.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/topology/Field.cc	2009-08-27 00:26:06 UTC (rev 15601)
+++ short/3D/PyLith/trunk/libsrc/topology/Field.cc	2009-08-27 00:32:43 UTC (rev 15602)
@@ -33,7 +33,6 @@
   _mesh(mesh),
   _vector(0),
   _scatter(0),
-  _scatterVec(0),
   _vecFieldType(OTHER),
   _dimensionsOkay(false)
 { // constructor
@@ -63,11 +62,6 @@
     err = VecScatterDestroy(_scatter); _scatter = 0;
     CHECK_PETSC_ERROR(err);
   } // if
-
-  if (0 != _scatterVec) {
-    err = VecDestroy(_scatterVec); _scatterVec = 0;
-    CHECK_PETSC_ERROR(err);
-  } // if
 } // deallocate
 
 // ----------------------------------------------------------------------
@@ -256,8 +250,6 @@
   ALE::MemoryLogger& logger = ALE::MemoryLogger::singleton();
   //std::cout << "Making Field " << _label << " section type 3" << std::endl;
   logger.stagePush("Field");
-
-  deallocate();
   _vecFieldType = src._vecFieldType;
   _scale = src._scale;
   _dimensionsOkay = false;
@@ -275,14 +267,10 @@
     _section->setBC(srcSection->getBC());
     _section->copyFibration(srcSection);
 
-    PetscErrorCode err = 0;
     if (0 != src._scatter) {
       _scatter = src._scatter;
-      err = PetscObjectReference((PetscObject) _scatter);
+      PetscErrorCode err = PetscObjectReference((PetscObject) _scatter);
       CHECK_PETSC_ERROR(err);
-      _scatterVec = src._scatterVec;
-      err = PetscObjectReference((PetscObject) _scatterVec);
-      CHECK_PETSC_ERROR(err);
     } // if
   } // if
   logger.stagePop();
@@ -666,17 +654,9 @@
     err = VecScatterDestroy(_scatter); _scatter = 0;
     CHECK_PETSC_ERROR(err);
   } // if
+
   err = MeshCreateGlobalScatter(_mesh.sieveMesh(), _section, &_scatter);
   CHECK_PETSC_ERROR(err);
-
-  if (0 != _scatterVec) {
-    err = VecDestroy(_scatterVec); _scatterVec = 0;
-    CHECK_PETSC_ERROR(err);
-  } // if
-  assert(_section->sizeWithBC() > 0);
-  err = VecCreateSeqWithArray(PETSC_COMM_SELF,
-			      _section->sizeWithBC(), _section->restrictSpace(),
-			      &_scatterVec); CHECK_PETSC_ERROR(err);
 } // createScatter
 
 // ----------------------------------------------------------------------
@@ -700,14 +680,18 @@
 { // scatterSectionToVector
   assert(!_section.isNull());
   assert(0 != _scatter);
-  assert(0 != _scatterVec);
   assert(0 != vector);
 
   PetscErrorCode err = 0;
-  err = VecScatterBegin(_scatter, _scatterVec, vector,
+  PetscVec localVec = 0;
+  err = VecCreateSeqWithArray(PETSC_COMM_SELF,
+			      _section->sizeWithBC(), _section->restrictSpace(),
+			      &localVec); CHECK_PETSC_ERROR(err);
+  err = VecScatterBegin(_scatter, localVec, vector,
 			INSERT_VALUES, SCATTER_FORWARD); CHECK_PETSC_ERROR(err);
-  err = VecScatterEnd(_scatter, _scatterVec, vector,
+  err = VecScatterEnd(_scatter, localVec, vector,
 		      INSERT_VALUES, SCATTER_FORWARD); CHECK_PETSC_ERROR(err);
+  err = VecDestroy(localVec); CHECK_PETSC_ERROR(err);
 } // scatterSectionToVector
 
 // ----------------------------------------------------------------------
@@ -731,14 +715,18 @@
 { // scatterVectorToSection
   assert(!_section.isNull());
   assert(0 != _scatter);
-  assert(0 != _scatterVec);
   assert(0 != vector);
 
   PetscErrorCode err = 0;
-  err = VecScatterBegin(_scatter, vector, _scatterVec,
+  PetscVec localVec = 0;
+  err = VecCreateSeqWithArray(PETSC_COMM_SELF,
+			      _section->sizeWithBC(), _section->restrictSpace(),
+			      &localVec); CHECK_PETSC_ERROR(err);
+  err = VecScatterBegin(_scatter, vector, localVec,
 			INSERT_VALUES, SCATTER_REVERSE); CHECK_PETSC_ERROR(err);
-  err = VecScatterEnd(_scatter, vector, _scatterVec,
+  err = VecScatterEnd(_scatter, vector, localVec,
 		      INSERT_VALUES, SCATTER_REVERSE); CHECK_PETSC_ERROR(err);
+  err = VecDestroy(localVec); CHECK_PETSC_ERROR(err);
 } // scatterVectorToSection
 
 // ----------------------------------------------------------------------

Modified: short/3D/PyLith/trunk/libsrc/topology/Field.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/topology/Field.hh	2009-08-27 00:26:06 UTC (rev 15601)
+++ short/3D/PyLith/trunk/libsrc/topology/Field.hh	2009-08-27 00:32:43 UTC (rev 15602)
@@ -291,7 +291,6 @@
   ALE::Obj<RealSection> _section; ///< Real section with data.
   PetscVec _vector; ///< PETSc vector associated with field.
   PetscVecScatter _scatter; ///< PETSc scatter associated with field.
-  PetscVec _scatterVec; ///< PETSC vector used in scattering.
   VectorFieldEnum _vecFieldType; ///< Type of vector field.
   bool _dimensionsOkay; ///< Flag indicating it is okay to dimensionalize.
 



More information about the CIG-COMMITS mailing list