[cig-commits] r19929 - in short/3D/PyLith/branches/v1.7-trunk: . libsrc/pylith/meshio libsrc/pylith/topology

brad at geodynamics.org brad at geodynamics.org
Tue Apr 10 11:18:48 PDT 2012


Author: brad
Date: 2012-04-10 11:18:48 -0700 (Tue, 10 Apr 2012)
New Revision: 19929

Modified:
   short/3D/PyLith/branches/v1.7-trunk/TODO
   short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/meshio/DataWriterHDF5.cc
   short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/meshio/DataWriterHDF5Ext.cc
   short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/topology/Field.cc
   short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/topology/Field.hh
Log:
Merge from stable.

Modified: short/3D/PyLith/branches/v1.7-trunk/TODO
===================================================================
--- short/3D/PyLith/branches/v1.7-trunk/TODO	2012-04-10 17:58:35 UTC (rev 19928)
+++ short/3D/PyLith/branches/v1.7-trunk/TODO	2012-04-10 18:18:48 UTC (rev 19929)
@@ -15,10 +15,9 @@
 CURRENT ISSUES/PRIORITIES
 ======================================================================
 
-* Time steppers
+* FIATSimplex
+  cell.shape -> cell.dimension
 
-  Add initial start time (default is 0.0).
-
 * Manual
 
   - Order of tensor components for Xdmf files
@@ -34,7 +33,8 @@
     + Turned on by default
     + Static solution is linear prestep
     + Inelastic solution requires increment in driving forces
-  - User specified start time
+  - User specified start time (default is 0.0)
+  - PETSc w/CUDA
 
 * configure
   

Modified: short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/meshio/DataWriterHDF5.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/meshio/DataWriterHDF5.cc	2012-04-10 17:58:35 UTC (rev 19928)
+++ short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/meshio/DataWriterHDF5.cc	2012-04-10 18:18:48 UTC (rev 19929)
@@ -134,16 +134,9 @@
     coordinates.scatterSectionToVector(context);
     PetscVec coordinatesVector = coordinates.vector(context);
     assert(coordinatesVector);
-    int blockSize = 1;
-    err = VecGetBlockSize(coordinatesVector, &blockSize); // get block size
-    CHECK_PETSC_ERROR(err);
-    err = VecSetBlockSize(coordinatesVector, cs->spaceDim()); // bs for output
-    CHECK_PETSC_ERROR(err);
-    err = PetscViewerHDF5PushGroup(_viewer, "/geometry"); CHECK_PETSC_ERROR(err);
+    err = PetscViewerHDF5PushGroup(_viewer, "/geometry");CHECK_PETSC_ERROR(err);
     err = VecView(coordinatesVector, _viewer);CHECK_PETSC_ERROR(err);
     err = PetscViewerHDF5PopGroup(_viewer); CHECK_PETSC_ERROR(err);
-    err = VecSetBlockSize(coordinatesVector, blockSize); // reset block size
-    CHECK_PETSC_ERROR(err);
 
     // Account for censored cells
     int cellDepthLocal = (sieveMesh->depth() == -1) ? -1 : 1;
@@ -204,15 +197,14 @@
       } // if
 
     PetscVec elemVec;
-    err = VecCreateMPIWithArray(sieveMesh->comm(), conesSize, PETSC_DETERMINE,
-				tmpVertices, &elemVec); CHECK_PETSC_ERROR(err);
-    err = PetscObjectSetName((PetscObject) elemVec,
-			     "cells");CHECK_PETSC_ERROR(err);
-    err = PetscViewerHDF5PushGroup(_viewer, "/topology"); CHECK_PETSC_ERROR(err);
-    err = VecSetBlockSize(elemVec, numCorners); CHECK_PETSC_ERROR(err);
-    err = VecView(elemVec, _viewer); CHECK_PETSC_ERROR(err);
-    err = PetscViewerHDF5PopGroup(_viewer); CHECK_PETSC_ERROR(err);
-    err = VecDestroy(&elemVec); CHECK_PETSC_ERROR(err);
+    err = VecCreateMPIWithArray(sieveMesh->comm(), numCorners, conesSize, PETSC_DETERMINE,
+				tmpVertices, &elemVec);CHECK_PETSC_ERROR(err);
+    err = PetscObjectSetName((PetscObject) elemVec, "cells");CHECK_PETSC_ERROR(err);
+    err = PetscViewerHDF5PushGroup(_viewer, "/topology");CHECK_PETSC_ERROR(err);
+    err = VecSetBlockSize(elemVec, numCorners);CHECK_PETSC_ERROR(err);
+    err = VecView(elemVec, _viewer);CHECK_PETSC_ERROR(err);
+    err = PetscViewerHDF5PopGroup(_viewer);CHECK_PETSC_ERROR(err);
+    err = VecDestroy(&elemVec);CHECK_PETSC_ERROR(err);
     delete[] tmpVertices; tmpVertices = 0;
 
     hid_t h5 = -1;
@@ -297,21 +289,6 @@
     PetscVec vector = field.vector(context);
     assert(vector);
 
-    const ALE::Obj<typename mesh_type::RealSection>& section = field.section();
-    assert(!section.isNull());
-    const std::string labelName = 
-      (sieveMesh->hasLabel("censored depth")) ? "censored depth" : "depth";
-    assert(!sieveMesh->getLabelStratum(labelName, 0).isNull());
-    int fiberDimLocal = 
-      (sieveMesh->getLabelStratum(labelName, 0)->size() > 0) ? 
-      section->getFiberDimension(*sieveMesh->getLabelStratum(labelName, 0)->begin()) : 0;
-    int fiberDim = 0;
-    MPI_Allreduce(&fiberDimLocal, &fiberDim, 1, MPI_INT, MPI_MAX,
-		  field.mesh().comm());
-    assert(fiberDim > 0);
-
-    PetscErrorCode err = 0;
-
     if (_timesteps.find(field.label()) == _timesteps.end())
       _timesteps[field.label()] = 0;
     else
@@ -327,16 +304,11 @@
     VecView(vector, PETSC_VIEWER_STDOUT_WORLD);
 #endif
 
-    // Set temporary block size that matches fiber dimension for output.
-    int blockSize = 0;
-    err = VecGetBlockSize(vector, &blockSize); CHECK_PETSC_ERROR(err);
-    err = VecSetBlockSize(vector, fiberDim); CHECK_PETSC_ERROR(err);
-    err = PetscViewerHDF5PushGroup(_viewer, "/vertex_fields");
-    CHECK_PETSC_ERROR(err);
-    err = PetscViewerHDF5SetTimestep(_viewer, istep); CHECK_PETSC_ERROR(err);
-    err = VecView(vector, _viewer); CHECK_PETSC_ERROR(err);
-    err = PetscViewerHDF5PopGroup(_viewer); CHECK_PETSC_ERROR(err);
-    err = VecSetBlockSize(vector, blockSize); CHECK_PETSC_ERROR(err);
+    PetscErrorCode err = 0;
+    err = PetscViewerHDF5PushGroup(_viewer, "/vertex_fields");CHECK_PETSC_ERROR(err);
+    err = PetscViewerHDF5SetTimestep(_viewer, istep);CHECK_PETSC_ERROR(err);
+    err = VecView(vector, _viewer);CHECK_PETSC_ERROR(err);
+    err = PetscViewerHDF5PopGroup(_viewer);CHECK_PETSC_ERROR(err);
 
     if (0 == istep) {
       hid_t h5 = -1;
@@ -396,18 +368,7 @@
     field.scatterSectionToVector(context);
     PetscVec vector = field.vector(context);
     assert(vector);
-    const ALE::Obj<typename mesh_type::RealSection>& section = field.section();
-    assert(!section.isNull());      
-    assert(!sieveMesh->getLabelStratum(labelName, depth).isNull());
-    int fiberDimLocal = 
-      (sieveMesh->getLabelStratum(labelName, depth)->size() > 0) ? 
-      section->getFiberDimension(*sieveMesh->getLabelStratum(labelName, depth)->begin()) : 0;
-    int fiberDim = 0;
-    MPI_Allreduce(&fiberDimLocal, &fiberDim, 1, MPI_INT, MPI_MAX,
-		  field.mesh().comm());
-    assert(fiberDim > 0);
 
-    
     if (_timesteps.find(field.label()) == _timesteps.end())
       _timesteps[field.label()] = 0;
     else
@@ -418,16 +379,10 @@
     if (_tstampIndex == istep)
       _writeTimeStamp(t, rank);
 
-    // Set temporary block size that matches fiber dimension for output.
-    int blockSize = 0;
-    err = VecGetBlockSize(vector, &blockSize); CHECK_PETSC_ERROR(err);
-    err = VecSetBlockSize(vector, fiberDim); CHECK_PETSC_ERROR(err);
-    err = PetscViewerHDF5PushGroup(_viewer, "/cell_fields");
-    CHECK_PETSC_ERROR(err);
-    err = PetscViewerHDF5SetTimestep(_viewer, istep); CHECK_PETSC_ERROR(err);
-    err = VecView(vector, _viewer); CHECK_PETSC_ERROR(err);
-    err = PetscViewerHDF5PopGroup(_viewer); CHECK_PETSC_ERROR(err);
-    err = VecSetBlockSize(vector, blockSize); CHECK_PETSC_ERROR(err);
+    err = PetscViewerHDF5PushGroup(_viewer, "/cell_fields");CHECK_PETSC_ERROR(err);
+    err = PetscViewerHDF5SetTimestep(_viewer, istep);CHECK_PETSC_ERROR(err);
+    err = VecView(vector, _viewer);CHECK_PETSC_ERROR(err);
+    err = PetscViewerHDF5PopGroup(_viewer);CHECK_PETSC_ERROR(err);
 
     if (0 == istep) {
       hid_t h5 = -1;

Modified: short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/meshio/DataWriterHDF5Ext.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/meshio/DataWriterHDF5Ext.cc	2012-04-10 17:58:35 UTC (rev 19928)
+++ short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/meshio/DataWriterHDF5Ext.cc	2012-04-10 18:18:48 UTC (rev 19929)
@@ -222,7 +222,7 @@
       } // if
 
     PetscVec elemVec;
-    err = VecCreateMPIWithArray(sieveMesh->comm(), conesSize, PETSC_DETERMINE,
+    err = VecCreateMPIWithArray(sieveMesh->comm(), numCorners, conesSize, PETSC_DETERMINE,
 				tmpVertices, &elemVec); CHECK_PETSC_ERROR(err);
     err = PetscObjectSetName((PetscObject) elemVec,
 			     "cells");CHECK_PETSC_ERROR(err);

Modified: short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/topology/Field.cc
===================================================================
--- short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/topology/Field.cc	2012-04-10 17:58:35 UTC (rev 19928)
+++ short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/topology/Field.cc	2012-04-10 18:18:48 UTC (rev 19929)
@@ -364,14 +364,18 @@
 	CHECK_PETSC_ERROR(err);
       
 	// Create scatter Vec
+	assert(s_iter->second.scatterVec);
+	int blockSize = 1;
+	VecGetBlockSize(s_iter->second.scatterVec, &blockSize);
 	if (_section->sizeWithBC() > 0) {
 	  err = VecCreateSeqWithArray(PETSC_COMM_SELF,
-				      _section->getStorageSize(),
+				      blockSize, _section->getStorageSize(),
 				      _section->restrictSpace(),
 				      &sinfo.scatterVec);
 	  CHECK_PETSC_ERROR(err);
 	} else {
-	  err = VecCreateSeqWithArray(PETSC_COMM_SELF, 0, 0,
+	  err = VecCreateSeqWithArray(PETSC_COMM_SELF, 
+				      blockSize, 0, PETSC_NULL,
 				      &sinfo.scatterVec);
 	  CHECK_PETSC_ERROR(err);
 	} // else
@@ -379,15 +383,13 @@
 	// Create vector using sizes from source section
 	int vecLocalSize = 0;
 	int vecGlobalSize = 0;
-	err = VecGetLocalSize(s_iter->second.vector, &vecLocalSize); 
-	CHECK_PETSC_ERROR(err);
-	err = VecGetSize(s_iter->second.vector, &vecGlobalSize); CHECK_PETSC_ERROR(err);
+	err = VecGetLocalSize(s_iter->second.vector, &vecLocalSize);CHECK_PETSC_ERROR(err);
+	err = VecGetSize(s_iter->second.vector, &vecGlobalSize);CHECK_PETSC_ERROR(err);
 
-	err = VecCreate(_mesh.comm(), &sinfo.vector); CHECK_PETSC_ERROR(err);
-	err = PetscObjectSetName((PetscObject)sinfo.vector, _metadata.label.c_str());
-	CHECK_PETSC_ERROR(err);
-	err = VecSetSizes(sinfo.vector, vecLocalSize, vecGlobalSize); 
-	CHECK_PETSC_ERROR(err);
+	err = VecCreate(_mesh.comm(), &sinfo.vector);CHECK_PETSC_ERROR(err);
+	err = PetscObjectSetName((PetscObject)sinfo.vector, _metadata.label.c_str());CHECK_PETSC_ERROR(err);
+	err = VecSetSizes(sinfo.vector, vecLocalSize, vecGlobalSize);CHECK_PETSC_ERROR(err);
+	err = VecSetBlockSize(sinfo.vector, blockSize);CHECK_PETSC_ERROR(err);
 	err = VecSetFromOptions(sinfo.vector); CHECK_PETSC_ERROR(err);  
 	
 	_scatters[s_iter->first] = sinfo;
@@ -775,25 +777,27 @@
   CHECK_PETSC_ERROR(err);
   
   // Create scatterVec
-  if (_section->sizeWithBC() > 0)  {
-    err = VecCreateSeqWithArray(PETSC_COMM_SELF, _section->getStorageSize(),
+  const int blockSize = 1;
+  if (_section->sizeWithBC() > 0) {
+    err = VecCreateSeqWithArray(PETSC_COMM_SELF,
+				blockSize, _section->getStorageSize(),
 				_section->restrictSpace(),
-				&sinfo.scatterVec); CHECK_PETSC_ERROR(err);
+				&sinfo.scatterVec);CHECK_PETSC_ERROR(err);
   } else {
-    err = VecCreateSeqWithArray(PETSC_COMM_SELF, 0, 0,
-				&sinfo.scatterVec); CHECK_PETSC_ERROR(err);
-  } // if/else
+    err = VecCreateSeqWithArray(PETSC_COMM_SELF, 
+				blockSize, 0, PETSC_NULL,
+				&sinfo.scatterVec);CHECK_PETSC_ERROR(err);
+  } // else
 
   // Create vector
   err = VecCreate(_mesh.comm(), &sinfo.vector);
   CHECK_PETSC_ERROR(err);
   err = PetscObjectSetName((PetscObject)sinfo.vector,
-			   _metadata.label.c_str());
-  CHECK_PETSC_ERROR(err);
+			   _metadata.label.c_str());CHECK_PETSC_ERROR(err);
   err = VecSetSizes(sinfo.vector,
-		    order->getLocalSize(), order->getGlobalSize());
-  CHECK_PETSC_ERROR(err);
-  err = VecSetFromOptions(sinfo.vector); CHECK_PETSC_ERROR(err);  
+		    order->getLocalSize(), order->getGlobalSize());CHECK_PETSC_ERROR(err);
+  err = VecSetBlockSize(sinfo.vector, blockSize);CHECK_PETSC_ERROR(err);
+  err = VecSetFromOptions(sinfo.vector);CHECK_PETSC_ERROR(err);  
   
   logger.stagePop();
 } // createScatter
@@ -852,24 +856,25 @@
   CHECK_PETSC_ERROR(err);
 
   // Create scatterVec
-  if (_section->sizeWithBC() > 0)  {
-    err = VecCreateSeqWithArray(PETSC_COMM_SELF, _section->getStorageSize(),
+  const int blockSize = 1;
+  if (_section->sizeWithBC() > 0) {
+    err = VecCreateSeqWithArray(PETSC_COMM_SELF,
+				blockSize, _section->getStorageSize(),
 				_section->restrictSpace(),
-				&sinfo.scatterVec); CHECK_PETSC_ERROR(err);
+				&sinfo.scatterVec);CHECK_PETSC_ERROR(err);
   } else {
-    err = VecCreateSeqWithArray(PETSC_COMM_SELF, 0, 0,
-				&sinfo.scatterVec); CHECK_PETSC_ERROR(err);
-  } // if/else
+    err = VecCreateSeqWithArray(PETSC_COMM_SELF, 
+				blockSize, 0, PETSC_NULL,
+				&sinfo.scatterVec);CHECK_PETSC_ERROR(err);
+  } // else
 
   // Create vector
-  err = VecCreate(mesh.comm(), &sinfo.vector);
-  CHECK_PETSC_ERROR(err);
+  err = VecCreate(mesh.comm(), &sinfo.vector);CHECK_PETSC_ERROR(err);
   err = PetscObjectSetName((PetscObject)sinfo.vector,
-			   _metadata.label.c_str());
-  CHECK_PETSC_ERROR(err);
+			   _metadata.label.c_str());CHECK_PETSC_ERROR(err);
   err = VecSetSizes(sinfo.vector,
-		    order->getLocalSize(), order->getGlobalSize());
-  CHECK_PETSC_ERROR(err);
+		    order->getLocalSize(), order->getGlobalSize());CHECK_PETSC_ERROR(err);
+  err = VecSetBlockSize(sinfo.vector, blockSize);CHECK_PETSC_ERROR(err);
   err = VecSetFromOptions(sinfo.vector); CHECK_PETSC_ERROR(err);  
 
 #if 0
@@ -931,24 +936,23 @@
   CHECK_PETSC_ERROR(err);
   
   // Create scatterVec
-  if (_section->sizeWithBC() > 0)  {
-    err = VecCreateSeqWithArray(PETSC_COMM_SELF, _section->getStorageSize(),
+  const int blockSize = _getFiberDim();
+  if (_section->sizeWithBC() > 0) {
+    err = VecCreateSeqWithArray(PETSC_COMM_SELF,
+				blockSize, _section->getStorageSize(),
 				_section->restrictSpace(),
-				&sinfo.scatterVec); CHECK_PETSC_ERROR(err);
+				&sinfo.scatterVec);CHECK_PETSC_ERROR(err);
   } else {
-    err = VecCreateSeqWithArray(PETSC_COMM_SELF, 0, 0,
-				&sinfo.scatterVec); CHECK_PETSC_ERROR(err);
-  } // if/else
+    err = VecCreateSeqWithArray(PETSC_COMM_SELF, 
+				blockSize, 0, PETSC_NULL,
+				&sinfo.scatterVec);CHECK_PETSC_ERROR(err);
+  } // else
   
   // Create vector
-   err = VecCreate(mesh.comm(), &sinfo.vector);
-  CHECK_PETSC_ERROR(err);
-  err = PetscObjectSetName((PetscObject)sinfo.vector,
-			   _metadata.label.c_str());
-  CHECK_PETSC_ERROR(err);
-  err = VecSetSizes(sinfo.vector,
-		    order->getLocalSize(), order->getGlobalSize());
-  CHECK_PETSC_ERROR(err);
+  err = VecCreate(mesh.comm(), &sinfo.vector);CHECK_PETSC_ERROR(err);
+  err = PetscObjectSetName((PetscObject)sinfo.vector, _metadata.label.c_str());CHECK_PETSC_ERROR(err);
+  err = VecSetSizes(sinfo.vector, order->getLocalSize(), order->getGlobalSize());CHECK_PETSC_ERROR(err);
+  err = VecSetBlockSize(sinfo.vector, blockSize);CHECK_PETSC_ERROR(err);
   err = VecSetFromOptions(sinfo.vector); CHECK_PETSC_ERROR(err);  
   
   logger.stagePop();
@@ -1008,24 +1012,23 @@
   CHECK_PETSC_ERROR(err);
 
   // Create scatterVec
-  if (_section->sizeWithBC() > 0)  {
-    err = VecCreateSeqWithArray(PETSC_COMM_SELF, _section->getStorageSize(),
+  const int blockSize = _getFiberDim();
+  if (_section->sizeWithBC() > 0) {
+    err = VecCreateSeqWithArray(PETSC_COMM_SELF,
+				blockSize, _section->getStorageSize(),
 				_section->restrictSpace(),
-				&sinfo.scatterVec); CHECK_PETSC_ERROR(err);
+				&sinfo.scatterVec);CHECK_PETSC_ERROR(err);
   } else {
-    err = VecCreateSeqWithArray(PETSC_COMM_SELF, 0, 0,
-				&sinfo.scatterVec); CHECK_PETSC_ERROR(err);
-  } // if/else
+    err = VecCreateSeqWithArray(PETSC_COMM_SELF, 
+				blockSize, 0, PETSC_NULL,
+				&sinfo.scatterVec);CHECK_PETSC_ERROR(err);
+  } // else
 
   // Create vector
-  err = VecCreate(mesh.comm(), &sinfo.vector);
-  CHECK_PETSC_ERROR(err);
-  err = PetscObjectSetName((PetscObject)sinfo.vector,
-			   _metadata.label.c_str());
-  CHECK_PETSC_ERROR(err);
-  err = VecSetSizes(sinfo.vector,
-		    order->getLocalSize(), order->getGlobalSize());
-  CHECK_PETSC_ERROR(err);
+  err = VecCreate(mesh.comm(), &sinfo.vector);CHECK_PETSC_ERROR(err);
+  err = PetscObjectSetName((PetscObject)sinfo.vector, _metadata.label.c_str());CHECK_PETSC_ERROR(err);
+  err = VecSetSizes(sinfo.vector,order->getLocalSize(), order->getGlobalSize());CHECK_PETSC_ERROR(err);
+  err = VecSetBlockSize(sinfo.vector, blockSize);CHECK_PETSC_ERROR(err);
   err = VecSetFromOptions(sinfo.vector); CHECK_PETSC_ERROR(err);  
 
 #if 0
@@ -1159,6 +1162,22 @@
 } // splitDefault
 
 // ----------------------------------------------------------------------
+// Get fiber dimension associated with section (only works if fiber
+// dimension is uniform).
+template<typename mesh_type, typename section_type>
+int
+pylith::topology::Field<mesh_type, section_type>::_getFiberDim(void)
+{ // _getFiberDim
+  
+  int fiberDimLocal = (this->chartSize() > 0) ? _section->getFiberDimension(*_section->getChart().begin()) : 0;
+  int fiberDim = 0;
+  MPI_Allreduce(&fiberDimLocal, &fiberDim, 1, MPI_INT, MPI_MAX,
+		_mesh.comm());
+
+  return fiberDim;
+} // _getFiberDim
+
+// ----------------------------------------------------------------------
 // Get scatter for given context.
 template<typename mesh_type, typename section_type>
 typename pylith::topology::Field<mesh_type, section_type>::ScatterInfo&

Modified: short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/topology/Field.hh
===================================================================
--- short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/topology/Field.hh	2012-04-10 17:58:35 UTC (rev 19928)
+++ short/3D/PyLith/branches/v1.7-trunk/libsrc/pylith/topology/Field.hh	2012-04-10 18:18:48 UTC (rev 19929)
@@ -392,6 +392,14 @@
 // PRIVATE METHODS //////////////////////////////////////////////////////
 private :
 
+  /** Get fiber dimension associated with section (only works if fiber
+   * dimension is uniform).
+   *
+   * Fiber dimension is determined from the first point on each
+   * processor with the maximum value gathered across the processors.
+   */
+  int _getFiberDim(void);
+
   /** Get scatter for given context.
    *
    * @param context Context for scatter.



More information about the CIG-COMMITS mailing list