[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