[cig-commits] [commit] baagaard/feature-output-station-names, baagaard/feature-progress-monitor, baagaard/fix-custom-faultpc, baagaard/fix-faults-intersect, master: Create Lagrange DM to get global section for fault preconditioner. (0382191)

cig_noreply at geodynamics.org cig_noreply at geodynamics.org
Wed Nov 5 15:47:12 PST 2014


Repository : https://github.com/geodynamics/pylith

On branches: baagaard/feature-output-station-names,baagaard/feature-progress-monitor,baagaard/fix-custom-faultpc,baagaard/fix-faults-intersect,master
Link       : https://github.com/geodynamics/pylith/compare/f33c75b19fd60eedb2a3405db76a1fee333bb1d7...5b6d812b1612809fea3bd331c4e5af98c25a536a

>---------------------------------------------------------------

commit 038219156dba48ae259d7a983be9b4746560e293
Author: Brad Aagaard <baagaard at usgs.gov>
Date:   Thu Oct 23 18:54:29 2014 -0700

    Create Lagrange DM to get global section for fault preconditioner.


>---------------------------------------------------------------

038219156dba48ae259d7a983be9b4746560e293
 libsrc/pylith/faults/FaultCohesiveLagrange.cc | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

diff --git a/libsrc/pylith/faults/FaultCohesiveLagrange.cc b/libsrc/pylith/faults/FaultCohesiveLagrange.cc
index 53575ee..a1740eb 100644
--- a/libsrc/pylith/faults/FaultCohesiveLagrange.cc
+++ b/libsrc/pylith/faults/FaultCohesiveLagrange.cc
@@ -656,14 +656,15 @@ pylith::faults::FaultCohesiveLagrange::calcPreconditioner(PetscMat* const precon
   topology::VecVisitorMesh areaVisitor(area);
   const PetscScalar* areaArray = areaVisitor.localArray();
 
-  topology::Field& dispRel = _fields->get("relative disp");
-  PetscDM dispRelDM = dispRel.dmMesh();
-  PetscSection dispRelGlobalSection = NULL;
-  PetscErrorCode err = DMGetDefaultGlobalSection(dispRelDM, &dispRelGlobalSection);PYLITH_CHECK_ERROR(err);
 
   PetscDM solnDM = fields->solution().dmMesh();
   PetscSection solnGlobalSection = NULL;
   err = DMGetDefaultGlobalSection(solnDM, &solnGlobalSection);PYLITH_CHECK_ERROR(err);
+  PetscDM lagrangeDM = NULL;
+  PetscSection lagrangeSection = NULL;
+  PetscInt lagrangeFields[1] = {1}; // :KLUDGE: Hardwired index of Lagrange constrain field.  
+  err = DMCreateSubDM(fields->solution().dmMesh(), 1, lagrangeFields, NULL, &lagrangeDM);PYLITH_CHECK_ERROR(err);
+  err = DMGetDefaultGlobalSection(lagrangeDM, &lagrangeSection);PYLITH_CHECK_ERROR(err);
 
   _logger->eventEnd(setupEvent);
 #if !defined(DETAILED_EVENT_LOGGING)
@@ -742,14 +743,14 @@ pylith::faults::FaultCohesiveLagrange::calcPreconditioner(PetscMat* const precon
 
     // Set diagonal entries in preconditioned matrix.
     PetscInt poff = 0;
-    err = PetscSectionGetOffset(dispRelGlobalSection, v_fault, &poff);PYLITH_CHECK_ERROR(err);
+    err = PetscSectionGetOffset(lagrangeSection, e_lagrange, &poff);PYLITH_CHECK_ERROR(err);
 
     for (int iDim=0; iDim < spaceDim; ++iDim) {
       err = MatSetValue(*precondMatrix, poff+iDim, poff+iDim, precondVertexL[iDim], INSERT_VALUES);PYLITH_CHECK_ERROR(err);
     } // for
 
 #if 0 // DEBUGGING
-    std::cout << "1/P_vertex " << e_lagrange << std::endl;
+    std::cout << "1/P_vertex " << e_lagrange << ", poff: " << poff << std::endl;
     for(int iDim = 0; iDim < spaceDim; ++iDim) {
       std::cout << "  " << precondVertexL[iDim] << std::endl;
     } // for
@@ -762,6 +763,7 @@ pylith::faults::FaultCohesiveLagrange::calcPreconditioner(PetscMat* const precon
   } // for
   err = MatDestroy(&jacobianNP);PYLITH_CHECK_ERROR(err);
   PetscLogFlops(numVertices*spaceDim*6);
+  err = DMDestroy(&lagrangeDM);PYLITH_CHECK_ERROR(err);
 
 #if !defined(DETAILED_EVENT_LOGGING)
     _logger->eventEnd(computeEvent);



More information about the CIG-COMMITS mailing list