[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