[cig-commits] r16623 - short/3D/PyLith/trunk/libsrc/problems
brad at geodynamics.org
brad at geodynamics.org
Tue May 4 12:58:46 PDT 2010
Author: brad
Date: 2010-05-04 12:58:46 -0700 (Tue, 04 May 2010)
New Revision: 16623
Modified:
short/3D/PyLith/trunk/libsrc/problems/Explicit.cc
short/3D/PyLith/trunk/libsrc/problems/SolverLumped.cc
Log:
Use optimized restrict() with no array as arg.
Modified: short/3D/PyLith/trunk/libsrc/problems/Explicit.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/problems/Explicit.cc 2010-05-04 18:51:01 UTC (rev 16622)
+++ short/3D/PyLith/trunk/libsrc/problems/Explicit.cc 2010-05-04 19:58:46 UTC (rev 16623)
@@ -56,15 +56,12 @@
const int spaceDim = cs->spaceDim();
// Get sections.
- double_array dispIncrVertex(spaceDim);
const ALE::Obj<RealSection>& dispIncrSection = dispIncr.section();
assert(!dispIncrSection.isNull());
- double_array dispTVertex(spaceDim);
const ALE::Obj<RealSection>& dispTSection = _fields->get("disp(t)").section();
assert(!dispTSection.isNull());
- double_array dispTmdtVertex(spaceDim);
const ALE::Obj<RealSection>& dispTmdtSection =
_fields->get("disp(t-dt)").section();
assert(!dispTmdtSection.isNull());
@@ -91,15 +88,21 @@
for (SieveMesh::label_sequence::iterator v_iter=verticesBegin;
v_iter != verticesEnd;
++v_iter) {
- dispIncrSection->restrictPoint(*v_iter, &dispIncrVertex[0],
- dispIncrVertex.size());
- dispTSection->restrictPoint(*v_iter, &dispTVertex[0],
- dispTVertex.size());
- dispTmdtSection->restrictPoint(*v_iter, &dispTmdtVertex[0],
- dispTmdtVertex.size());
+ assert(spaceDim == dispIncrSection->getFiberDimension(*v_iter));
+ const double* dispIncrVertex = dispIncrSection->restrictPoint(*v_iter);
- velVertex = (dispIncrVertex + dispTVertex - dispTmdtVertex) / twodt;
- accVertex = (dispIncrVertex - dispTVertex + dispTmdtVertex) / dt2;
+ assert(spaceDim == dispTSection->getFiberDimension(*v_iter));
+ const double* dispTVertex = dispTSection->restrictPoint(*v_iter);
+
+ assert(spaceDim == dispTmdtSection->getFiberDimension(*v_iter));
+ const double* dispTmdtVertex = dispTmdtSection->restrictPoint(*v_iter);
+
+ for (int i=0; i < spaceDim; ++i) {
+ velVertex[i] =
+ (dispIncrVertex[i] + dispTVertex[i] - dispTmdtVertex[i]) / twodt;
+ accVertex[i] =
+ (dispIncrVertex[i] - dispTVertex[i] + dispTmdtVertex[i]) / dt2;
+ } // for
assert(velSection->getFiberDimension(*v_iter) == spaceDim);
velSection->updatePoint(*v_iter, &velVertex[0]);
Modified: short/3D/PyLith/trunk/libsrc/problems/SolverLumped.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/problems/SolverLumped.cc 2010-05-04 18:51:01 UTC (rev 16622)
+++ short/3D/PyLith/trunk/libsrc/problems/SolverLumped.cc 2010-05-04 19:58:46 UTC (rev 16623)
@@ -97,11 +97,9 @@
const ALE::Obj<RealSection>& solutionSection = solution->section();
assert(!solutionSection.isNull());
- double_array jacobianVertex(spaceDim);
const ALE::Obj<RealSection>& jacobianSection = jacobian.section();
assert(!jacobianSection.isNull());
- double_array residualVertex(spaceDim);
const ALE::Obj<RealSection>& residualSection = residual.section();
assert(!residualSection.isNull());
@@ -111,17 +109,16 @@
for (SieveMesh::label_sequence::iterator v_iter=verticesBegin;
v_iter != verticesEnd;
++v_iter) {
- jacobianSection->restrictPoint(*v_iter, &jacobianVertex[0],
- jacobianVertex.size());
- residualSection->restrictPoint(*v_iter, &residualVertex[0],
- residualVertex.size());
+ assert(spaceDim == jacobianSection->getFiberDimension(*v_iter));
+ const double* jacobianVertex = jacobianSection->restrictPoint(*v_iter);
-#if !defined(NDEBUG)
- for (int i=0; i < spaceDim; ++i)
- assert(jacobianVertex[i] != 0.0);
-#endif
+ assert(spaceDim == residualSection->getFiberDimension(*v_iter));
+ const double* residualVertex = residualSection->restrictPoint(*v_iter);
- solutionVertex = residualVertex / jacobianVertex;
+ for (int i=0; i < spaceDim; ++i) {
+ assert(jacobianVertex[i] != 0.0);
+ solutionVertex[i] = residualVertex[i] / jacobianVertex[i];
+ } // for
assert(solutionSection->getFiberDimension(*v_iter) == spaceDim);
solutionSection->updatePoint(*v_iter, &solutionVertex[0]);
More information about the CIG-COMMITS
mailing list