[cig-commits] r4666 - short/3D/PyLith/trunk/libsrc/feassemble
baagaard at geodynamics.org
baagaard at geodynamics.org
Thu Sep 28 22:07:59 PDT 2006
Author: baagaard
Date: 2006-09-28 22:07:58 -0700 (Thu, 28 Sep 2006)
New Revision: 4666
Added:
short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2Din3D.cc
short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2Din3D.hh
short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2Din3D.icc
short/3D/PyLith/trunk/libsrc/feassemble/Quadrature3D.cc
short/3D/PyLith/trunk/libsrc/feassemble/Quadrature3D.hh
short/3D/PyLith/trunk/libsrc/feassemble/Quadrature3D.icc
Modified:
short/3D/PyLith/trunk/libsrc/feassemble/Makefile.am
short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2D.cc
Log:
Added Quadrature2Din3D and Quadrature3D (not tested yet).
Modified: short/3D/PyLith/trunk/libsrc/feassemble/Makefile.am
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Makefile.am 2006-09-29 01:57:35 UTC (rev 4665)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Makefile.am 2006-09-29 05:07:58 UTC (rev 4666)
@@ -20,7 +20,9 @@
Quadrature1D.cc \
Quadrature1Din2D.cc \
Quadrature1Din3D.cc \
- Quadrature2D.cc
+ Quadrature2D.cc \
+ Quadrature2Din3D.cc \
+ Quadrature3D.cc
subpkginclude_HEADERS = \
Quadrature.hh \
@@ -32,7 +34,11 @@
Quadrature1Din3D.hh \
Quadrature1Din3D.icc \
Quadrature2D.hh \
- Quadrature2D.icc
+ Quadrature2D.icc \
+ Quadrature2Din3D.hh \
+ Quadrature2Din3D.icc \
+ Quadrature3D.hh \
+ Quadrature3D.icc
noinst_HEADERS =
Modified: short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2D.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2D.cc 2006-09-29 01:57:35 UTC (rev 4665)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2D.cc 2006-09-29 05:07:58 UTC (rev 4666)
@@ -83,26 +83,25 @@
// dy/dp = sum[i=0,n-1] (dNi/dp * yi)
// dx/dq = sum[i=0,n-1] (dNi/dq * xi)
// dy/dq = sum[i=0,n-1] (dNi/dq * yi)
- for (int iVertex=0;
- iVertex < _numCorners;
- ++iVertex)
+ for (int iVertex=0; iVertex < _numCorners; ++iVertex)
for (int iRow=0,
iB=iQuadPt*_numCorners*_spaceDim+iVertex*_cellDim;
iRow < _cellDim;
++iRow) {
const double deriv = _basisDeriv[iB+iRow];
for (int iCol=0, iJ=iQuadPt*_cellDim*_spaceDim + iRow*_spaceDim;
- iCol < _spaceDim; ++iCol)
- _jacobian[iJ + iCol] += deriv * vertCoords[iVertex*_spaceDim+iCol];
+ iCol < _spaceDim;
+ ++iCol)
+ _jacobian[iJ+iCol] += deriv * vertCoords[iVertex*_spaceDim+iCol];
} // for
// Compute determinant of Jacobian at quadrature point
// |J| = j00*j11-j01*j10
const int iJ = iQuadPt*_cellDim*_spaceDim;
const int i00 = iJ + 0*_spaceDim + 0;
- const int i11 = iJ + 1*_spaceDim + 1;
const int i01 = iJ + 0*_spaceDim + 1;
const int i10 = iJ + 1*_spaceDim + 0;
+ const int i11 = iJ + 1*_spaceDim + 1;
const double det =
_jacobian[i00]*_jacobian[i11] - _jacobian[i01]*_jacobian[i10];
_checkJacobianDet(det);
Added: short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2Din3D.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2Din3D.cc 2006-09-29 01:57:35 UTC (rev 4665)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2Din3D.cc 2006-09-29 05:07:58 UTC (rev 4666)
@@ -0,0 +1,193 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+// Brad T. Aagaard
+// U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+#include <portinfo>
+
+#include "Quadrature2Din3D.hh" // implementation of class methods
+
+#include <assert.h> // USES assert()
+#include <stdexcept> // USES internal_error
+
+// ----------------------------------------------------------------------
+// Constructor
+pylith::feassemble::Quadrature2Din3D::Quadrature2Din3D(void)
+{ // constructor
+} // constructor
+
+// ----------------------------------------------------------------------
+// Destructor
+pylith::feassemble::Quadrature2Din3D::~Quadrature2Din3D(void)
+{ // destructor
+} // destructor
+
+// ----------------------------------------------------------------------
+// Copy constructor.
+pylith::feassemble::Quadrature2Din3D::Quadrature2Din3D(const Quadrature2Din3D& q) :
+ Quadrature(q)
+{ // copy constructor
+} // copy constructor
+
+// ----------------------------------------------------------------------
+// Compute geometric quantities for a cell.
+void
+pylith::feassemble::Quadrature2Din3D::_computeGeometry(
+ const ALE::Obj<ALE::Mesh::section_type>& coordinates,
+ const ALE::Mesh::point_type& cell)
+{ // _computeGeometry
+ assert(2 == _cellDim);
+ assert(3 == _spaceDim);
+ assert(0 != _basisDeriv);
+ assert(0 != _quadPtsRef);
+ assert(0 != _quadPts);
+ assert(0 != _quadWts);
+ assert(0 != _jacobian);
+ assert(0 != _jacobianInv);
+
+ _resetGeometry();
+
+ // Get coordinates of cell's vertices
+ const ALE::Mesh::topology_type::patch_type patch = 0;
+ const ALE::Mesh::section_type::value_type* vertCoords =
+ coordinates->restrict(patch, cell);
+ //assert(3 == coordinates.GetFiberDimensionByDepth(patch,
+ //*vertices->begin(), 0));
+
+ // Loop over quadrature points
+ for (int iQuadPt=0; iQuadPt < _numQuadPts; ++iQuadPt) {
+
+ // Compute coordinates of quadrature point in cell
+ // x = sum[i=0,n-1] (Ni * xi)
+ // y = sum[i=0,n-1] (Ni * yi)
+ // z = sum[i=0,n-1] (Ni * zi)
+ for (int iVertex=0, iB=iQuadPt*_numCorners;
+ iVertex < _numCorners;
+ ++iVertex) {
+ const double basis = _basis[iB+iVertex];
+ for (int iDim=0, iQ=iQuadPt*_spaceDim, iV=iVertex*_spaceDim;
+ iDim < _spaceDim;
+ ++iDim)
+ _quadPts[iQ+iDim] += basis * vertCoords[iV+iDim];
+ } // for
+
+ // Compute Jacobian at quadrature point
+ // J = [dx/dp dy/dp dz/dp]
+ // [dx/dq dy/dq dz/dq]
+ // dx/dp = sum[i=0,n-1] (dNi/dp * xi)
+ // dy/dp = sum[i=0,n-1] (dNi/dp * yi)
+ // dz/dp = sum[i=0,n-1] (dNi/dp * zi)
+ // dx/dq = sum[i=0,n-1] (dNi/dq * xi)
+ // dy/dq = sum[i=0,n-1] (dNi/dq * yi)
+ // dz/dq = sum[i=0,n-1] (dNi/dq * zi)
+ for (int iVertex=0; iVertex < _numCorners; ++iVertex)
+ for (int iRow=0,
+ iB=iQuadPt*_numCorners*_spaceDim+iVertex*_cellDim;
+ iRow < _cellDim;
+ ++iRow) {
+ const double deriv = _basisDeriv[iB+iRow];
+ for (int iCol=0, iJ=iQuadPt*_cellDim*_spaceDim + iRow*_spaceDim;
+ iCol < _spaceDim;
+ ++iCol)
+ _jacobian[iJ+iCol] += deriv * vertCoords[iVertex*+_spaceDim+iCol];
+ } // for
+
+ // Compute determinant of Jacobian at quadrature point
+ // |J| = sqrt(J transpose(J))
+ const int iJ = iQuadPt*_cellDim*_spaceDim;
+ const int i00 = iJ + 0*_spaceDim + 0;
+ const int i01 = iJ + 0*_spaceDim + 1;
+ const int i02 = iJ + 0*_spaceDim + 2;
+ const int i10 = iJ + 1*_spaceDim + 0;
+ const int i11 = iJ + 1*_spaceDim + 1;
+ const int i12 = iJ + 1*_spaceDim + 2;
+ // JJ = J transpose(J)
+ const double jj00 =
+ _jacobian[i00]*_jacobian[i00] +
+ _jacobian[i01]*_jacobian[i01] +
+ _jacobian[i02]*_jacobian[i02];
+ const double jj01 =
+ _jacobian[i00]*_jacobian[i10] +
+ _jacobian[i01]*_jacobian[i11] +
+ _jacobian[i02]*_jacobian[i12];
+ const double jj10 = jj01;
+ const double jj11 =
+ _jacobian[i10]*_jacobian[i10] +
+ _jacobian[i11]*_jacobian[i11] +
+ _jacobian[i12]*_jacobian[i12];
+ const double det = sqrt(jj00*jj11 - jj01*jj10);
+ _checkJacobianDet(det);
+ _jacobianDet[iQuadPt] = det;
+
+ // Compute inverse of Jacobian at quadrature point
+ const double d01 =
+ _jacobian[i00]*_jacobian[i11] - _jacobian[i10]*_jacobian[i01];
+ const double d12 =
+ _jacobian[i01]*_jacobian[i12] - _jacobian[i11]*_jacobian[i02];
+ const double d02 =
+ _jacobian[i00]*_jacobian[i12] - _jacobian[i10]*_jacobian[i02];
+ if (d01 > _minJacobian) {
+ // Jinv00 = 1/d01 * J11
+ // Jinv10 = 1/d01 * -J10
+ // Jinv01 = 1/d01 * -J01
+ // Jinv11 = 1/d01 * J00
+ _jacobianInv[iJ+0] = _jacobian[i11] / d01; // Jinv00
+ _jacobianInv[iJ+1] = -_jacobian[i10] / d01; // Jinv10
+ _jacobianInv[iJ+2] = -_jacobian[i01] / d01; // Jinv01
+ _jacobianInv[iJ+3] = _jacobian[i00] / d01; // Jinv11
+ if (d12 > _minJacobian) {
+ // Jinv20 = 1/d12 -J11
+ // Jinv21 = 1/d12 J01
+ _jacobianInv[iJ+4] = -_jacobian[i11] / d12; // Jinv20
+ _jacobianInv[iJ+5] = _jacobian[i01] / d12; // Jinv21
+ } else if (d02 > _minJacobian) {
+ // Jinv20 = 1/d02 -J10
+ // Jinv21 = 1/d02 J00
+ _jacobianInv[iJ+4] = -_jacobian[i10] / d02; // Jinv20
+ _jacobianInv[iJ+5] = _jacobian[i00] / d02; // Jinv21
+ } else {
+ _jacobianInv[iJ+4] = 0.0; // Jinv20
+ _jacobianInv[iJ+5] = 0.0; // Jinv21
+ } // if/else
+ } else if (d02 > _minJacobian) {
+ // Jinv00 = 1/d02 * J12
+ // Jinv01 = 1/d02 * -J02
+ // Jinv20 = 1/d02 * -J10
+ // Jinv21 = 1/d02 * J00
+ _jacobianInv[iJ+0] = _jacobian[i12] / d02; // Jinv00
+ _jacobianInv[iJ+1] = -_jacobian[i02] / d02; // Jinv01
+ _jacobianInv[iJ+4] = -_jacobian[i10] / d02; // Jinv20
+ _jacobianInv[iJ+5] = _jacobian[i00] / d02; // Jinv21
+ if (d12 > _minJacobian) {
+ // Jinv10 = 1/d12 J12
+ // Jinv11 = 1/d12 -J02
+ _jacobianInv[iJ+2] = -_jacobian[i12] / d12; // Jinv10
+ _jacobianInv[iJ+3] = _jacobian[i02] / d12; // Jinv11
+ } else {
+ _jacobianInv[iJ+2] = 0.0; // Jinv10
+ _jacobianInv[iJ+3] = 0.0; // Jinv11
+ } // if/else
+ } else if (d12 > _minJacobian) {
+ _jacobianInv[iJ+0] = 0.0; // Jinv00
+ _jacobianInv[iJ+1] = 0.0; // Jinv01
+ // Jinv10 = 1/d12 J12
+ // Jinv11 = 1/d12 -J02
+ // Jinv20 = 1/d12 -J11
+ // Jinv21 = 1/d12 J01
+ _jacobianInv[iJ+2] = _jacobian[i12] / d12; // Jinv10
+ _jacobianInv[iJ+3] = -_jacobian[i02] / d12; // Jin11
+ _jacobianInv[iJ+4] = -_jacobian[i11] / d12; // Jinv20
+ _jacobianInv[iJ+5] = _jacobian[i01] / d12; // Jinv21
+ } else
+ throw std::runtime_error("Could not invert Jacobian.");
+ } // for
+} // _computeGeometry
+
+// End of file
Added: short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2Din3D.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2Din3D.hh 2006-09-29 01:57:35 UTC (rev 4665)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2Din3D.hh 2006-09-29 05:07:58 UTC (rev 4666)
@@ -0,0 +1,77 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+// Brad T. Aagaard
+// U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+/**
+ * @file pylith/feassemble/Quadrature2Din3D.hh
+ *
+ * @brief Quadrature for 2-D finite-elements in 3-D space.
+ */
+
+#if !defined(pylith_feassemble_quadrature2din3d_hh)
+#define pylith_feassemble_quadrature2din3d_hh
+
+#include "Quadrature.hh"
+
+namespace pylith {
+ namespace feassemble {
+ class Quadrature2Din3D;
+ class TestQuadrature2Din3D;
+ } // feassemble
+} // pylith
+
+class pylith::feassemble::Quadrature2Din3D : public Quadrature
+{ // Quadrature2D
+ friend class TestQuadrature2Din3D; // unit testing
+
+// PUBLIC MEMBERS ///////////////////////////////////////////////////////
+public :
+
+ /// Constructor
+ Quadrature2Din3D(void);
+
+ /// Destructor
+ virtual ~Quadrature2Din3D(void);
+
+ /// Create a copy of this object.
+ virtual
+ Quadrature* clone(void) const;
+
+// PROTECTED METHODS ////////////////////////////////////////////////////
+protected :
+
+ /** Copy constructor.
+ *
+ * @param q Quadrature to copy
+ */
+ Quadrature2Din3D(const Quadrature2Din3D& q);
+
+ /** Compute geometric quantities for a cell.
+ *
+ * @param coordinates Section containing vertex coordinates
+ * @param cell Finite-element cell
+ */
+ void _computeGeometry(const ALE::Obj<ALE::Mesh::section_type>& coordinates,
+ const ALE::Mesh::point_type& cell);
+
+// PRIVATE METHODS //////////////////////////////////////////////////////
+private :
+
+ /// Not implemented
+ const Quadrature2Din3D& operator=(const Quadrature2Din3D&);
+
+}; // Quadrature2Din3D
+
+#include "Quadrature2Din3D.icc" // inline methods
+
+#endif // pylith_feassemble_quadrature2din3d_hh
+
+// End of file
Added: short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2Din3D.icc
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2Din3D.icc 2006-09-29 01:57:35 UTC (rev 4665)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Quadrature2Din3D.icc 2006-09-29 05:07:58 UTC (rev 4666)
@@ -0,0 +1,26 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+// Brad T. Aagaard
+// U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+#if !defined(pylith_feassemble_quadrature2din3d_hh)
+#error "Quadrature2Din3D.icc must be included only from Quadrature2Din3D.hh"
+#else
+
+// Create a copy of this object.
+inline
+pylith::feassemble::Quadrature*
+pylith::feassemble::Quadrature2Din3D::clone(void) const {
+ return new Quadrature2Din3D(*this);
+} // clone
+
+#endif
+
+// End of file
Added: short/3D/PyLith/trunk/libsrc/feassemble/Quadrature3D.cc
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Quadrature3D.cc 2006-09-29 01:57:35 UTC (rev 4665)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Quadrature3D.cc 2006-09-29 05:07:58 UTC (rev 4666)
@@ -0,0 +1,151 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+// Brad T. Aagaard
+// U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+#include <portinfo>
+
+#include "Quadrature3D.hh" // implementation of class methods
+
+#include <assert.h> // USES assert()
+
+// ----------------------------------------------------------------------
+// Constructor
+pylith::feassemble::Quadrature3D::Quadrature3D(void)
+{ // constructor
+} // constructor
+
+// ----------------------------------------------------------------------
+// Destructor
+pylith::feassemble::Quadrature3D::~Quadrature3D(void)
+{ // destructor
+} // destructor
+
+// ----------------------------------------------------------------------
+// Copy constructor.
+pylith::feassemble::Quadrature3D::Quadrature3D(const Quadrature3D& q) :
+ Quadrature(q)
+{ // copy constructor
+} // copy constructor
+
+// ----------------------------------------------------------------------
+// Compute geometric quantities for a cell.
+void
+pylith::feassemble::Quadrature3D::_computeGeometry(
+ const ALE::Obj<ALE::Mesh::section_type>& coordinates,
+ const ALE::Mesh::point_type& cell)
+{ // _computeGeometry
+ assert(3 == _cellDim);
+ assert(3 == _spaceDim);
+ assert(0 != _basisDeriv);
+ assert(0 != _quadPtsRef);
+ assert(0 != _quadPts);
+ assert(0 != _quadWts);
+ assert(0 != _jacobian);
+ assert(0 != _jacobianInv);
+
+ _resetGeometry();
+
+ // Get coordinates of cell's vertices
+ const ALE::Mesh::topology_type::patch_type patch = 0;
+ const ALE::Mesh::section_type::value_type* vertCoords =
+ coordinates->restrict(patch, cell);
+ //assert(3 == coordinates.GetFiberDimensionByDepth(patch,
+ //*vertices->begin(), 0));
+
+ // Loop over quadrature points
+ for (int iQuadPt=0; iQuadPt < _numQuadPts; ++iQuadPt) {
+
+ // Compute coordinates of quadrature point in cell
+ // x = sum[i=0,n-1] (Ni * xi)
+ // y = sum[i=0,n-1] (Ni * yi)
+ // z = sum[i=0,n-1] (Ni * zi)
+ for (int iVertex=0, iB=iQuadPt*_numCorners;
+ iVertex < _numCorners;
+ ++iVertex) {
+ const double basis = _basis[iB+iVertex];
+ for (int iDim=0, iQ=iQuadPt*_spaceDim, iV=iVertex*_spaceDim;
+ iDim < _spaceDim;
+ ++iDim)
+ _quadPts[iQ+iDim] += basis * vertCoords[iV+iDim];
+ } // for
+
+ // Compute Jacobian at quadrature point
+ // J = [dx/dp dy/dp dz/dp]
+ // [dx/dq dy/dq dz/dq]
+ // [dx/dr dy/dr dz/dr]
+ // dx/dp = sum[i=0,n-1] (dNi/dp * xi)
+ // dy/dp = sum[i=0,n-1] (dNi/dp * yi)
+ // dz/dp = sum[i=0,n-1] (dNi/dp * zi)
+ // dx/dq = sum[i=0,n-1] (dNi/dq * xi)
+ // dy/dq = sum[i=0,n-1] (dNi/dq * yi)
+ // dz/dq = sum[i=0,n-1] (dNi/dq * zi)
+ // dx/dr = sum[i=0,n-1] (dNi/dr * xi)
+ // dy/dr = sum[i=0,n-1] (dNi/dr * yi)
+ // dz/dr = sum[i=0,n-1] (dNi/dr * zi)
+ for (int iVertex=0; iVertex < _numCorners; ++iVertex)
+ for (int iRow=0,
+ iB=iQuadPt*_numCorners*_spaceDim+iVertex*_cellDim;
+ iRow < _cellDim;
+ ++iRow) {
+ const double deriv = _basisDeriv[iB+iRow];
+ for (int iCol=0, iJ=iQuadPt*_cellDim*_spaceDim + iRow*_spaceDim;
+ iCol < _spaceDim;
+ ++iCol)
+ _jacobian[iJ+iCol] += deriv * vertCoords[iVertex*_spaceDim+iCol];
+ } // for
+
+ // Compute determinant of Jacobian at quadrature point
+ // |J| = j00*(j11*j22-j12*j21) +
+ // -j01*(j10*j22-j12*j20) +
+ // j02*(j10*j21-j11*j20)
+ const int iJ = iQuadPt*_cellDim*_spaceDim;
+ const int i00 = iJ + 0*_spaceDim + 0;
+ const int i01 = iJ + 0*_spaceDim + 1;
+ const int i02 = iJ + 0*_spaceDim + 2;
+ const int i10 = iJ + 1*_spaceDim + 0;
+ const int i11 = iJ + 1*_spaceDim + 1;
+ const int i12 = iJ + 1*_spaceDim + 2;
+ const int i20 = iJ + 2*_spaceDim + 0;
+ const int i21 = iJ + 2*_spaceDim + 1;
+ const int i22 = iJ + 2*_spaceDim + 2;
+ const double det =
+ _jacobian[i00]*(_jacobian[i11]*_jacobian[i22] -
+ _jacobian[i12]*_jacobian[i21]) -
+ _jacobian[i01]*(_jacobian[i10]*_jacobian[i22] -
+ _jacobian[i12]*_jacobian[i20]) +
+ _jacobian[i02]*(_jacobian[i10]*_jacobian[i21] -
+ _jacobian[i11]*_jacobian[i20]);
+ _checkJacobianDet(det);
+ _jacobianDet[iQuadPt] = det;
+
+ // Compute inverse of Jacobian at quadrature point
+ _jacobianInv[i00] = (_jacobian[i11]*_jacobian[i22] -
+ _jacobian[i12]*_jacobian[i21]) / det;
+ _jacobianInv[i01] = (_jacobian[i02]*_jacobian[i21] -
+ _jacobian[i01]*_jacobian[i22]) / det;
+ _jacobianInv[i02] = (_jacobian[i01]*_jacobian[i12] -
+ _jacobian[i02]*_jacobian[i11]) / det;
+ _jacobianInv[i10] = (_jacobian[i12]*_jacobian[i20] -
+ _jacobian[i10]*_jacobian[i22]) / det;
+ _jacobianInv[i11] = (_jacobian[i00]*_jacobian[i22] -
+ _jacobian[i02]*_jacobian[i20]) / det;
+ _jacobianInv[i12] = (_jacobian[i02]*_jacobian[i10] -
+ _jacobian[i00]*_jacobian[i12]) / det;
+ _jacobianInv[i20] = (_jacobian[i10]*_jacobian[i21] -
+ _jacobian[i11]*_jacobian[i20]) / det;
+ _jacobianInv[i21] = (_jacobian[i01]*_jacobian[i20] -
+ _jacobian[i00]*_jacobian[i21]) / det;
+ _jacobianInv[i22] = (_jacobian[i00]*_jacobian[i11] -
+ _jacobian[i01]*_jacobian[i10]) / det;
+ } // for
+} // _computeGeometry
+
+// End of file
Added: short/3D/PyLith/trunk/libsrc/feassemble/Quadrature3D.hh
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Quadrature3D.hh 2006-09-29 01:57:35 UTC (rev 4665)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Quadrature3D.hh 2006-09-29 05:07:58 UTC (rev 4666)
@@ -0,0 +1,77 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+// Brad T. Aagaard
+// U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+/**
+ * @file pylith/feassemble/Quadrature3D.hh
+ *
+ * @brief Quadrature for 3-D finite-elements.
+ */
+
+#if !defined(pylith_feassemble_quadrature3d_hh)
+#define pylith_feassemble_quadrature3d_hh
+
+#include "Quadrature.hh"
+
+namespace pylith {
+ namespace feassemble {
+ class Quadrature3D;
+ class TestQuadrature3D;
+ } // feassemble
+} // pylith
+
+class pylith::feassemble::Quadrature3D : public Quadrature
+{ // Quadrature1D
+ friend class TestQuadrature3D; // unit testing
+
+// PUBLIC MEMBERS ///////////////////////////////////////////////////////
+public :
+
+ /// Constructor
+ Quadrature3D(void);
+
+ /// Destructor
+ virtual ~Quadrature3D(void);
+
+ /// Create a copy of this object.
+ virtual
+ Quadrature* clone(void) const;
+
+// PROTECTED METHODS ////////////////////////////////////////////////////
+protected :
+
+ /** Copy constructor.
+ *
+ * @param q Quadrature to copy
+ */
+ Quadrature3D(const Quadrature3D& q);
+
+ /** Compute geometric quantities for a cell.
+ *
+ * @param coordinates Section containing vertex coordinates
+ * @param cell Finite-element cell
+ */
+ void _computeGeometry(const ALE::Obj<ALE::Mesh::section_type>& coordinates,
+ const ALE::Mesh::point_type& cell);
+
+// PRIVATE METHODS //////////////////////////////////////////////////////
+private :
+
+ /// Not implemented
+ const Quadrature3D& operator=(const Quadrature3D&);
+
+}; // Quadrature3D
+
+#include "Quadrature3D.icc" // inline methods
+
+#endif // pylith_feassemble_quadrature3d_hh
+
+// End of file
Added: short/3D/PyLith/trunk/libsrc/feassemble/Quadrature3D.icc
===================================================================
--- short/3D/PyLith/trunk/libsrc/feassemble/Quadrature3D.icc 2006-09-29 01:57:35 UTC (rev 4665)
+++ short/3D/PyLith/trunk/libsrc/feassemble/Quadrature3D.icc 2006-09-29 05:07:58 UTC (rev 4666)
@@ -0,0 +1,26 @@
+// -*- C++ -*-
+//
+// ======================================================================
+//
+// Brad T. Aagaard
+// U.S. Geological Survey
+//
+// {LicenseText}
+//
+// ======================================================================
+//
+
+#if !defined(pylith_feassemble_quadrature3d_hh)
+#error "Quadrature3D.icc must be included only from Quadrature3D.hh"
+#else
+
+// Create a copy of this object.
+inline
+pylith::feassemble::Quadrature*
+pylith::feassemble::Quadrature3D::clone(void) const {
+ return new Quadrature3D(*this);
+} // clone
+
+#endif
+
+// End of file
More information about the cig-commits
mailing list