[cig-commits] r8151 - short/3D/PyLith/trunk/libsrc/feassemble

brad at geodynamics.org brad at geodynamics.org
Thu Oct 18 17:28:55 PDT 2007


Author: brad
Date: 2007-10-18 17:28:55 -0700 (Thu, 18 Oct 2007)
New Revision: 8151

Modified:
   short/3D/PyLith/trunk/libsrc/feassemble/Quadrature.cc
Log:
Added error checking of array sizes in retrieving geometry.

Modified: short/3D/PyLith/trunk/libsrc/feassemble/Quadrature.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Quadrature.cc	2007-10-18 23:11:08 UTC (rev 8150)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Quadrature.cc	2007-10-19 00:28:55 UTC (rev 8151)
@@ -257,71 +257,104 @@
   } // if
 } // _checkJacobianDet
 
+// ----------------------------------------------------------------------
 void
 pylith::feassemble::Quadrature::resetPrecomputation()
-{
+{ // resetPrecomputation
   _precomputed = false;
   _quadPtsPre->clear();
   _jacobianPre->clear();
   _jacobianDetPre->clear();
   _jacobianInvPre->clear();
   _basisDerivPre->clear();
-}
+} // resetPrecomputation
 
+// ----------------------------------------------------------------------
 void
-pylith::feassemble::Quadrature::precomputeGeometry(const ALE::Obj<Mesh>& mesh,
-                                                   const ALE::Obj<real_section_type>& coordinates,
-                                                   const ALE::Obj<Mesh::label_sequence>& cells)
-{
+pylith::feassemble::Quadrature::precomputeGeometry(
+			      const ALE::Obj<Mesh>& mesh,
+			      const ALE::Obj<real_section_type>& coordinates,
+			      const ALE::Obj<Mesh::label_sequence>& cells)
+{ // precomputeGeometry
   if (_precomputed) return;
   const Mesh::label_sequence::iterator end = cells->end();
 
-  _quadPtsPre->setFiberDimension(cells, _numQuadPts * _spaceDim);
+  _quadPtsPre->setFiberDimension(cells, _numQuadPts*_spaceDim);
   _quadPtsPre->allocatePoint();
   _jacobianPre->getAtlas()->setAtlas(_quadPtsPre->getAtlas()->getAtlas());
-  _jacobianPre->setFiberDimension(cells, _numQuadPts * _cellDim * _spaceDim);
+  _jacobianPre->setFiberDimension(cells, _numQuadPts*_cellDim*_spaceDim);
   _jacobianPre->allocatePoint();
   _jacobianDetPre->getAtlas()->setAtlas(_quadPtsPre->getAtlas()->getAtlas());
   _jacobianDetPre->setFiberDimension(cells, _numQuadPts);
   _jacobianDetPre->allocatePoint();
   _jacobianInvPre->setAtlas(_jacobianPre->getAtlas());
-  _jacobianInvPre->setFiberDimension(cells, _numQuadPts * _cellDim * _spaceDim);
+  _jacobianInvPre->setFiberDimension(cells, _numQuadPts*_cellDim*_spaceDim);
   _jacobianInvPre->allocatePoint();
   _basisDerivPre->getAtlas()->setAtlas(_quadPtsPre->getAtlas()->getAtlas());
-  _basisDerivPre->setFiberDimension(cells, _numQuadPts * _numBasis * _spaceDim);
+  _basisDerivPre->setFiberDimension(cells, _numQuadPts*_numBasis*_spaceDim);
   _basisDerivPre->allocatePoint();
-  for(Mesh::label_sequence::iterator c_iter = cells->begin(); c_iter != end; ++c_iter) {
+
+  for(Mesh::label_sequence::iterator c_iter = cells->begin();
+      c_iter != end;
+      ++c_iter) {
     this->computeGeometry(mesh, coordinates, *c_iter);
+
     // Set coordinates of quadrature points in cell
     _quadPtsPre->updatePoint(*c_iter, &_quadPts[0]);
+
     // Set Jacobian at quadrature points in cell
     _jacobianPre->updatePoint(*c_iter, &_jacobian[0]);
+
     // Set determinant of Jacobian at quadrature points in cell
     _jacobianDetPre->updatePoint(*c_iter, &_jacobianDet[0]);
+
     // Set inverse of Jacobian at quadrature points in cell
     _jacobianInvPre->updatePoint(*c_iter, &_jacobianInv[0]);
+
     // Set derivatives of basis functions with respect to global
     _basisDerivPre->updatePoint(*c_iter, &_basisDeriv[0]);
-  }
+  } // for
   _precomputed = true;
-}
+} // precomputeGeometry
 
+// ----------------------------------------------------------------------
 void
-pylith::feassemble::Quadrature::retrieveGeometry(const ALE::Obj<Mesh>& mesh,
-                                                 const ALE::Obj<real_section_type>& coordinates,
-                                                 const Mesh::point_type& cell)
-{
+pylith::feassemble::Quadrature::retrieveGeometry(
+			      const ALE::Obj<Mesh>& mesh,
+                              const ALE::Obj<real_section_type>& coordinates,
+			      const Mesh::point_type& cell)
+{ // retrieveGeometry
   // Do they have a fast copy?
-  const real_section_type::value_type *values = _quadPtsPre->restrictPoint(cell);
-  for(int i = 0; i < _numQuadPts * _spaceDim; ++i) _quadPts[i] = values[i];
+  const real_section_type::value_type* values =
+    _quadPtsPre->restrictPoint(cell);
+  int size = _numQuadPts * _spaceDim;
+  assert(size == _quadPtsPre->getFiberDimension(cell));
+  for(int i=0; i < size; ++i)
+    _quadPts[i] = values[i];
+  
   values = _jacobianPre->restrictPoint(cell);
-  for(int i = 0; i < _numQuadPts * _cellDim * _spaceDim; ++i) _jacobian[i] = values[i];
+  size = _numQuadPts * _cellDim * _spaceDim;
+  assert(size == _jacobianPre->getFiberDimension(cell));
+  for(int i=0; i < size; ++i)
+    _jacobian[i] = values[i];
+
   values = _jacobianDetPre->restrictPoint(cell);
-  for(int i = 0; i < _numQuadPts; ++i) _jacobianDet[i] = values[i];
+  size = _numQuadPts;
+  assert(size == _jacobianDetPre->getFiberDimension(cell));
+  for(int i=0; i < size; ++i)
+    _jacobianDet[i] = values[i];
+
   values = _jacobianInvPre->restrictPoint(cell);
-  for(int i = 0; i < _numQuadPts * _cellDim * _spaceDim; ++i) _jacobianInv[i] = values[i];
+  size = _numQuadPts * _cellDim * _spaceDim;
+  assert(size == _jacobianInvPre->getFiberDimension(cell));
+  for(int i=0; i < size; ++i)
+    _jacobianInv[i] = values[i];
+
   values = _basisDerivPre->restrictPoint(cell);
-  for(int i = 0; i < _numQuadPts * _numBasis * _spaceDim; ++i) _basisDeriv[i] = values[i];
-}
+  size = _numQuadPts * _numBasis * _spaceDim;
+  assert(size == _basisDerivPre->getFiberDimension(cell));
+  for(int i=0; i < size; ++i)
+    _basisDeriv[i] = values[i];
+} // retrieveGeometry
 
 // End of file 



More information about the cig-commits mailing list