[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