[cig-commits] r7049 - in short/3D/PyLith/trunk: pylith/feassemble
unittests/pytests/feassemble
knepley at geodynamics.org
knepley at geodynamics.org
Sat Jun 2 09:57:18 PDT 2007
Author: knepley
Date: 2007-06-02 09:57:17 -0700 (Sat, 02 Jun 2007)
New Revision: 7049
Modified:
short/3D/PyLith/trunk/pylith/feassemble/FIATLagrange.py
short/3D/PyLith/trunk/unittests/pytests/feassemble/TestFIATLagrange.py
Log:
Hex element tests now work
Modified: short/3D/PyLith/trunk/pylith/feassemble/FIATLagrange.py
===================================================================
--- short/3D/PyLith/trunk/pylith/feassemble/FIATLagrange.py 2007-06-02 16:35:15 UTC (rev 7048)
+++ short/3D/PyLith/trunk/pylith/feassemble/FIATLagrange.py 2007-06-02 16:57:17 UTC (rev 7049)
@@ -122,10 +122,10 @@
self.basisDeriv[q][r][f][g][0] = basisDeriv[q][f][0]*basis[r][g]
self.basisDeriv[q][r][f][g][1] = basis[q][f]*basisDeriv[r][g][0]
elif dim == 3:
- self.quadPts = numpy.array((numQuadPts, numQuadPts, numQuadPts, dim))
- self.quadWts = numpy.array((numQuadPts, numQuadPts, numQuadPts))
- self.basis = numpy.array((numQuadPts, numQuadPts, numQuadPts, numBasisFns, numBasisFns, numBasisFns))
- self.basisDeriv = numpy.array((numQuadPts, numQuadPts, numQuadPts, numBasisFns, numBasisFns, numBasisFns, dim))
+ self.quadPts = numpy.zeros((numQuadPts, numQuadPts, numQuadPts, dim))
+ self.quadWts = numpy.zeros((numQuadPts, numQuadPts, numQuadPts))
+ self.basis = numpy.zeros((numQuadPts, numQuadPts, numQuadPts, numBasisFns, numBasisFns, numBasisFns))
+ self.basisDeriv = numpy.zeros((numQuadPts, numQuadPts, numQuadPts, numBasisFns, numBasisFns, numBasisFns, dim))
for q in range(numQuadPts):
for r in range(numQuadPts):
for s in range(numQuadPts):
@@ -133,13 +133,13 @@
self.quadPts[q][r][s][1] = quadpts[r]
self.quadPts[q][r][s][2] = quadpts[s]
self.quadWts[q][r][s] = quadwts[q]*quadwts[r]*quadwts[s]
- for f in range(numBasisFns):
- for g in range(numBasisFns):
- for h in range(numBasisFns):
- self.basis[q][r][s][f][g][h] = basis[q][f]*basis[r][g]*basis[s][h]
- self.basisDeriv[q][r][s][f][g][h][0] = basisDeriv[q][f][0]*basis[r][g]*basis[s][h]
- self.basisDeriv[q][r][s][f][g][h][1] = basis[q][f]*basisDeriv[r][g][0]*basis[s][h]
- self.basisDeriv[q][r][s][f][g][h][2] = basis[q][f]*basis[r][g]*basisDeriv[s][h][0]
+ for f in range(numBasisFns):
+ for g in range(numBasisFns):
+ for h in range(numBasisFns):
+ self.basis[q][r][s][f][g][h] = basis[q][f]*basis[r][g]*basis[s][h]
+ self.basisDeriv[q][r][s][f][g][h][0] = basisDeriv[q][f][0]*basis[r][g]*basis[s][h]
+ self.basisDeriv[q][r][s][f][g][h][1] = basis[q][f]*basisDeriv[r][g][0]*basis[s][h]
+ self.basisDeriv[q][r][s][f][g][h][2] = basis[q][f]*basis[r][g]*basisDeriv[s][h][0]
self.quadPts = numpy.reshape(self.quadPts, (self.numQuadPts, dim))
self.quadWts = numpy.reshape(self.quadWts, (self.numQuadPts))
self.basis = numpy.reshape(self.basis, (self.numQuadPts, self.numCorners))
Modified: short/3D/PyLith/trunk/unittests/pytests/feassemble/TestFIATLagrange.py
===================================================================
--- short/3D/PyLith/trunk/unittests/pytests/feassemble/TestFIATLagrange.py 2007-06-02 16:35:15 UTC (rev 7048)
+++ short/3D/PyLith/trunk/unittests/pytests/feassemble/TestFIATLagrange.py 2007-06-02 16:57:17 UTC (rev 7049)
@@ -55,14 +55,110 @@
def N3q(p):
return (1+p[0])/4.0
+def Q0(p):
+ return (1-p[0])*(1-p[1])*(1-p[2])/8.0
+
+def Q0p(p):
+ return -(1-p[1])*(1-p[2])/8.0
+
+def Q0q(p):
+ return -(1-p[0])*(1-p[2])/8.0
+
+def Q0r(p):
+ return -(1-p[0])*(1-p[1])/8.0
+
+def Q1(p):
+ return (1-p[0])*(1-p[1])*(1+p[2])/8.0
+
+def Q1p(p):
+ return -(1-p[1])*(1+p[2])/8.0
+
+def Q1q(p):
+ return -(1-p[0])*(1+p[2])/8.0
+
+def Q1r(p):
+ return (1-p[0])*(1-p[1])/8.0
+
+def Q2(p):
+ return (1-p[0])*(1+p[1])*(1-p[2])/8.0
+
+def Q2p(p):
+ return -(1+p[1])*(1-p[2])/8.0
+
+def Q2q(p):
+ return (1-p[0])*(1-p[2])/8.0
+
+def Q2r(p):
+ return -(1-p[0])*(1+p[1])/8.0
+
+def Q3(p):
+ return (1-p[0])*(1+p[1])*(1+p[2])/8.0
+
+def Q3p(p):
+ return -(1+p[1])*(1+p[2])/8.0
+
+def Q3q(p):
+ return (1-p[0])*(1+p[2])/8.0
+
+def Q3r(p):
+ return (1-p[0])*(1+p[1])/8.0
+
+def Q4(p):
+ return (1+p[0])*(1-p[1])*(1-p[2])/8.0
+
+def Q4p(p):
+ return (1-p[1])*(1-p[2])/8.0
+
+def Q4q(p):
+ return -(1+p[0])*(1-p[2])/8.0
+
+def Q4r(p):
+ return -(1+p[0])*(1-p[1])/8.0
+
+def Q5(p):
+ return (1+p[0])*(1-p[1])*(1+p[2])/8.0
+
+def Q5p(p):
+ return (1-p[1])*(1+p[2])/8.0
+
+def Q5q(p):
+ return -(1+p[0])*(1+p[2])/8.0
+
+def Q5r(p):
+ return (1+p[0])*(1-p[1])/8.0
+
+def Q6(p):
+ return (1+p[0])*(1+p[1])*(1-p[2])/8.0
+
+def Q6p(p):
+ return (1+p[1])*(1-p[2])/8.0
+
+def Q6q(p):
+ return (1+p[0])*(1-p[2])/8.0
+
+def Q6r(p):
+ return -(1+p[0])*(1+p[1])/8.0
+
+def Q7(p):
+ return (1+p[0])*(1+p[1])*(1+p[2])/8.0
+
+def Q7p(p):
+ return (1+p[1])*(1+p[2])/8.0
+
+def Q7q(p):
+ return (1+p[0])*(1+p[2])/8.0
+
+def Q7r(p):
+ return (1+p[0])*(1+p[1])/8.0
+
# ----------------------------------------------------------------------
class TestFIATLagrange(unittest.TestCase):
"""
Unit testing of FIATLagrange object.
"""
-
- def test_initialize(self):
+
+ def test_initialize_quad(self):
"""
Test initialize().
"""
@@ -109,4 +205,59 @@
return
+ def test_initialize_hex(self):
+ """
+ Test initialize().
+ """
+ from pylith.feassemble.FIATLagrange import FIATLagrange
+ cell = FIATLagrange()
+ cell.cellDim = 3
+ cell.degree = 1
+ cell.order = 2
+ quadPtsE = numpy.array( [(-1.0/3**0.5, -1.0/3**0.5, -1.0/3**0.5),
+ (-1.0/3**0.5, -1.0/3**0.5, +1.0/3**0.5),
+ (-1.0/3**0.5, +1.0/3**0.5, -1.0/3**0.5),
+ (-1.0/3**0.5, +1.0/3**0.5, +1.0/3**0.5),
+ (+1.0/3**0.5, -1.0/3**0.5, -1.0/3**0.5),
+ (+1.0/3**0.5, -1.0/3**0.5, +1.0/3**0.5),
+ (+1.0/3**0.5, +1.0/3**0.5, -1.0/3**0.5),
+ (+1.0/3**0.5, +1.0/3**0.5, +1.0/3**0.5)],
+ dtype=numpy.float64 )
+ quadWtsE = numpy.array( [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0], dtype=numpy.float64 )
+
+ # Compute basis fns and derivatives at quadrature points
+ iQuad = 0
+ basis = numpy.zeros( (8, 8), dtype=numpy.float64)
+ basisDeriv = numpy.zeros( (8, 8, 3), dtype=numpy.float64)
+ for q in quadPtsE:
+ basis[iQuad] = numpy.array([Q0(q), Q1(q), Q2(q), Q3(q), Q4(q), Q5(q), Q6(q), Q7(q)],
+ dtype=numpy.float64).reshape( (8,) )
+ deriv = numpy.array([[Q0p(q), Q0q(q), Q0r(q)],
+ [Q1p(q), Q1q(q), Q1r(q)],
+ [Q2p(q), Q2q(q), Q2r(q)],
+ [Q3p(q), Q3q(q), Q3r(q)],
+ [Q4p(q), Q4q(q), Q4r(q)],
+ [Q5p(q), Q5q(q), Q5r(q)],
+ [Q6p(q), Q6q(q), Q6r(q)],
+ [Q7p(q), Q7q(q), Q7r(q)]],
+ dtype=numpy.float64)
+ basisDeriv[iQuad] = deriv.reshape((8, 3))
+ iQuad += 1
+
+ cell.initialize()
+
+ # Check basic attributes
+ self.assertEqual(3, cell.cellDim)
+ self.assertEqual(8, cell.numCorners)
+ self.assertEqual(8, cell.numQuadPts)
+
+ # Check arrays
+ test_double(self, quadPtsE, cell.quadPts)
+ test_double(self, quadWtsE, cell.quadWts)
+ test_double(self, basis, cell.basis)
+ test_double(self, basisDeriv, cell.basisDeriv)
+
+ return
+
+
# End of file
More information about the cig-commits
mailing list