[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