[cig-commits] r17946 - in short/3D/PyLith/trunk: pylith/feassemble unittests/pytests/feassemble

knepley at geodynamics.org knepley at geodynamics.org
Tue Feb 22 16:43:55 PST 2011


Author: knepley
Date: 2011-02-22 16:43:54 -0800 (Tue, 22 Feb 2011)
New Revision: 17946

Modified:
   short/3D/PyLith/trunk/pylith/feassemble/FIATLagrange.py
   short/3D/PyLith/trunk/pylith/feassemble/FIATSimplex.py
   short/3D/PyLith/trunk/unittests/pytests/feassemble/TestFIATLagrange.py
   short/3D/PyLith/trunk/unittests/pytests/feassemble/TestFIATSimplex.py
Log:
Upgraded to latest FIAT


Modified: short/3D/PyLith/trunk/pylith/feassemble/FIATLagrange.py
===================================================================
--- short/3D/PyLith/trunk/pylith/feassemble/FIATLagrange.py	2011-02-23 00:13:26 UTC (rev 17945)
+++ short/3D/PyLith/trunk/pylith/feassemble/FIATLagrange.py	2011-02-23 00:43:54 UTC (rev 17946)
@@ -96,18 +96,19 @@
       dim = self.cellDim
     
       # Get coordinates of vertices (dual basis)
-      vertices = numpy.array(self._setupVertices(element))
+      vertices = numpy.array(self._setupVertices(element), dtype=numpy.float64)
 
       # Evaluate basis functions at quadrature points
-      quadpts = numpy.array(quadrature.get_points())
-      quadwts = numpy.array(quadrature.get_weights())
+      from FIAT.polynomial_set import mis
+      quadpts    = numpy.array(quadrature.get_points(), dtype=numpy.float64)
+      quadwts    = numpy.array(quadrature.get_weights(), dtype=numpy.float64)
       numQuadPts = len(quadpts)
-      basis = numpy.array(element.function_space().tabulate(quadrature.get_points())).transpose()
-      numBasis = len(element.function_space())
+      evals      = element.get_nodal_basis().tabulate(quadrature.get_points(), 1)
+      basis      = numpy.array(evals[mis(1, 0)[0]], dtype=numpy.float64).transpose()
+      numBasis   = element.get_nodal_basis().get_num_members()
 
       # Evaluate derivatives of basis functions at quadrature points
-      basisDeriv = numpy.array([element.function_space().deriv_all(d).tabulate(quadrature.get_points()) \
-                                for d in range(1)]).transpose()
+      basisDeriv = numpy.array([evals[alpha] for alpha in mis(1, 1)], dtype=numpy.float64).transpose()
 
       self.numQuadPts = numQuadPts**dim
       self.numCorners = numBasis**dim
@@ -378,10 +379,10 @@
       self.cellDim = 0
       self.numCorners = 1
       self.numQuadPts = 1
-      self.basis = numpy.array([1.0])
-      self.basisDeriv = numpy.array([1.0])
-      self.quadPts = numpy.array([0.0])
-      self.quadWts = numpy.array([1.0])
+      self.basis = numpy.array([1.0], dtype=numpy.float64)
+      self.basisDeriv = numpy.array([1.0], dtype=numpy.float64)
+      self.quadPts = numpy.array([0.0], dtype=numpy.float64)
+      self.quadWts = numpy.array([1.0], dtype=numpy.float64)
 
     self._info.line("Cell geometry: ")
     self._info.line(self.geometry)
@@ -405,15 +406,13 @@
     """
     Set members based using inventory.
     """
-    import FIAT.shapes
-
     ReferenceCell._configure(self)
     self.cellDim = self.inventory.dimension
     self.degree = self.inventory.degree
     self.order = self.inventory.order
 
     if self.order == -1:
-      self.order = 2*self.degree+1
+      self.order = self.degree+1
     return
 
 
@@ -455,25 +454,25 @@
     """
     Setup quadrature rule for reference cell.
     """
-    import FIAT.quadrature
-    import FIAT.shapes
-    return FIAT.quadrature.make_quadrature_by_degree(FIAT.shapes.LINE, self.order)
+    from FIAT.quadrature import make_quadrature
+    from FIAT.reference_element import default_simplex
+    return make_quadrature(default_simplex(1), self.order)
 
 
   def _setupElement(self):
     """
     Setup the finite element for reference cell.
     """
-    import FIAT.Lagrange
-    import FIAT.shapes
-    return FIAT.Lagrange.Lagrange(FIAT.shapes.LINE, self.degree)
+    from FIAT.lagrange import Lagrange
+    from FIAT.reference_element import default_simplex
+    return Lagrange(default_simplex(1), self.degree)
 
 
   def _setupVertices(self, element):
     """
     Setup evaluation functional points for reference cell.
     """
-    return element.Udual.pts
+    return [n.get_point_dict().keys()[0] for n in element.dual.get_nodes()]
 
 
 # FACTORIES ////////////////////////////////////////////////////////////

Modified: short/3D/PyLith/trunk/pylith/feassemble/FIATSimplex.py
===================================================================
--- short/3D/PyLith/trunk/pylith/feassemble/FIATSimplex.py	2011-02-23 00:13:26 UTC (rev 17945)
+++ short/3D/PyLith/trunk/pylith/feassemble/FIATSimplex.py	2011-02-23 00:43:54 UTC (rev 17946)
@@ -98,11 +98,11 @@
       self.cellDim = 0
       self.numCorners = 1
       self.numQuadPts = 1
-      self.basis = numpy.array([[1.0]])
-      self.basisDeriv = numpy.array([[[1.0]]])
-      self.quadPts = numpy.array([[0.0]])
-      self.quadWts = numpy.array([1.0])
-      self.vertices = numpy.array([[0.0]])
+      self.basis = numpy.array([[1.0]], dtype=numpy.float64)
+      self.basisDeriv = numpy.array([[[1.0]]], dtype=numpy.float64)
+      self.quadPts = numpy.array([[0.0]], dtype=numpy.float64)
+      self.quadWts = numpy.array([1.0], dtype=numpy.float64)
+      self.vertices = numpy.array([[0.0]], dtype=numpy.float64)
     else:
       quadrature = self._setupQuadrature()
       basisFns = self._setupBasisFns()
@@ -111,17 +111,17 @@
       vertices = numpy.array(self._setupVertices(), dtype=numpy.float64)
 
       # Evaluate basis functions at quadrature points
+      from FIAT.polynomial_set import mis
       quadpts = quadrature.get_points()
-      basis = numpy.array(basisFns.tabulate(quadpts)).transpose()
+      dim     = basisFns.ref_el.get_spatial_dimension()
+      evals   = basisFns.tabulate(quadpts, 1)
+      basis   = numpy.array(evals[mis(dim, 0)[0]], dtype=numpy.float64).transpose()
 
       # Evaluate derivatives of basis functions at quadrature points
-      import FIAT.shapes
-      dim = FIAT.shapes.dimension(basisFns.base.shape)
-      basisDeriv = numpy.array([basisFns.deriv_all(d).tabulate(quadpts) \
-                                for d in range(dim)]).transpose()
+      basisDeriv = numpy.array([evals[alpha] for alpha in mis(dim, 1)], dtype=numpy.float64).transpose()
 
       self.cellDim = dim
-      self.numCorners = len(basisFns)
+      self.numCorners = basisFns.get_num_members()
       self.numQuadPts = len(quadrature.get_weights())
 
       # Permute from FIAT order to Sieve order
@@ -132,8 +132,8 @@
                                       basisDeriv.shape)
 
       # No permutation in order of quadrature points
-      self.quadPts = numpy.array(quadrature.get_points())
-      self.quadWts = numpy.array(quadrature.get_weights())
+      self.quadPts = numpy.array(quadrature.get_points(), dtype=numpy.float64)
+      self.quadWts = numpy.array(quadrature.get_weights(), dtype=numpy.float64)
 
 
     self._info.line("Cell geometry: ")
@@ -175,11 +175,9 @@
 
     Sieve: breadth search first (faces, edges, corners)
     """
-    import FIAT.shapes
-
-    basis = self.cell.function_space()
-    dim = FIAT.shapes.dimension(self._getShape())
-    ids = self.cell.Udual.entity_ids
+    basis = self.cell.get_nodal_basis()
+    dim = self._getShape().get_spatial_dimension()
+    ids = self.cell.dual.get_entity_ids()
     permutation = []
     if dim == 1:
       for vertex in ids[0]:
@@ -253,38 +251,37 @@
     """
     
     import FIAT.quadrature
-    return FIAT.quadrature.make_quadrature_by_degree(self._getShape(),
-                                                     self.order)
+    return FIAT.quadrature.make_quadrature(self._getShape(), self.order)
 
 
   def _setupBasisFns(self):
     """
     Setup basis functions for reference cell.
     """
-    from FIAT.Lagrange import Lagrange
+    from FIAT.lagrange import Lagrange
     self.cell = Lagrange(self._getShape(), self.degree)
-    return self.cell.function_space() 
+    return self.cell.get_nodal_basis() 
 
 
   def _setupVertices(self):
     """
     Setup evaluation functional points for reference cell.
     """
-    return self.cell.Udual.pts
+    return numpy.array([n.get_point_dict().keys()[0] for n in self.cell.dual.get_nodes()], dtype=numpy.float64)
 
 
   def _getShape(self):
     """
     Parse string into FIAT shape.
     """
-    import FIAT.shapes
+    from FIAT.reference_element import default_simplex
     name = self.shape.lower()
     if "tetrahedron" == name:
-      shape = FIAT.shapes.TETRAHEDRON
+      shape = default_simplex(3)
     elif "triangle" == name:
-      shape = FIAT.shapes.TRIANGLE
+      shape = default_simplex(2)
     elif "line" == name:
-      shape = FIAT.shapes.LINE
+      shape = default_simplex(1)
     elif "point" == name:
       shape = None
     else:

Modified: short/3D/PyLith/trunk/unittests/pytests/feassemble/TestFIATLagrange.py
===================================================================
--- short/3D/PyLith/trunk/unittests/pytests/feassemble/TestFIATLagrange.py	2011-02-23 00:13:26 UTC (rev 17945)
+++ short/3D/PyLith/trunk/unittests/pytests/feassemble/TestFIATLagrange.py	2011-02-23 00:43:54 UTC (rev 17946)
@@ -1057,7 +1057,7 @@
     cell = FIATLagrange()
     cell.inventory.dimension = 2
     cell.inventory.degree = 2
-    cell.inventory.order  = 5
+    cell.inventory.order  = 3
     cell._configure()
     cell.initialize(spaceDim=2)
 
@@ -1093,7 +1093,7 @@
     cell = FIATLagrange()
     cell.inventory.dimension = 3
     cell.inventory.degree = 2
-    cell.inventory.order  = 5
+    cell.inventory.order  = 3
     cell._configure()
     cell.initialize(spaceDim=3)
 

Modified: short/3D/PyLith/trunk/unittests/pytests/feassemble/TestFIATSimplex.py
===================================================================
--- short/3D/PyLith/trunk/unittests/pytests/feassemble/TestFIATSimplex.py	2011-02-23 00:13:26 UTC (rev 17945)
+++ short/3D/PyLith/trunk/unittests/pytests/feassemble/TestFIATSimplex.py	2011-02-23 00:43:54 UTC (rev 17946)
@@ -229,7 +229,6 @@
                            [self.N3p(q), self.N3q(q)],
                            [self.N4p(q), self.N4q(q)],
                            [self.N5p(q), self.N5q(q)]])
-      print deriv
       basisDeriv[iQuad] = deriv.reshape((6, 2))
       iQuad += 1
 
@@ -406,19 +405,19 @@
     """
     cell = FIATSimplex()
 
-    import FIAT.shapes
+    from FIAT.reference_element import default_simplex
 
     cell.shape = "line"
     shape = cell._getShape()
-    self.assertEqual(FIAT.shapes.LINE, shape)
+    self.assertEqual(default_simplex(1).get_shape(), shape.get_shape())
 
     cell.shape = "triangle"
     shape = cell._getShape()
-    self.assertEqual(FIAT.shapes.TRIANGLE, shape)
+    self.assertEqual(default_simplex(2).get_shape(), shape.get_shape())
 
     cell.shape = "tetrahedron"
     shape = cell._getShape()
-    self.assertEqual(FIAT.shapes.TETRAHEDRON, shape)
+    self.assertEqual(default_simplex(3).get_shape(), shape.get_shape())
     return
 
 



More information about the CIG-COMMITS mailing list