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

knepley at geodynamics.org knepley at geodynamics.org
Mon Jan 30 19:37:58 PST 2012


Author: knepley
Date: 2012-01-30 19:37:58 -0800 (Mon, 30 Jan 2012)
New Revision: 19526

Modified:
   short/3D/PyLith/trunk/libsrc/pylith/faults/CohesiveTopology.cc
   short/3D/PyLith/trunk/libsrc/pylith/topology/MeshRefiner.cc
Log:
Clear out renumbering when refining mesh, use globalNumbering to construct fault overlap

Modified: short/3D/PyLith/trunk/libsrc/pylith/faults/CohesiveTopology.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/pylith/faults/CohesiveTopology.cc	2012-01-31 03:11:58 UTC (rev 19525)
+++ short/3D/PyLith/trunk/libsrc/pylith/faults/CohesiveTopology.cc	2012-01-31 03:37:58 UTC (rev 19526)
@@ -766,6 +766,8 @@
   logger.stagePush("FaultCreation");
 
   // Convert fault to an IMesh
+  //   In general, renumbering[global point number] = local point number
+  //   fRenumbering[mesh point] = fault mesh point
   SieveSubMesh::renumbering_type& fRenumbering =
     faultSieveMesh->getRenumbering();
   const SieveSubMesh::renumbering_type::const_iterator fRenumberingEnd = 
@@ -882,14 +884,29 @@
   SieveMesh::renumbering_type& renumbering = sieveMesh->getRenumbering();
   SieveMesh::renumbering_type gRenumbering;
 
-  const SieveMesh::renumbering_type::const_iterator renumberingEnd =
-    renumbering.end();
-  for (SieveMesh::renumbering_type::const_iterator r_iter = renumbering.begin();
-       r_iter != renumberingEnd;
-       ++r_iter)
-    if (fRenumbering.find(r_iter->second) != fRenumbering.end())
-      gRenumbering[r_iter->first] = fRenumbering[r_iter->second];
+  if (renumbering.size()) {
+    std::cout << "Using renumbering to construct Fault Overlap" << std::endl;
+    const SieveMesh::renumbering_type::const_iterator renumberingEnd =
+      renumbering.end();
+    for (SieveMesh::renumbering_type::const_iterator r_iter = renumbering.begin();
+         r_iter != renumberingEnd;
+         ++r_iter)
+      if (fRenumbering.find(r_iter->second) != fRenumbering.end())
+        gRenumbering[r_iter->first] = fRenumbering[r_iter->second];
+  } else {
+    std::cout << "Using new numbering to construct Fault Overlap" << std::endl;
+    const SieveMesh::sieve_type::chart_type& chart = sieveMesh->getSieve()->getChart();
+    const ALE::Obj<SieveMesh::numbering_type>& globalNumbering = 
+      sieveMesh->getFactory()->getNumbering(sieveMesh, -1);
+    assert(!globalNumbering.isNull());
 
+    for(SieveMesh::point_type p = chart.min(); p < chart.max(); ++p) {
+      if (fRenumbering.find(p) != fRenumbering.end()) {
+        gRenumbering[globalNumbering->getIndex(p)] = fRenumbering[p];
+      }
+    }
+  }
+
   ALE::SetFromMap<SieveMesh::renumbering_type> globalPoints(gRenumbering);
   ALE::OverlapBuilder<>::constructOverlap(globalPoints, gRenumbering,
 					  sendParallelMeshOverlap,

Modified: short/3D/PyLith/trunk/libsrc/pylith/topology/MeshRefiner.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/pylith/topology/MeshRefiner.cc	2012-01-31 03:11:58 UTC (rev 19525)
+++ short/3D/PyLith/trunk/libsrc/pylith/topology/MeshRefiner.cc	2012-01-31 03:37:58 UTC (rev 19526)
@@ -802,6 +802,9 @@
   newSendOverlap->assemble();
   newRecvOverlap->assemble();
 
+  // Clear out renumbering
+  newMesh->getRenumbering().clear();
+
   // Verify size of new send/recv overlaps are at least as big as the
   // original ones.
   PetscErrorCode err = 0;



More information about the CIG-COMMITS mailing list