[cig-commits] r8061 - short/3D/PyLith/trunk/libsrc/materials
brad at geodynamics.org
brad at geodynamics.org
Fri Sep 28 17:10:09 PDT 2007
Author: brad
Date: 2007-09-28 17:10:09 -0700 (Fri, 28 Sep 2007)
New Revision: 8061
Modified:
short/3D/PyLith/trunk/libsrc/materials/ElasticMaterial.cc
short/3D/PyLith/trunk/libsrc/materials/ElasticMaterial.hh
Log:
Eliminated use of small temporary array in ElasticMaterial::updateState(). Added buffer _parameterCell to object to replace temporary array.
Modified: short/3D/PyLith/trunk/libsrc/materials/ElasticMaterial.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/materials/ElasticMaterial.cc 2007-09-29 00:00:34 UTC (rev 8060)
+++ short/3D/PyLith/trunk/libsrc/materials/ElasticMaterial.cc 2007-09-29 00:10:09 UTC (rev 8061)
@@ -99,16 +99,23 @@
_density.resize(numQuadPts);
_stress.resize(numQuadPts);
_elasticConsts.resize(numQuadPts);
+
+ const int_array& numParamValues = _getNumParamValues();
+ const int numParams = numParamValues.size();
for (int iQuad=0; iQuad < numQuadPts; ++iQuad) {
_density[iQuad].resize(1);
_stress[iQuad].resize(_tensorSize());
_elasticConsts[iQuad].resize(_numElasticConsts());
- const int_array& numParamValues = _getNumParamValues();
- const int numParams = numParamValues.size();
_paramsCell[iQuad].resize(numParams);
for (int iParam=0; iParam < numParams; ++iParam)
_paramsCell[iQuad][iParam].resize(numParamValues[iParam]);
} // for
+
+ int maxNumValues = 0;
+ for (int iParam=0; iParam < numParams; ++iParam)
+ if (numParamValues[iParam] > maxNumValues)
+ maxNumValues = numParamValues[iParam];
+ _parameterCell.resize(numQuadPts*maxNumValues);
} // if
_getParameters(cell);
@@ -133,19 +140,19 @@
const char** paramNames = _parameterNames();
for (int iParam=0; iParam < numParams; ++iParam) {
- const ALE::Obj<real_section_type> parameter =
+ const ALE::Obj<real_section_type>& parameter =
_parameters->getReal(paramNames[iParam]);
assert(!parameter.isNull());
const int numValues = numParamValues[iParam];
- double_array parameterCell(numQuadPts*numValues);
+ assert(_parameterCell.size() >= numQuadPts*numValues);
assert(parameter->getFiberDimension(cell) == numQuadPts*numValues);
for (int iQuadPt=0; iQuadPt < numQuadPts; ++iQuadPt)
for (int iValue=0; iValue < numValues; ++iValue)
- parameterCell[iQuadPt*numValues+iValue] =
+ _parameterCell[iQuadPt*numValues+iValue] =
_paramsCell[iQuadPt][iParam][iValue];
- parameter->updatePoint(cell, ¶meterCell[0]);
+ parameter->updatePoint(cell, &_parameterCell[0]);
} // for
} // updateState
@@ -169,7 +176,6 @@
assert(!parameter.isNull());
const int numValues = numParamValues[iParam];
-
assert(parameter->getFiberDimension(cell) == numQuadPts*numValues);
const real_section_type::value_type* parameterCell =
parameter->restrictPoint(cell);
Modified: short/3D/PyLith/trunk/libsrc/materials/ElasticMaterial.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/materials/ElasticMaterial.hh 2007-09-29 00:00:34 UTC (rev 8060)
+++ short/3D/PyLith/trunk/libsrc/materials/ElasticMaterial.hh 2007-09-29 00:10:09 UTC (rev 8061)
@@ -225,6 +225,13 @@
*/
std::vector<std::vector<double_array> > _paramsCell;
+ /** Single parameter at quadrature points for current cell.
+ *
+ * size = [numQuadPts*numValues]
+ * index = [iQuadPt*numValues+iValue]
+ */
+ double_array _parameterCell;
+
/** Density value at quadrature points for current cell.
*
* size = [numQuadPts][1]
More information about the cig-commits
mailing list