[cig-commits] r6661 - short/3D/PyLith/trunk/libsrc/feassemble
brad at geodynamics.org
brad at geodynamics.org
Tue Apr 24 14:16:39 PDT 2007
Author: brad
Date: 2007-04-24 14:16:39 -0700 (Tue, 24 Apr 2007)
New Revision: 6661
Modified:
short/3D/PyLith/trunk/libsrc/feassemble/ExplicitElasticity.cc
short/3D/PyLith/trunk/libsrc/feassemble/IntegratorElasticity.cc
short/3D/PyLith/trunk/libsrc/feassemble/IntegratorElasticity.hh
Log:
Factored out dimension from calcTotalStrain, so that there is calcTotalStrain1D(), calcTotalStrain2D(), and calcTotalStrain3D().
Modified: short/3D/PyLith/trunk/libsrc/feassemble/ExplicitElasticity.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/ExplicitElasticity.cc 2007-04-24 21:15:01 UTC (rev 6660)
+++ short/3D/PyLith/trunk/libsrc/feassemble/ExplicitElasticity.cc 2007-04-24 21:16:39 UTC (rev 6661)
@@ -176,8 +176,8 @@
// Compute action for elastic terms
if (1 == cellDim) {
// Compute stresses
- IntegratorElasticity::calcTotalStrain(&totalStrain, basisDeriv,
- dispTCell, cellDim, numBasis);
+ IntegratorElasticity::calcTotalStrain1D(&totalStrain, basisDeriv,
+ dispTCell, numBasis);
const std::vector<double_array>& stress =
_material->calcStress(totalStrain);
@@ -197,8 +197,8 @@
} else if (2 == cellDim) {
// Compute stresses
- IntegratorElasticity::calcTotalStrain(&totalStrain, basisDeriv,
- dispTCell, cellDim, numBasis);
+ IntegratorElasticity::calcTotalStrain2D(&totalStrain, basisDeriv,
+ dispTCell, numBasis);
const std::vector<double_array>& stress =
_material->calcStress(totalStrain);
@@ -222,8 +222,8 @@
} else if (3 == cellDim) {
// Compute stresses
- IntegratorElasticity::calcTotalStrain(&totalStrain, basisDeriv,
- dispTCell, cellDim, numBasis);
+ IntegratorElasticity::calcTotalStrain3D(&totalStrain, basisDeriv,
+ dispTCell, numBasis);
const std::vector<double_array>& stress =
_material->calcStress(totalStrain);
Modified: short/3D/PyLith/trunk/libsrc/feassemble/IntegratorElasticity.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/IntegratorElasticity.cc 2007-04-24 21:15:01 UTC (rev 6660)
+++ short/3D/PyLith/trunk/libsrc/feassemble/IntegratorElasticity.cc 2007-04-24 21:16:39 UTC (rev 6661)
@@ -19,64 +19,92 @@
// ----------------------------------------------------------------------
void
-pylith::feassemble::IntegratorElasticity::calcTotalStrain(
- std::vector<double_array>* strain,
- const double_array& basisDeriv,
- const double* disp,
- const int dimension,
- const int numBasis)
-{ // calcTotalStrain
+pylith::feassemble::IntegratorElasticity::calcTotalStrain1D(
+ std::vector<double_array>* strain,
+ const double_array& basisDeriv,
+ const double* disp,
+ const int numBasis)
+{ // calcTotalStrain1D
assert(0 != strain);
+
+ const int dimension = 1;
+ const int numQuadPts = strain->size();
+ assert(basisDeriv.size() == numQuadPts*numBasis*dimension);
+
+ for (int iQuad=0; iQuad < numQuadPts; ++iQuad) {
+ assert(1 == (*strain)[iQuad].size());
+ for (int iBasis=0; iBasis < numBasis; ++iBasis)
+ (*strain)[iQuad][0] +=
+ basisDeriv[iQuad*numBasis+iBasis] * disp[iBasis];
+ } // for
+} // calcTotalStrain1D
+
+// ----------------------------------------------------------------------
+void
+pylith::feassemble::IntegratorElasticity::calcTotalStrain2D(
+ std::vector<double_array>* strain,
+ const double_array& basisDeriv,
+ const double* disp,
+ const int numBasis)
+{ // calcTotalStrain2D
+ assert(0 != strain);
+
+ const int dimension = 2;
const int numQuadPts = strain->size();
assert(basisDeriv.size() == numQuadPts*numBasis*dimension);
- if (3 == dimension) {
- for (int iQuad=0; iQuad < numQuadPts; ++iQuad) {
- assert(6 == (*strain)[iQuad].size());
- for (int iBasis=0, iQ=iQuad*numBasis; iBasis < numBasis; ++iBasis) {
- strain[iQuad][0] +=
- basisDeriv[iQ+iBasis ] * disp[iBasis ];
- strain[iQuad][1] +=
- basisDeriv[iQ+iBasis+1] * disp[iBasis+1];
- strain[iQuad][2] +=
- basisDeriv[iQ+iBasis+2] * disp[iBasis+2];
- strain[iQuad][3] +=
- 0.5 * (basisDeriv[iQ+iBasis+1] * disp[iBasis ] +
- basisDeriv[iQ+iBasis ] * disp[iBasis+1]);
- strain[iQuad][4] +=
- 0.5 * (basisDeriv[iQ+iBasis+2] * disp[iBasis+1] +
- basisDeriv[iQ+iBasis+1] * disp[iBasis+2]);
- strain[iQuad][5] +=
- 0.5 * (basisDeriv[iQ+iBasis+2] * disp[iBasis ] +
- basisDeriv[iQ+iBasis ] * disp[iBasis+2]);
- } // for
+ for (int iQuad=0; iQuad < numQuadPts; ++iQuad) {
+ assert(3 == (*strain)[iQuad].size());
+ for (int iBasis=0, iQ=iQuad*numBasis; iBasis < numBasis; ++iBasis) {
+ strain[iQuad][0] +=
+ basisDeriv[iQ+iBasis ] * disp[iBasis ];
+ strain[iQuad][1] +=
+ basisDeriv[iQ+iBasis+1] * disp[iBasis+1];
+ strain[iQuad][2] +=
+ 0.5 * (basisDeriv[iQ+iBasis+1] * disp[iBasis ] +
+ basisDeriv[iQ+iBasis ] * disp[iBasis+1]);
} // for
- } else if (2 == dimension) {
- for (int iQuad=0; iQuad < numQuadPts; ++iQuad) {
- assert(3 == (*strain)[iQuad].size());
- for (int iBasis=0, iQ=iQuad*numBasis; iBasis < numBasis; ++iBasis) {
- strain[iQuad][0] +=
- basisDeriv[iQ+iBasis ] * disp[iBasis ];
- strain[iQuad][1] +=
- basisDeriv[iQ+iBasis+1] * disp[iBasis+1];
- strain[iQuad][2] +=
- 0.5 * (basisDeriv[iQ+iBasis+1] * disp[iBasis ] +
- basisDeriv[iQ+iBasis ] * disp[iBasis+1]);
- } // for
+ } // for
+} // calcTotalStrain2D
+
+// ----------------------------------------------------------------------
+void
+pylith::feassemble::IntegratorElasticity::calcTotalStrain3D(
+ std::vector<double_array>* strain,
+ const double_array& basisDeriv,
+ const double* disp,
+ const int numBasis)
+{ // calcTotalStrain3D
+ assert(0 != strain);
+
+ const int dimension = 3;
+ const int numQuadPts = strain->size();
+
+ assert(basisDeriv.size() == numQuadPts*numBasis*dimension);
+
+ for (int iQuad=0; iQuad < numQuadPts; ++iQuad) {
+ assert(6 == (*strain)[iQuad].size());
+ for (int iBasis=0, iQ=iQuad*numBasis; iBasis < numBasis; ++iBasis) {
+ strain[iQuad][0] +=
+ basisDeriv[iQ+iBasis ] * disp[iBasis ];
+ strain[iQuad][1] +=
+ basisDeriv[iQ+iBasis+1] * disp[iBasis+1];
+ strain[iQuad][2] +=
+ basisDeriv[iQ+iBasis+2] * disp[iBasis+2];
+ strain[iQuad][3] +=
+ 0.5 * (basisDeriv[iQ+iBasis+1] * disp[iBasis ] +
+ basisDeriv[iQ+iBasis ] * disp[iBasis+1]);
+ strain[iQuad][4] +=
+ 0.5 * (basisDeriv[iQ+iBasis+2] * disp[iBasis+1] +
+ basisDeriv[iQ+iBasis+1] * disp[iBasis+2]);
+ strain[iQuad][5] +=
+ 0.5 * (basisDeriv[iQ+iBasis+2] * disp[iBasis ] +
+ basisDeriv[iQ+iBasis ] * disp[iBasis+2]);
} // for
- } else if (1 == dimension) {
- for (int iQuad=0; iQuad < numQuadPts; ++iQuad) {
- assert(1 == (*strain)[iQuad].size());
- for (int iBasis=0; iBasis < numBasis; ++iBasis)
- (*strain)[iQuad][0] +=
- basisDeriv[iQuad*numBasis+iBasis] * disp[iBasis];
- } // for
- } else {
- throw std::logic_error("Dimension out of range.");
- } // else
-} // calcTotalStrain
+ } // for
+} // calcTotalStrain3D
// End of file
Modified: short/3D/PyLith/trunk/libsrc/feassemble/IntegratorElasticity.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/IntegratorElasticity.hh 2007-04-24 21:15:01 UTC (rev 6660)
+++ short/3D/PyLith/trunk/libsrc/feassemble/IntegratorElasticity.hh 2007-04-24 21:16:39 UTC (rev 6661)
@@ -46,12 +46,39 @@
*/
static
- void calcTotalStrain(std::vector<double_array>* strain,
- const double_array& basisDeriv,
- const double* disp,
- const int dimension,
- const int numBasis);
+ void calcTotalStrain1D(std::vector<double_array>* strain,
+ const double_array& basisDeriv,
+ const double* disp,
+ const int numBasis);
+ /** Compute total strain in at quadrature points of a cell.
+ *
+ * @param strain Strain tensor at quadrature points.
+ * @param basisDeriv Derivatives of basis functions at quadrature points.
+ * @param disp Displacement at vertices of cell.
+ * @param numBasis Number of basis functions for cell.
+ */
+
+ static
+ void calcTotalStrain2D(std::vector<double_array>* strain,
+ const double_array& basisDeriv,
+ const double* disp,
+ const int numBasis);
+
+ /** Compute total strain in at quadrature points of a cell.
+ *
+ * @param strain Strain tensor at quadrature points.
+ * @param basisDeriv Derivatives of basis functions at quadrature points.
+ * @param disp Displacement at vertices of cell.
+ * @param numBasis Number of basis functions for cell.
+ */
+
+ static
+ void calcTotalStrain3D(std::vector<double_array>* strain,
+ const double_array& basisDeriv,
+ const double* disp,
+ const int numBasis);
+
}; // IntegratorElasticity
#endif // pylith_feassemble_integratorelasticity_hh
More information about the cig-commits
mailing list