[cig-commits] r21360 - in short/3D/PyLith/trunk/libsrc/pylith: faults meshio problems topology

knepley at geodynamics.org knepley at geodynamics.org
Tue Feb 12 16:31:10 PST 2013


Author: knepley
Date: 2013-02-12 16:31:10 -0800 (Tue, 12 Feb 2013)
New Revision: 21360

Modified:
   short/3D/PyLith/trunk/libsrc/pylith/faults/CohesiveTopology.cc
   short/3D/PyLith/trunk/libsrc/pylith/faults/FaultCohesiveImpulses.cc
   short/3D/PyLith/trunk/libsrc/pylith/faults/FaultCohesiveLagrange.cc
   short/3D/PyLith/trunk/libsrc/pylith/meshio/DataWriterHDF5Ext.cc
   short/3D/PyLith/trunk/libsrc/pylith/meshio/OutputSolnPoints.cc
   short/3D/PyLith/trunk/libsrc/pylith/problems/Solver.cc
   short/3D/PyLith/trunk/libsrc/pylith/topology/Field.cc
Log:
Fixed PetscObject problems, Fix exclusions in surface VecScatter

Modified: short/3D/PyLith/trunk/libsrc/pylith/faults/CohesiveTopology.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/pylith/faults/CohesiveTopology.cc	2013-02-12 14:44:14 UTC (rev 21359)
+++ short/3D/PyLith/trunk/libsrc/pylith/faults/CohesiveTopology.cc	2013-02-13 00:31:10 UTC (rev 21360)
@@ -867,7 +867,7 @@
 #ifdef USE_DMCOMPLEX_ON
   err = PetscSectionSetUp(newCoordSection);CHECK_PETSC_ERROR(err);
   err = PetscSectionGetStorageSize(newCoordSection, &coordSize);CHECK_PETSC_ERROR(err);
-  err = VecCreate(((PetscObject) newMesh)->comm, &newCoordinatesVec);CHECK_PETSC_ERROR(err);
+  err = VecCreate(mesh->comm(), &newCoordinatesVec);CHECK_PETSC_ERROR(err);
   err = VecSetSizes(newCoordinatesVec, coordSize, PETSC_DETERMINE);CHECK_PETSC_ERROR(err);
   err = VecSetFromOptions(newCoordinatesVec);CHECK_PETSC_ERROR(err);
   err = VecGetArray(coordinatesVec, &coords);CHECK_PETSC_ERROR(err);

Modified: short/3D/PyLith/trunk/libsrc/pylith/faults/FaultCohesiveImpulses.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/pylith/faults/FaultCohesiveImpulses.cc	2013-02-12 14:44:14 UTC (rev 21359)
+++ short/3D/PyLith/trunk/libsrc/pylith/faults/FaultCohesiveImpulses.cc	2013-02-13 00:31:10 UTC (rev 21360)
@@ -389,8 +389,9 @@
 
   // Gather number of points on each processor.
   const int numImpulsesLocal = pointOrder.size();
-  MPI_Comm    comm = ((PetscObject) faultDMMesh)->comm;
+  MPI_Comm    comm;
   PetscMPIInt commSize, commRank;
+  err = PetscObjectGetComm((PetscObject) faultDMMesh, &comm);CHECK_PETSC_ERROR(err);
   err = MPI_Comm_size(comm, &commSize);CHECK_PETSC_ERROR(err);
   err = MPI_Comm_rank(comm, &commRank);CHECK_PETSC_ERROR(err);
   int_array numImpulsesAll(commSize);

Modified: short/3D/PyLith/trunk/libsrc/pylith/faults/FaultCohesiveLagrange.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/pylith/faults/FaultCohesiveLagrange.cc	2013-02-12 14:44:14 UTC (rev 21359)
+++ short/3D/PyLith/trunk/libsrc/pylith/faults/FaultCohesiveLagrange.cc	2013-02-13 00:31:10 UTC (rev 21360)
@@ -1367,11 +1367,13 @@
     up[i] = upDir[i];
 
   // Get vertices in fault mesh.
+  MPI_Comm       comm;
   DM             faultDMMesh = _faultMesh->dmMesh();
   PetscInt       vStart, vEnd, cStart, cEnd;
   PetscErrorCode err;
 
   assert(faultDMMesh);
+  err = PetscObjectGetComm((PetscObject) faultDMMesh, &comm);CHECK_PETSC_ERROR(err);
   err = DMPlexGetDepthStratum(faultDMMesh, 0, &vStart, &vEnd);CHECK_PETSC_ERROR(err);
   err = DMPlexGetHeightStratum(faultDMMesh, 0, &cStart, &cEnd);CHECK_PETSC_ERROR(err);
 
@@ -1545,7 +1547,7 @@
     } // if
     // Collect flip decisions across all processors
     int flipGlobal = 0;
-   MPI_Allreduce(&flipLocal, &flipGlobal, 1, MPI_INT, MPI_SUM, ((PetscObject) faultDMMesh)->comm);
+   MPI_Allreduce(&flipLocal, &flipGlobal, 1, MPI_INT, MPI_SUM, comm);
 
     const int ishear = 0;
     const int inormal = 2;
@@ -1616,7 +1618,7 @@
 
     // Collect flip decisions across all processors
     int flipGlobal = 0;
-    MPI_Allreduce(&flipLocal, &flipGlobal, 1, MPI_INT, MPI_SUM, ((PetscObject) faultDMMesh)->comm);
+    MPI_Allreduce(&flipLocal, &flipGlobal, 1, MPI_INT, MPI_SUM, comm);
 
     const int istrike = 0;
     const int idip = 3;
@@ -2003,7 +2005,8 @@
 
     MPI_Comm    comm;
     PetscMPIInt rank;
-    err = MPI_Comm_rank(((PetscObject) faultDMMesh)->comm, &rank);CHECK_PETSC_ERROR(err);
+    err = PetscObjectGetComm((PetscObject) faultDMMesh, &comm);CHECK_PETSC_ERROR(err);
+    err = MPI_Comm_rank(comm, &rank);CHECK_PETSC_ERROR(err);
     // Loop over cells in fault mesh, set partition
     err = VecGetArray(partitionVec, &partitionArray);CHECK_PETSC_ERROR(err);
     for(PetscInt c = cStart; c < cEnd; ++c) {

Modified: short/3D/PyLith/trunk/libsrc/pylith/meshio/DataWriterHDF5Ext.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/pylith/meshio/DataWriterHDF5Ext.cc	2013-02-12 14:44:14 UTC (rev 21359)
+++ short/3D/PyLith/trunk/libsrc/pylith/meshio/DataWriterHDF5Ext.cc	2013-02-13 00:31:10 UTC (rev 21360)
@@ -96,9 +96,11 @@
 
     DM dmMesh = mesh.dmMesh();
     assert(dmMesh);
+    MPI_Comm       comm;
     PetscMPIInt    commRank;
-    PetscErrorCode err = MPI_Comm_rank(((PetscObject) dmMesh)->comm, &commRank);CHECK_PETSC_ERROR(err);
+    PetscErrorCode err = PetscObjectGetComm((PetscObject) dmMesh, &comm);CHECK_PETSC_ERROR(err);
 
+    err = MPI_Comm_rank(comm, &commRank);CHECK_PETSC_ERROR(err);
     if (!commRank) {
       _h5->open(_hdf5Filename().c_str(), H5F_ACC_TRUNC);
 
@@ -155,13 +157,13 @@
       err = PetscSectionGetDof(coordSection, vertex, &dimLocal);CHECK_PETSC_ERROR(err);
       if (dimLocal) break;
     }
-    err = MPI_Allreduce(&dimLocal, &dim, 1, MPIU_INT, MPI_MAX, mesh.comm());CHECK_PETSC_ERROR(err);
+    err = MPI_Allreduce(&dimLocal, &dim, 1, MPIU_INT, MPI_MAX, comm);CHECK_PETSC_ERROR(err);
     verticesSize = vEnd - vStart;
 
     PetscVec     coordVec;
     PetscScalar *coords, *c;
 
-    err = VecCreate(mesh.comm(), &coordVec);CHECK_PETSC_ERROR(err);
+    err = VecCreate(comm, &coordVec);CHECK_PETSC_ERROR(err);
     err = VecSetSizes(coordVec, verticesSize*dim, PETSC_DETERMINE);CHECK_PETSC_ERROR(err);
     err = VecSetBlockSize(coordVec, dim);CHECK_PETSC_ERROR(err);
     err = VecSetFromOptions(coordVec);CHECK_PETSC_ERROR(err);
@@ -182,7 +184,7 @@
 #endif
 
     const std::string& filenameVertices = _datasetFilename("vertices");
-    err = PetscViewerBinaryOpen(((PetscObject) dmMesh)->comm, filenameVertices.c_str(),
+    err = PetscViewerBinaryOpen(comm, filenameVertices.c_str(),
 				FILE_MODE_WRITE,
 				&binaryViewer);
     CHECK_PETSC_ERROR(err);
@@ -212,8 +214,7 @@
 #if 0
     int cellDepthLocal = (sieveMesh->depth() == -1) ? -1 : 1;
     int cellDepth = 0;
-    err = MPI_Allreduce(&cellDepthLocal, &cellDepth, 1, MPI_INT, MPI_MAX, 
-			((PetscObject) dmMesh)->comm);CHECK_PETSC_ERROR(err);
+    err = MPI_Allreduce(&cellDepthLocal, &cellDepth, 1, MPI_INT, MPI_MAX, comm);CHECK_PETSC_ERROR(err);
     const int depth = (0 == label) ? cellDepth : labelId;
     const std::string labelName = (0 == label) ?
       ((sieveMesh->hasLabel("censored depth")) ?
@@ -229,8 +230,7 @@
     if (cells->size() > 0)
       numCornersLocal = sieveMesh->getNumCellCorners(*cells->begin());
     int numCorners = numCornersLocal;
-    err = MPI_Allreduce(&numCornersLocal, &numCorners, 1, MPI_INT, MPI_MAX,
-		     ((PetscObject) dmMesh)->comm); CHECK_PETSC_ERROR(err);
+    err = MPI_Allreduce(&numCornersLocal, &numCorners, 1, MPI_INT, MPI_MAX, comm); CHECK_PETSC_ERROR(err);
 
     PylithScalar* tmpVertices = 0;
     const int ncells = cNumbering->getLocalSize();
@@ -271,7 +271,7 @@
     }
     PetscVec elemVec;
 
-    err = VecCreateMPIWithArray(((PetscObject) dmMesh)->comm, numCorners, conesSize, PETSC_DETERMINE,
+    err = VecCreateMPIWithArray(comm, numCorners, conesSize, PETSC_DETERMINE,
                                 tmpVertices, &elemVec); CHECK_PETSC_ERROR(err);
     err = PetscObjectSetName((PetscObject) elemVec, "cells");CHECK_PETSC_ERROR(err);
 #else
@@ -295,7 +295,7 @@
       err = DMPlexRestoreTransitiveClosure(dmMesh, cell, PETSC_TRUE, &closureSize, &closure);CHECK_PETSC_ERROR(err);
       if (numCornersLocal) break;
     }
-    err = MPI_Allreduce(&numCornersLocal, &numCorners, 1, MPIU_INT, MPI_MAX, mesh.comm());CHECK_PETSC_ERROR(err);
+    err = MPI_Allreduce(&numCornersLocal, &numCorners, 1, MPIU_INT, MPI_MAX, comm);CHECK_PETSC_ERROR(err);
     if (label) {
       conesSize = 0;
       for(PetscInt cell = cStart; cell < cEnd; ++cell) {
@@ -317,7 +317,7 @@
 
     err = DMPlexGetVertexNumbering(dmMesh, &globalVertexNumbers);CHECK_PETSC_ERROR(err);
     err = ISGetIndices(globalVertexNumbers, &gvertex);CHECK_PETSC_ERROR(err);
-    err = VecCreate(mesh.comm(), &cellVec);CHECK_PETSC_ERROR(err);
+    err = VecCreate(comm, &cellVec);CHECK_PETSC_ERROR(err);
     err = VecSetSizes(cellVec, conesSize, PETSC_DETERMINE);CHECK_PETSC_ERROR(err);
     err = VecSetBlockSize(cellVec, numCorners);CHECK_PETSC_ERROR(err);
     err = VecSetFromOptions(cellVec);CHECK_PETSC_ERROR(err);
@@ -351,7 +351,7 @@
 #endif
 
     const std::string& filenameCells = _datasetFilename("cells");
-    err = PetscViewerBinaryOpen(((PetscObject) dmMesh)->comm, filenameCells.c_str(),
+    err = PetscViewerBinaryOpen(comm, filenameCells.c_str(),
                                 FILE_MODE_WRITE, &binaryViewer);CHECK_PETSC_ERROR(err);
     err = PetscViewerBinarySetSkipHeader(binaryViewer, PETSC_TRUE);CHECK_PETSC_ERROR(err);
     err = VecView(elemVec, binaryViewer);CHECK_PETSC_ERROR(err);
@@ -425,11 +425,13 @@
     const char* context = DataWriter<mesh_type, field_type>::_context.c_str();
 
     DM             dmMesh = mesh.dmMesh();
+    MPI_Comm       comm;
     PetscMPIInt    commRank;
     PetscErrorCode err;
 
     assert(dmMesh);
-    err = MPI_Comm_rank(((PetscObject) dmMesh)->comm, &commRank);CHECK_PETSC_ERROR(err);
+    err = PetscObjectGetComm((PetscObject) dmMesh, &comm);CHECK_PETSC_ERROR(err);
+    err = MPI_Comm_rank(comm, &commRank);CHECK_PETSC_ERROR(err);
     field.createScatterWithBC(mesh, "", 0, context);
     field.scatterSectionToVector(context);
     PetscVec vector = field.vector(context);
@@ -445,7 +447,7 @@
     if (_datasets.find(field.label()) != _datasets.end()) {
       binaryViewer = _datasets[field.label()].viewer;
     } else {
-      err = PetscViewerBinaryOpen(((PetscObject) dmMesh)->comm, 
+      err = PetscViewerBinaryOpen(comm, 
                                   _datasetFilename(field.label()).c_str(),
                                   FILE_MODE_WRITE, &binaryViewer);
       CHECK_PETSC_ERROR(err);
@@ -481,8 +483,8 @@
     }
     int fiberDimLocal = dof;
     int fiberDim = 0;
-    err = MPI_Allreduce(&fiberDimLocal, &fiberDim, 1, MPI_INT, MPI_MAX, ((PetscObject) dmMesh)->comm);CHECK_PETSC_ERROR(err);
-    err = MPI_Allreduce(&numLocalVertices, &numVertices, 1, MPI_INT, MPI_SUM, ((PetscObject) dmMesh)->comm);CHECK_PETSC_ERROR(err);
+    err = MPI_Allreduce(&fiberDimLocal, &fiberDim, 1, MPI_INT, MPI_MAX, comm);CHECK_PETSC_ERROR(err);
+    err = MPI_Allreduce(&numLocalVertices, &numVertices, 1, MPI_INT, MPI_SUM, comm);CHECK_PETSC_ERROR(err);
     assert(fiberDim > 0);assert(numVertices > 0);
 
     if (!commRank) {
@@ -560,11 +562,13 @@
     const char* context = DataWriter<mesh_type, field_type>::_context.c_str();
 
     DM             dmMesh = field.mesh().dmMesh();
+    MPI_Comm       comm;
     PetscMPIInt    commRank;
     PetscErrorCode err;
 
     assert(dmMesh);
-    err = MPI_Comm_rank(((PetscObject) dmMesh)->comm, &commRank);CHECK_PETSC_ERROR(err);
+    err = PetscObjectGetComm((PetscObject) dmMesh, &comm);CHECK_PETSC_ERROR(err);
+    err = MPI_Comm_rank(comm, &commRank);CHECK_PETSC_ERROR(err);
     field.createScatterWithBC(field.mesh(), label ? label : "", labelId, context);
     field.scatterSectionToVector(context);
     PetscVec vector = field.vector(context);
@@ -580,7 +584,7 @@
     if (_datasets.find(field.label()) != _datasets.end()) {
       binaryViewer = _datasets[field.label()].viewer;
     } else {
-      err = PetscViewerBinaryOpen(((PetscObject) dmMesh)->comm,
+      err = PetscViewerBinaryOpen(comm,
                                   _datasetFilename(field.label()).c_str(),
                                   FILE_MODE_WRITE, &binaryViewer);
       CHECK_PETSC_ERROR(err);
@@ -635,8 +639,8 @@
     }
     int fiberDimLocal = dof;
     int fiberDim = 0;
-    MPI_Allreduce(&fiberDimLocal, &fiberDim, 1, MPI_INT, MPI_MAX, ((PetscObject) dmMesh)->comm);
-    err = MPI_Allreduce(&numLocalCells, &numCells, 1, MPI_INT, MPI_SUM, ((PetscObject) dmMesh)->comm);CHECK_PETSC_ERROR(err);
+    MPI_Allreduce(&fiberDimLocal, &fiberDim, 1, MPI_INT, MPI_MAX, comm);
+    err = MPI_Allreduce(&numLocalCells, &numCells, 1, MPI_INT, MPI_SUM, comm);CHECK_PETSC_ERROR(err);
     assert(fiberDim > 0);assert(numCells > 0);
 
     if (!commRank) {

Modified: short/3D/PyLith/trunk/libsrc/pylith/meshio/OutputSolnPoints.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/pylith/meshio/OutputSolnPoints.cc	2013-02-12 14:44:14 UTC (rev 21359)
+++ short/3D/PyLith/trunk/libsrc/pylith/meshio/OutputSolnPoints.cc	2013-02-13 00:31:10 UTC (rev 21360)
@@ -109,10 +109,12 @@
 
   // Setup interpolator object
   DM dm = _mesh->dmMesh();
+  MPI_Comm       comm;
   PetscErrorCode err = 0;
 
   assert(dm);
-  err = DMInterpolationCreate(((PetscObject) dm)->comm, &_interpolator);CHECK_PETSC_ERROR(err);
+  err = PetscObjectGetComm((PetscObject) dm, &comm);CHECK_PETSC_ERROR(err);
+  err = DMInterpolationCreate(comm, &_interpolator);CHECK_PETSC_ERROR(err);
   
   err = DMInterpolationSetDim(_interpolator, spaceDim);CHECK_PETSC_ERROR(err);
 

Modified: short/3D/PyLith/trunk/libsrc/pylith/problems/Solver.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/pylith/problems/Solver.cc	2013-02-12 14:44:14 UTC (rev 21359)
+++ short/3D/PyLith/trunk/libsrc/pylith/problems/Solver.cc	2013-02-13 00:31:10 UTC (rev 21360)
@@ -209,6 +209,7 @@
   assert(formulation);
 
   DM dmMesh = fields.mesh().dmMesh();
+  MPI_Comm comm;
   assert(dmMesh);
   PetscSection   solutionSection   = fields.solution().petscSection();
   Vec            solutionVec       = fields.solution().localVector();
@@ -220,6 +221,7 @@
   const bool separateComponents = formulation->splitFieldComponents();
 
   assert(solutionSection);
+  err = PetscObjectGetComm((PetscObject) dmMesh, &comm);CHECK_PETSC_ERROR(err);
   err = DMPlexGetDimension(dmMesh, &spaceDim);CHECK_PETSC_ERROR(err);
   err = PetscSectionGetNumFields(solutionSection, &numFields);CHECK_PETSC_ERROR(err);
 
@@ -244,7 +246,7 @@
     err = PetscSectionGetStorageSize(lagrangeSection, &nrows);CHECK_PETSC_ERROR(err);
     ncols = nrows;
 
-    err = MatCreate(((PetscObject) dmMesh)->comm, &_jacobianPCFault);CHECK_PETSC_ERROR(err);
+    err = MatCreate(comm, &_jacobianPCFault);CHECK_PETSC_ERROR(err);
     err = MatSetSizes(_jacobianPCFault, nrows, ncols, 
                       PETSC_DECIDE, PETSC_DECIDE);CHECK_PETSC_ERROR(err);
     err = MatSetType(_jacobianPCFault, MATAIJ);CHECK_PETSC_ERROR(err);
@@ -346,7 +348,7 @@
         err = VecMAXPY(mode[i], i, dots, mode);CHECK_PETSC_ERROR(err);
         err = VecNormalize(mode[i], PETSC_NULL);CHECK_PETSC_ERROR(err);
       } // for
-      err = MatNullSpaceCreate(((PetscObject) dmMesh)->comm, PETSC_FALSE, m, mode, &nullsp);CHECK_PETSC_ERROR(err);
+      err = MatNullSpaceCreate(comm, PETSC_FALSE, m, mode, &nullsp);CHECK_PETSC_ERROR(err);
       for(int i = 0; i< m; ++i) {err = VecDestroy(&mode[i]);CHECK_PETSC_ERROR(err);}
     } // if
 

Modified: short/3D/PyLith/trunk/libsrc/pylith/topology/Field.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/pylith/topology/Field.cc	2013-02-12 14:44:14 UTC (rev 21359)
+++ short/3D/PyLith/trunk/libsrc/pylith/topology/Field.cc	2013-02-13 00:31:10 UTC (rev 21360)
@@ -1609,7 +1609,7 @@
       err = PetscSectionGetDof(section, q, &dof);CHECK_PETSC_ERROR(err);
       if (dof) {
         err = PetscFindInt(q, n, ind, &p);CHECK_PETSC_ERROR(err);
-        if (p >= pStart) {
+        if ((p >= pStart) && (p < pEnd)) {
           err = PetscSectionSetDof(subSection, p, dof);CHECK_PETSC_ERROR(err);
           err = PetscSectionGetOffset(section, q, &off);CHECK_PETSC_ERROR(err);
           err = PetscSectionSetOffset(subSection, p, off);CHECK_PETSC_ERROR(err);
@@ -1619,7 +1619,10 @@
     err = ISRestoreIndices(subpointIS, &ind);CHECK_PETSC_ERROR(err);
     err = ISDestroy(&subpointIS);CHECK_PETSC_ERROR(err);
     /* No need to setup section */
+    err = PetscSectionView(subSection, PETSC_VIEWER_STDOUT_WORLD);CHECK_PETSC_ERROR(err);
     section = subSection;
+    /* There are no excludes for surface meshes */
+    numExcludes = 0;
   }
 
   err = DMPlexClone(_dm, &sinfo.dm);CHECK_PETSC_ERROR(err);
@@ -1634,6 +1637,9 @@
     err = DMPlexGetLabel(sinfo.dm, labelName.c_str(), &label);CHECK_PETSC_ERROR(err);
     err = PetscSectionCreateGlobalSectionLabel(section, sf, PETSC_TRUE, label, labelValue, &gsection);CHECK_PETSC_ERROR(err);
   }
+  if (((dim != dimF) || ((pEnd-pStart) < (qEnd-qStart))) && subpointMap && !subpointMapF) {
+    err = PetscSectionView(gsection, PETSC_VIEWER_STDOUT_WORLD);CHECK_PETSC_ERROR(err);
+  }
   err = DMSetDefaultGlobalSection(sinfo.dm, gsection);CHECK_PETSC_ERROR(err);
   err = DMCreateGlobalVector(sinfo.dm, &sinfo.vector);CHECK_PETSC_ERROR(err);
   err = PetscObjectSetName((PetscObject) sinfo.vector, _metadata["default"].label.c_str());CHECK_PETSC_ERROR(err);



More information about the CIG-COMMITS mailing list