[cig-commits] r7018 - in short/3D/PyLith/trunk: . libsrc/feassemble

brad at geodynamics.org brad at geodynamics.org
Thu May 31 12:27:36 PDT 2007


Author: brad
Date: 2007-05-31 12:27:36 -0700 (Thu, 31 May 2007)
New Revision: 7018

Modified:
   short/3D/PyLith/trunk/TODO
   short/3D/PyLith/trunk/libsrc/feassemble/ElasticityExplicit.cc
   short/3D/PyLith/trunk/libsrc/feassemble/ElasticityImplicit.cc
Log:
Added use of mesh->restrict() with preallocated array in elasticity integrators.

Modified: short/3D/PyLith/trunk/TODO
===================================================================
--- short/3D/PyLith/trunk/TODO	2007-05-31 19:10:10 UTC (rev 7017)
+++ short/3D/PyLith/trunk/TODO	2007-05-31 19:27:36 UTC (rev 7018)
@@ -2,15 +2,9 @@
 MAIN PRIORITIES (Brad)
 ======================================================================
 
-topology
+topology module
   add section->add(fieldA, fieldB)
 
-ElasticityExplicit
-  use new mesh->restrict() [preallocated array]
-
-ElasticityImplicit
-  use new mesh->restrict() [preallocated array]
-
 Implicit.py
   use section->add(fieldA, fieldB)
 
@@ -20,7 +14,7 @@
 
   a. Add unit test for IntegratorElasticity::calcTotalStrain
 
-  c. ElasticityImplicit
+  b. ElasticityImplicit
     i. C++ unit tests
       (1) timeStep()
       (2) stableTimeStep()

Modified: short/3D/PyLith/trunk/libsrc/feassemble/ElasticityExplicit.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/ElasticityExplicit.cc	2007-05-31 19:10:10 UTC (rev 7017)
+++ short/3D/PyLith/trunk/libsrc/feassemble/ElasticityExplicit.cc	2007-05-31 19:27:36 UTC (rev 7018)
@@ -116,8 +116,12 @@
   if (cellDim != spaceDim)
     throw std::logic_error("Not implemented yet.");
 
-  // Allocate vector for cell values (if necessary)
+  // Allocate vectors for cell values.
   _initCellVector();
+  const int cellVecSize = spaceDim*numBasis;
+  double_array dispTpdtCell(cellVecSize);
+  double_array dispTCell(cellVecSize);
+  double_array dispTmdtCell(cellVecSize);
 
   // Allocate vector for total strain
   int tensorSize = 0;
@@ -150,10 +154,9 @@
     _resetCellVector();
 
     // Restrict input fields to cell
-    const int vecSize = spaceDim*numBasis;
-    double_array dispTpdtCell(mesh->restrict(dispTpdt, *c_iter), vecSize);
-    double_array dispTCell(mesh->restrict(dispT, *c_iter), vecSize);
-    double_array dispTmdtCell(mesh->restrict(dispTmdt, *c_iter), vecSize);
+    mesh->restrict(dispTpdt, *c_iter, &dispTpdtCell[0], cellVecSize);
+    mesh->restrict(dispT, *c_iter, &dispTCell[0], cellVecSize);
+    mesh->restrict(dispTmdt, *c_iter, &dispTmdtCell[0], cellVecSize);
 
     // Get cell geometry information that depends on cell
     const double_array& basis = _quadrature->basis();
@@ -393,6 +396,9 @@
   const int spaceDim = _quadrature->spaceDim();
   const int cellDim = _quadrature->cellDim();
 
+  const int cellVecSize = spaceDim*numBasis;
+  double_array dispCell(cellVecSize);
+
   // Allocate vector for total strain
   int tensorSize = 0;
   if (1 == cellDim)
@@ -421,8 +427,7 @@
     _material->initCellData(*c_iter, numQuadPts);
 
     // Restrict input fields to cell
-    const int vecSize = spaceDim*numBasis;
-    double_array dispCell(mesh->restrict(disp, *c_iter), vecSize);
+    mesh->restrict(disp, *c_iter, &dispCell[0], cellVecSize);
 
     // Get cell geometry information that depends on cell
     const double_array& basisDeriv = _quadrature->basisDeriv();

Modified: short/3D/PyLith/trunk/libsrc/feassemble/ElasticityImplicit.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/ElasticityImplicit.cc	2007-05-31 19:10:10 UTC (rev 7017)
+++ short/3D/PyLith/trunk/libsrc/feassemble/ElasticityImplicit.cc	2007-05-31 19:27:36 UTC (rev 7018)
@@ -97,8 +97,11 @@
   const int spaceDim = _quadrature->spaceDim();
   const int cellDim = _quadrature->cellDim();
 
-  // Allocate vector for cell values (if necessary)
+  // Allocate vector for cell values.
   _initCellVector();
+  const int cellVecSize = spaceDim*numBasis;
+  double_array dispTCell(cellVecSize);
+  //double_array gravCell(cellVecSize);
 
   // Allocate vector for total strain
   int tensorSize = 0;
@@ -130,8 +133,7 @@
     _resetCellVector();
 
     // Restrict input fields to cell
-    const int vecSize = spaceDim*numBasis;
-    double_array dispTCell(mesh->restrict(dispT, *c_iter), vecSize);
+    mesh->restrict(dispT, *c_iter, &dispTCell[0], cellVecSize);
 
     // Get cell geometry information that depends on cell
     const double_array& basis = _quadrature->basis();
@@ -150,8 +152,7 @@
 
     // Compute action for element body forces
     if (!grav.isNull()) {
-      const real_section_type::value_type* gravCell =
-	mesh->restrict(grav, cell);
+      mesh->restrict(grav, *c_iter, &gravCell[0], cellVecSize);
       for (int iQuad=0; iQuad < numQuadPts; ++iQuad) {
 	const double wt = quadWts[iQuad] * jacobianDet[iQuad] * density[iQuad];
 	for (int iBasis=0, iQ=iQuad*numBasis*cellDim;
@@ -301,8 +302,10 @@
   if (cellDim != spaceDim)
     throw std::logic_error("Not implemented yet.");
 
-  // Allocate vector for cell values (if necessary)
+  // Allocate matrix and vectors for cell values.
   _initCellMatrix();
+  const int cellVecSize = spaceDim*numBasis;
+  double_array dispTCell(cellVecSize);
 
   // Allocate vector for total strain
   int tensorSize = 0;
@@ -334,8 +337,7 @@
     _resetCellMatrix();
 
     // Restrict input fields to cell
-    const int vecSize = spaceDim*numBasis;
-    double_array dispTCell(mesh->restrict(dispT, *c_iter), vecSize);
+    mesh->restrict(dispT, *c_iter, &dispTCell[0], cellVecSize);
 
     // Get cell geometry information that depends on cell
     const double_array& basis = _quadrature->basis();
@@ -554,6 +556,9 @@
   const int spaceDim = _quadrature->spaceDim();
   const int cellDim = _quadrature->cellDim();
 
+  const int cellVecSize = spaceDim*numBasis;
+  double_array dispCell(cellVecSize);
+
   // Allocate vector for total strain
   int tensorSize = 0;
   if (1 == cellDim)
@@ -582,8 +587,7 @@
     _material->initCellData(*c_iter, numQuadPts);
 
     // Restrict input fields to cell
-    const int vecSize = spaceDim*numBasis;
-    double_array dispCell(mesh->restrict(disp, *c_iter), vecSize);
+    mesh->restrict(disp, *c_iter, &dispCell[0], cellVecSize);
 
     // Get cell geometry information that depends on cell
     const double_array& basisDeriv = _quadrature->basisDeriv();



More information about the cig-commits mailing list