[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