[cig-commits] [commit] knepley/upgrade-petsc-interface: Optimization: Call optimizeClosure() for every visitor that calls getClosure() except the VisitorSubmesh (5b37d1e)

cig_noreply at geodynamics.org cig_noreply at geodynamics.org
Mon Nov 25 17:42:45 PST 2013


Repository : ssh://geoshell/pylith

On branch  : knepley/upgrade-petsc-interface
Link       : https://github.com/geodynamics/pylith/compare/0b9b0aaf3cbf745e5b76f3177a1ddddb5bf75fe7...5b37d1ea08e0a69bd51ffc02ad5050e32f819f3d

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

commit 5b37d1ea08e0a69bd51ffc02ad5050e32f819f3d
Author: Matthew G. Knepley <knepley at gmail.com>
Date:   Mon Nov 25 19:45:34 2013 -0600

    Optimization: Call optimizeClosure() for every visitor that calls getClosure() except the VisitorSubmesh


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

5b37d1ea08e0a69bd51ffc02ad5050e32f819f3d
 libsrc/pylith/bc/AbsorbingDampers.cc                     | 5 +++++
 libsrc/pylith/bc/Neumann.cc                              | 3 +++
 libsrc/pylith/faults/FaultCohesiveDyn.cc                 | 2 ++
 libsrc/pylith/faults/FaultCohesiveLagrange.cc            | 2 ++
 libsrc/pylith/feassemble/ElasticityExplicit.cc           | 6 ++++++
 libsrc/pylith/feassemble/ElasticityExplicitLgDeform.cc   | 6 ++++++
 libsrc/pylith/feassemble/ElasticityExplicitTet4.cc       | 6 ++++++
 libsrc/pylith/feassemble/ElasticityExplicitTri3.cc       | 6 ++++++
 libsrc/pylith/feassemble/ElasticityImplicit.cc           | 7 +++++++
 libsrc/pylith/feassemble/ElasticityImplicitLgDeform.cc   | 7 +++++++
 libsrc/pylith/feassemble/IntegratorElasticity.cc         | 4 ++++
 libsrc/pylith/feassemble/IntegratorElasticityLgDeform.cc | 4 ++++
 libsrc/pylith/materials/ElasticMaterial.cc               | 3 +++
 libsrc/pylith/materials/Material.cc                      | 1 +
 14 files changed, 62 insertions(+)

diff --git a/libsrc/pylith/bc/AbsorbingDampers.cc b/libsrc/pylith/bc/AbsorbingDampers.cc
index e0d915a..0f8ba26 100644
--- a/libsrc/pylith/bc/AbsorbingDampers.cc
+++ b/libsrc/pylith/bc/AbsorbingDampers.cc
@@ -147,6 +147,7 @@ pylith::bc::AbsorbingDampers::initialize(const topology::Mesh& mesh,
 
   scalar_array coordsCell(numBasis*spaceDim); // :KULDGE: Update numBasis to numCorners after implementing higher order
   topology::CoordsVisitor coordsVisitor(dmSubMesh);
+  coordsVisitor.optimizeClosure();
 
   assert(_normalizer);
   const PylithScalar lengthScale = _normalizer->lengthScale();
@@ -275,6 +276,7 @@ pylith::bc::AbsorbingDampers::integrateResidual(const topology::Field& residual,
   
   scalar_array coordsCell(numBasis*spaceDim); // :KULDGE: Update numBasis to numCorners after implementing higher order
   topology::CoordsVisitor coordsVisitor(dmSubMesh);
+  coordsVisitor.optimizeClosure();
 
   // Get 'surface' cells (1 dimension lower than top-level cells)
   topology::Stratum cellsStratum(dmSubMesh, topology::Stratum::HEIGHT, 1);
@@ -411,6 +413,7 @@ pylith::bc::AbsorbingDampers::integrateResidualLumped(const topology::Field& res
 
   scalar_array coordsCell(numBasis*spaceDim); // :KULDGE: Update numBasis to numCorners after implementing higher order
   topology::CoordsVisitor coordsVisitor(dmSubMesh);
+  coordsVisitor.optimizeClosure();
 
   _logger->eventEnd(setupEvent);
 #if !defined(DETAILED_EVENT_LOGGING)
@@ -544,6 +547,7 @@ pylith::bc::AbsorbingDampers::integrateJacobian(topology::Jacobian* jacobian,
 
   scalar_array coordsCell(numBasis*spaceDim); // :KULDGE: Update numBasis to numCorners after implementing higher order
   topology::CoordsVisitor coordsVisitor(dmSubMesh);
+  coordsVisitor.optimizeClosure();
 
   _logger->eventEnd(setupEvent);
 #if !defined(DETAILED_EVENT_LOGGING)
@@ -675,6 +679,7 @@ pylith::bc::AbsorbingDampers::integrateJacobian(topology::Field* jacobian,
   
   scalar_array coordsCell(numBasis*spaceDim); // :KULDGE: Update numBasis to numCorners after implementing higher order
   topology::CoordsVisitor coordsVisitor(dmSubMesh);
+  coordsVisitor.optimizeClosure();
 
   _logger->eventEnd(setupEvent);
 #if !defined(DETAILED_EVENT_LOGGING)
diff --git a/libsrc/pylith/bc/Neumann.cc b/libsrc/pylith/bc/Neumann.cc
index 4e4b671..87afdfe 100644
--- a/libsrc/pylith/bc/Neumann.cc
+++ b/libsrc/pylith/bc/Neumann.cc
@@ -125,6 +125,7 @@ pylith::bc::Neumann::integrateResidual(const topology::Field& residual,
 
   scalar_array coordsCell(numBasis*spaceDim); // :KULDGE: Update numBasis to numCorners after implementing higher order
   topology::CoordsVisitor coordsVisitor(dmSubMesh);
+  coordsVisitor.optimizeClosure();
 
   // Loop over faces and integrate contribution from each face
   for(PetscInt c = cStart; c < cEnd; ++c) {
@@ -418,6 +419,7 @@ pylith::bc::Neumann::_queryDB(const char* name,
   // Get coordinates
   scalar_array coordsCell(numBasis*spaceDim); // :KULDGE: Update numBasis to numCorners after implementing higher order
   topology::CoordsVisitor coordsVisitor(dmSubMesh);
+  coordsVisitor.optimizeClosure();
 
   const spatialdata::geocoords::CoordSys* cs = _boundaryMesh->coordsys();
   assert(cs);
@@ -506,6 +508,7 @@ void
   // Get coordinates.
   scalar_array coordsCell(numBasis*spaceDim); // :KULDGE: Update numBasis to numCorners after implementing higher order
   topology::CoordsVisitor coordsVisitor(dmSubMesh);
+  coordsVisitor.optimizeClosure();
 
   // Get sections
   scalar_array tmpLocal(spaceDim);
diff --git a/libsrc/pylith/faults/FaultCohesiveDyn.cc b/libsrc/pylith/faults/FaultCohesiveDyn.cc
index 3316ff8..bd1a385 100644
--- a/libsrc/pylith/faults/FaultCohesiveDyn.cc
+++ b/libsrc/pylith/faults/FaultCohesiveDyn.cc
@@ -549,6 +549,7 @@ pylith::faults::FaultCohesiveDyn::constrainSolnSpace(topology::SolutionFields* c
   scalar_array dLagrangeTpdtVertex(spaceDim);
   topology::VecVisitorMesh dLagrangeVisitor(_fields->get("sensitivity dLagrange"));
   PetscScalar* dLagrangeArray = dLagrangeVisitor.localArray();
+  dLagrangeVisitor.optimizeClosure();
 
   constrainSolnSpace_fn_type constrainSolnSpaceFn;
   switch (spaceDim) { // switch
@@ -1818,6 +1819,7 @@ pylith::faults::FaultCohesiveDyn::_sensitivityReformResidual(const bool negative
   // Get sections
   scalar_array coordsCell(numBasis*spaceDim); // :KULDGE: Update numBasis to numCorners after implementing higher order
   topology::CoordsVisitor coordsVisitor(faultDMMesh);
+  coordsVisitor.optimizeClosure();
 
   scalar_array dLagrangeCell(numBasis*spaceDim);
   topology::VecVisitorMesh dLagrangeVisitor(_fields->get("sensitivity dLagrange"));
diff --git a/libsrc/pylith/faults/FaultCohesiveLagrange.cc b/libsrc/pylith/faults/FaultCohesiveLagrange.cc
index cf17d50..d1f895c 100644
--- a/libsrc/pylith/faults/FaultCohesiveLagrange.cc
+++ b/libsrc/pylith/faults/FaultCohesiveLagrange.cc
@@ -1356,6 +1356,7 @@ pylith::faults::FaultCohesiveLagrange::_calcOrientation(const PylithScalar upDir
   // Get section containing coordinates of vertices
   scalar_array coordsCell(numBasis*spaceDim); // :KULDGE: Update numBasis to numCorners after implementing higher order
   topology::CoordsVisitor coordsVisitor(faultDMMesh);
+  coordsVisitor.optimizeClosure();
 
   // Loop over cohesive cells, computing orientation weighted by
   // jacobian at constraint vertices
@@ -1620,6 +1621,7 @@ pylith::faults::FaultCohesiveLagrange::_calcArea(void)
 
   scalar_array coordsCell(numBasis*spaceDim); // :KULDGE: Update numBasis to numCorners after implementing higher order
   topology::CoordsVisitor coordsVisitor(faultDMMesh);
+  coordsVisitor.optimizeClosure();
 
   // Loop over cells in fault mesh, compute area
   for(PetscInt c = cStart; c < cEnd; ++c) {
diff --git a/libsrc/pylith/feassemble/ElasticityExplicit.cc b/libsrc/pylith/feassemble/ElasticityExplicit.cc
index 4f38f01..c5bbd93 100644
--- a/libsrc/pylith/feassemble/ElasticityExplicit.cc
+++ b/libsrc/pylith/feassemble/ElasticityExplicit.cc
@@ -209,18 +209,23 @@ pylith::feassemble::ElasticityExplicit::integrateResidual(const topology::Field&
   // Setup field visitors.
   scalar_array accCell(numBasis*spaceDim);
   topology::VecVisitorMesh accVisitor(fields->get("acceleration(t)"));
+  accVisitor.optimizeClosure();
 
   scalar_array velCell(numBasis*spaceDim);
   topology::VecVisitorMesh velVisitor(fields->get("velocity(t)"));
+  velVisitor.optimizeClosure();
 
   scalar_array dispCell(numBasis*spaceDim);
   scalar_array dispAdjCell(numBasis*spaceDim);
   topology::VecVisitorMesh dispVisitor(fields->get("disp(t)"));
+  dispVisitor.optimizeClosure();
 
   topology::VecVisitorMesh residualVisitor(residual);
+  residualVisitor.optimizeClosure();
 
   scalar_array coordsCell(numBasis*spaceDim); // :KULDGE: Update numBasis to numCorners after implementing higher order
   topology::CoordsVisitor coordsVisitor(dmMesh);
+  coordsVisitor.optimizeClosure();
 
   assert(_normalizer);
   const PylithScalar lengthScale = _normalizer->lengthScale();
@@ -443,6 +448,7 @@ pylith::feassemble::ElasticityExplicit::integrateJacobian(topology::Field* jacob
 
   scalar_array coordsCell(numBasis*spaceDim); // :KLUDGE: numBasis to numCorners after switching to higher order
   topology::CoordsVisitor coordsVisitor(dmMesh);
+  coordsVisitor.optimizeClosure();
 
   _logger->eventEnd(setupEvent);
 #if !defined(DETAILED_EVENT_LOGGING)
diff --git a/libsrc/pylith/feassemble/ElasticityExplicitLgDeform.cc b/libsrc/pylith/feassemble/ElasticityExplicitLgDeform.cc
index 8363129..1e69d99 100644
--- a/libsrc/pylith/feassemble/ElasticityExplicitLgDeform.cc
+++ b/libsrc/pylith/feassemble/ElasticityExplicitLgDeform.cc
@@ -204,18 +204,23 @@ pylith::feassemble::ElasticityExplicitLgDeform::integrateResidual(const topology
   // Setup field visitors.
   scalar_array accCell(numBasis*spaceDim);
   topology::VecVisitorMesh accVisitor(fields->get("acceleration(t)"));
+  accVisitor.optimizeClosure();
 
   scalar_array velCell(numBasis*spaceDim);
   topology::VecVisitorMesh velVisitor(fields->get("velocity(t)"));
+  velVisitor.optimizeClosure();
 
   scalar_array dispCell(numBasis*spaceDim);
   scalar_array dispAdjCell(numBasis*spaceDim);
   topology::VecVisitorMesh dispVisitor(fields->get("disp(t)"));
+  dispVisitor.optimizeClosure();
 
   topology::VecVisitorMesh residualVisitor(residual);
+  residualVisitor.optimizeClosure();
 
   scalar_array coordsCell(numBasis*spaceDim); // :KULDGE: Update numBasis to numCorners after implementing higher order
   topology::CoordsVisitor coordsVisitor(dmMesh);
+  coordsVisitor.optimizeClosure();
 
   assert(_normalizer);
   const PylithScalar lengthScale = _normalizer->lengthScale();
@@ -396,6 +401,7 @@ pylith::feassemble::ElasticityExplicitLgDeform::integrateJacobian(topology::Fiel
 
   scalar_array coordsCell(numBasis*spaceDim); // :KULDGE: Update numBasis to numCorners after implementing higher order
   topology::CoordsVisitor coordsVisitor(dmMesh);
+  coordsVisitor.optimizeClosure();
 
   _logger->eventEnd(setupEvent);
   _logger->eventBegin(computeEvent);
diff --git a/libsrc/pylith/feassemble/ElasticityExplicitTet4.cc b/libsrc/pylith/feassemble/ElasticityExplicitTet4.cc
index d706be5..694316b 100644
--- a/libsrc/pylith/feassemble/ElasticityExplicitTet4.cc
+++ b/libsrc/pylith/feassemble/ElasticityExplicitTet4.cc
@@ -201,18 +201,23 @@ pylith::feassemble::ElasticityExplicitTet4::integrateResidual(
   // Setup field visitors.
   scalar_array accCell(numBasis*spaceDim);
   topology::VecVisitorMesh accVisitor(fields->get("acceleration(t)"));
+  accVisitor.optimizeClosure();
 
   scalar_array velCell(numBasis*spaceDim);
   topology::VecVisitorMesh velVisitor(fields->get("velocity(t)"));
+  velVisitor.optimizeClosure();
 
   scalar_array dispCell(numBasis*spaceDim);
   scalar_array dispAdjCell(numBasis*spaceDim);
   topology::VecVisitorMesh dispVisitor(fields->get("disp(t)"));
+  dispVisitor.optimizeClosure();
   
   topology::VecVisitorMesh residualVisitor(residual);
+  residualVisitor.optimizeClosure();
 
   scalar_array coordsCell(numCorners*spaceDim);
   topology::CoordsVisitor coordsVisitor(dmMesh);
+  coordsVisitor.optimizeClosure();
 
   assert(_normalizer);
   const PylithScalar lengthScale = _normalizer->lengthScale();
@@ -490,6 +495,7 @@ pylith::feassemble::ElasticityExplicitTet4::integrateJacobian(topology::Field* j
 
   scalar_array coordsCell(numCorners*spaceDim);
   topology::CoordsVisitor coordsVisitor(dmMesh);
+  coordsVisitor.optimizeClosure();
 
   _logger->eventEnd(setupEvent);
 #if !defined(DETAILED_EVENT_LOGGING)
diff --git a/libsrc/pylith/feassemble/ElasticityExplicitTri3.cc b/libsrc/pylith/feassemble/ElasticityExplicitTri3.cc
index 2f633d3..71a8bb2 100644
--- a/libsrc/pylith/feassemble/ElasticityExplicitTri3.cc
+++ b/libsrc/pylith/feassemble/ElasticityExplicitTri3.cc
@@ -200,18 +200,23 @@ pylith::feassemble::ElasticityExplicitTri3::integrateResidual(const topology::Fi
   // Setup field visitors.
   scalar_array accCell(numBasis*spaceDim);
   topology::VecVisitorMesh accVisitor(fields->get("acceleration(t)"));
+  accVisitor.optimizeClosure();
 
   scalar_array velCell(numBasis*spaceDim);
   topology::VecVisitorMesh velVisitor(fields->get("velocity(t)"));
+  velVisitor.optimizeClosure();
 
   scalar_array dispCell(numBasis*spaceDim);
   scalar_array dispAdjCell(numBasis*spaceDim);
   topology::VecVisitorMesh dispVisitor(fields->get("disp(t)"));
+  dispVisitor.optimizeClosure();
   
   topology::VecVisitorMesh residualVisitor(residual);
+  residualVisitor.optimizeClosure();
 
   scalar_array coordsCell(numCorners*spaceDim);
   topology::CoordsVisitor coordsVisitor(dmMesh);
+  coordsVisitor.optimizeClosure();
 
   assert(_normalizer);
   const PylithScalar lengthScale = _normalizer->lengthScale();
@@ -452,6 +457,7 @@ pylith::feassemble::ElasticityExplicitTri3::integrateJacobian(
 
   scalar_array coordsCell(numCorners*spaceDim);
   topology::CoordsVisitor coordsVisitor(dmMesh);
+  coordsVisitor.optimizeClosure();
 
   _logger->eventEnd(setupEvent);
 #if !defined(DETAILED_EVENT_LOGGING)
diff --git a/libsrc/pylith/feassemble/ElasticityImplicit.cc b/libsrc/pylith/feassemble/ElasticityImplicit.cc
index e19b2b4..031262a 100644
--- a/libsrc/pylith/feassemble/ElasticityImplicit.cc
+++ b/libsrc/pylith/feassemble/ElasticityImplicit.cc
@@ -173,14 +173,18 @@ pylith::feassemble::ElasticityImplicit::integrateResidual(const topology::Field&
   // Setup field visitors.
   scalar_array dispCell(numBasis*spaceDim);
   topology::VecVisitorMesh dispVisitor(fields->get("disp(t)"));
+  dispVisitor.optimizeClosure();
 
   scalar_array dispIncrCell(numBasis*spaceDim);
   topology::VecVisitorMesh dispIncrVisitor(fields->get("dispIncr(t->t+dt)"));
+  dispIncrVisitor.optimizeClosure();
 
   topology::VecVisitorMesh residualVisitor(residual);
+  residualVisitor.optimizeClosure();
 
   scalar_array coordsCell(numBasis*spaceDim); // :KLUDGE: numBasis to numCorners after switching to higher order
   topology::CoordsVisitor coordsVisitor(dmMesh);
+  coordsVisitor.optimizeClosure();
 
   assert(_normalizer);
   const PylithScalar lengthScale = _normalizer->lengthScale();
@@ -342,12 +346,15 @@ pylith::feassemble::ElasticityImplicit::integrateJacobian(topology::Jacobian* ja
   // Setup field visitors.
   scalar_array dispCell(numBasis*spaceDim);
   topology::VecVisitorMesh dispVisitor(fields->get("disp(t)"));
+  dispVisitor.optimizeClosure();
 
   scalar_array dispIncrCell(numBasis*spaceDim);
   topology::VecVisitorMesh dispIncrVisitor(fields->get("dispIncr(t->t+dt)"));
+  dispIncrVisitor.optimizeClosure();
 
   scalar_array coordsCell(numBasis*spaceDim); // :KLUDGE: numBasis to numCorners after switching to higher order
   topology::CoordsVisitor coordsVisitor(dmMesh);
+  coordsVisitor.optimizeClosure();
 
   // Get sparse matrix
   const PetscMat jacobianMat = jacobian->matrix();assert(jacobianMat);
diff --git a/libsrc/pylith/feassemble/ElasticityImplicitLgDeform.cc b/libsrc/pylith/feassemble/ElasticityImplicitLgDeform.cc
index 6134e73..bd0a6f8 100644
--- a/libsrc/pylith/feassemble/ElasticityImplicitLgDeform.cc
+++ b/libsrc/pylith/feassemble/ElasticityImplicitLgDeform.cc
@@ -179,14 +179,18 @@ pylith::feassemble::ElasticityImplicitLgDeform::integrateResidual(
   // Setup field visitors.
   scalar_array dispCell(numBasis*spaceDim);
   topology::VecVisitorMesh dispVisitor(fields->get("disp(t)"));
+  dispVisitor.optimizeClosure();
 
   scalar_array dispIncrCell(numBasis*spaceDim);
   topology::VecVisitorMesh dispIncrVisitor(fields->get("dispIncr(t->t+dt)"));
+  dispIncrVisitor.optimizeClosure();
 
   topology::VecVisitorMesh residualVisitor(residual);
+  residualVisitor.optimizeClosure();
 
   scalar_array coordsCell(numBasis*spaceDim); // :KULDGE: Update numBasis to numCorners after implementing higher order
   topology::CoordsVisitor coordsVisitor(dmMesh);
+  coordsVisitor.optimizeClosure();
 
   assert(_normalizer);
   const PylithScalar lengthScale = _normalizer->lengthScale();
@@ -355,12 +359,15 @@ pylith::feassemble::ElasticityImplicitLgDeform::integrateJacobian(topology::Jaco
   // Setup field visitors.
   scalar_array dispCell(numBasis*spaceDim);
   topology::VecVisitorMesh dispVisitor(fields->get("disp(t)"));
+  dispVisitor.optimizeClosure();
 
   scalar_array dispIncrCell(numBasis*spaceDim);
   topology::VecVisitorMesh dispIncrVisitor(fields->get("dispIncr(t->t+dt)"));
+  dispIncrVisitor.optimizeClosure();
 
   scalar_array coordsCell(numBasis*spaceDim); // :KULDGE: Update numBasis to numCorners after implementing higher order
   topology::CoordsVisitor coordsVisitor(dmMesh);
+  coordsVisitor.optimizeClosure();
 
   // Get sparse matrix
   const PetscMat jacobianMat = jacobian->matrix();assert(jacobianMat);
diff --git a/libsrc/pylith/feassemble/IntegratorElasticity.cc b/libsrc/pylith/feassemble/IntegratorElasticity.cc
index 4b9a431..04dac40 100644
--- a/libsrc/pylith/feassemble/IntegratorElasticity.cc
+++ b/libsrc/pylith/feassemble/IntegratorElasticity.cc
@@ -199,9 +199,11 @@ pylith::feassemble::IntegratorElasticity::updateStateVars(const PylithScalar t,
   // Setup visitors.
   scalar_array dispCell(numBasis*spaceDim);
   topology::VecVisitorMesh dispVisitor(fields->get("disp(t)"));
+  dispVisitor.optimizeClosure();
 
   scalar_array coordsCell(numCorners*spaceDim);
   topology::CoordsVisitor coordsVisitor(dmMesh);
+  coordsVisitor.optimizeClosure();
 
   // Loop over cells
   for(PetscInt c = 0; c < numCells; ++c) {
@@ -531,12 +533,14 @@ pylith::feassemble::IntegratorElasticity::_calcStrainStressField(topology::Field
   // Setup field visitors.
   scalar_array dispCell(numBasis*spaceDim);
   topology::VecVisitorMesh dispVisitor(fields->get("disp(t)"));
+  dispVisitor.optimizeClosure();
 
   topology::VecVisitorMesh fieldVisitor(*field);
   PetscScalar* fieldArray = fieldVisitor.localArray();
 
   scalar_array coordsCell(numBasis*spaceDim); // :KULDGE: Update numBasis to numCorners after implementing higher order
   topology::CoordsVisitor coordsVisitor(dmMesh);
+  coordsVisitor.optimizeClosure();
 
   // Loop over cells
   for(PetscInt c = 0; c < numCells; ++c) {
diff --git a/libsrc/pylith/feassemble/IntegratorElasticityLgDeform.cc b/libsrc/pylith/feassemble/IntegratorElasticityLgDeform.cc
index ae172e9..313c432 100644
--- a/libsrc/pylith/feassemble/IntegratorElasticityLgDeform.cc
+++ b/libsrc/pylith/feassemble/IntegratorElasticityLgDeform.cc
@@ -110,9 +110,11 @@ pylith::feassemble::IntegratorElasticityLgDeform::updateStateVars(const PylithSc
 
   scalar_array dispCell(numBasis*spaceDim);
   topology::VecVisitorMesh dispVisitor(fields->get("disp(t)"));
+  dispVisitor.optimizeClosure();
 
   scalar_array coordsCell(numBasis*spaceDim); // :KULDGE: Update numBasis to numCorners after implementing higher order
   topology::CoordsVisitor coordsVisitor(dmMesh);
+  coordsVisitor.optimizeClosure();
 
   // Loop over cells
   for (PetscInt c = 0; c < numCells; ++c) {
@@ -188,12 +190,14 @@ pylith::feassemble::IntegratorElasticityLgDeform::_calcStrainStressField(topolog
   // Setup field visitors.
   scalar_array dispCell(numBasis*spaceDim);
   topology::VecVisitorMesh dispVisitor(fields->get("disp(t)"));
+  dispVisitor.optimizeClosure();
 
   topology::VecVisitorMesh fieldVisitor(*field);
   PetscScalar* fieldArray = fieldVisitor.localArray();
 
   scalar_array coordsCell(numBasis*spaceDim); // :KULDGE: Update numBasis to numCorners after implementing higher order
   topology::CoordsVisitor coordsVisitor(dmMesh);
+  coordsVisitor.optimizeClosure();
 
   // Loop over cells
   for (PetscInt c = 0; c < numCells; ++c) {
diff --git a/libsrc/pylith/materials/ElasticMaterial.cc b/libsrc/pylith/materials/ElasticMaterial.cc
index bc374c8..e35d3b2 100644
--- a/libsrc/pylith/materials/ElasticMaterial.cc
+++ b/libsrc/pylith/materials/ElasticMaterial.cc
@@ -417,6 +417,7 @@ pylith::materials::ElasticMaterial::stableTimeStepExplicit(const topology::Mesh&
 
   scalar_array coordsCell(numBasis*spaceDim); // :KULDGE: Update numBasis to numCorners after implementing higher order
   topology::CoordsVisitor coordsVisitor(dmMesh);
+  coordsVisitor.optimizeClosure();
 
   PylithScalar dtStable = pylith::PYLITH_MAXSCALAR;
   scalar_array dtStableCell(numQuadPts);
@@ -576,6 +577,7 @@ pylith::materials::ElasticMaterial::_initializeInitialStress(const topology::Mes
 
   scalar_array coordsCell(numBasis*spaceDim); // :KULDGE: Update numBasis to numCorners after implementing higher order
   topology::CoordsVisitor coordsVisitor(dmMesh);
+  coordsVisitor.optimizeClosure();
 
   // Create arrays for querying
   const int tensorSize = _tensorSize;
@@ -705,6 +707,7 @@ pylith::materials::ElasticMaterial::_initializeInitialStrain(const topology::Mes
 
   scalar_array coordsCell(numBasis*spaceDim); // :KULDGE: Update numBasis to numCorners after implementing higher order
   topology::CoordsVisitor coordsVisitor(dmMesh);
+  coordsVisitor.optimizeClosure();
 
   // Create arrays for querying
   const int tensorSize = _tensorSize;
diff --git a/libsrc/pylith/materials/Material.cc b/libsrc/pylith/materials/Material.cc
index 0b2e543..fe0bcd6 100644
--- a/libsrc/pylith/materials/Material.cc
+++ b/libsrc/pylith/materials/Material.cc
@@ -149,6 +149,7 @@ pylith::materials::Material::initialize(const topology::Mesh& mesh,
 
   scalar_array coordsCell(numBasis*spaceDim); // :KULDGE: Update numBasis to numCorners after implementing higher order
   topology::CoordsVisitor coordsVisitor(dmMesh);
+  coordsVisitor.optimizeClosure();
 
   // Create arrays for querying.
   const int numDBProperties = _metadata.numDBProperties();



More information about the CIG-COMMITS mailing list