def _setupQuadrature(self): """ Setup quadrature rule for reference cell. """ from FIAT.reference_element import default_simplex from FIAT.quadrature import make_quadrature from FIATQuadrature import CollocatedQuadratureRule if not self.collocateQuad: q = make_quadrature(default_simplex(1), self.order) else: q = CollocatedQuadratureRule(default_simplex(1), self.order) return q
def _setupElement(self): """ Setup the finite element for reference cell. """ from FIAT.lagrange import Lagrange from FIAT.reference_element import default_simplex return Lagrange(default_simplex(1), self.degree)
def test_shape(self): """ Test _getShape(). """ cell = FIATSimplex() from FIAT.reference_element import default_simplex cell.cellDim = 1 shape = cell._getShape() self.assertEqual(default_simplex(1).get_shape(), shape.get_shape()) cell.cellDim = 2 shape = cell._getShape() self.assertEqual(default_simplex(2).get_shape(), shape.get_shape()) cell.cellDim = 3 shape = cell._getShape() self.assertEqual(default_simplex(3).get_shape(), shape.get_shape()) return
import os, sys # Find PETSc/BuildSystem if 'PETSC_DIR' in os.environ: configDir = os.path.join(os.environ['PETSC_DIR'], 'config') bsDir = os.path.join(configDir, 'BuildSystem') sys.path.insert(0, bsDir) sys.path.insert(0, configDir) import PETSc.FEM from FIAT.reference_element import default_simplex from FIAT.lagrange import Lagrange generator = PETSc.FEM.QuadratureGenerator() generator.setup() elements = [] if not (len(sys.argv)-2) % 5 == 0: sys.exit('Incomplete set of arguments') for n in range((len(sys.argv)-2) / 5): dim = int(sys.argv[n*5+1]) order = int(sys.argv[n*5+2]) components = int(sys.argv[n*5+3]) numBlocks = int(sys.argv[n*5+4]) operator = sys.argv[n*5+5] element = Lagrange(default_simplex(dim), order) element.numComponents = components elements.append(element) filename = sys.argv[-1] generator.quadDegree = max([e.order for e in elements]) generator.run(elements, numBlocks, operator, filename)
sys.path.insert(0, bsDir) sys.path.insert(0, configDir) if os.path.isdir(os.path.join(fiatDir, 'FIAT')): sys.path.insert(0, fiatDir) import PETSc.FEM from FIAT.reference_element import default_simplex from FIAT.lagrange import Lagrange from FIAT.discontinuous_lagrange import DiscontinuousLagrange generator = PETSc.FEM.QuadratureGenerator() generator.setup() elements = [] if not (len(sys.argv) - 2) % 5 == 0: sys.exit('Incomplete set of arguments') for n in range((len(sys.argv) - 2) / 5): dim = int(sys.argv[n * 5 + 1]) order = int(sys.argv[n * 5 + 2]) components = int(sys.argv[n * 5 + 3]) numBlocks = int(sys.argv[n * 5 + 4]) operator = sys.argv[n * 5 + 5] if order == 0: element = DiscontinuousLagrange(default_simplex(1), order) else: element = Lagrange(default_simplex(1), order) element.numComponents = components elements.append(element) filename = sys.argv[-1] generator.quadDegree = max([e.order + 1 for e in elements]) generator.runTensorProduct(dim, elements, numBlocks, operator, filename)
sys.path.insert(0, bsDir) sys.path.insert(0, configDir) if os.path.isdir(os.path.join(fiatDir,'FIAT')): sys.path.insert(0, fiatDir) import PETSc.FEM from FIAT.reference_element import default_simplex from FIAT.lagrange import Lagrange from FIAT.discontinuous_lagrange import DiscontinuousLagrange generator = PETSc.FEM.QuadratureGenerator() generator.setup() elements = [] if not (len(sys.argv)-2) % 5 == 0: sys.exit('Incomplete set of arguments') for n in range((len(sys.argv)-2) / 5): dim = int(sys.argv[n*5+1]) order = int(sys.argv[n*5+2]) components = int(sys.argv[n*5+3]) numBlocks = int(sys.argv[n*5+4]) operator = sys.argv[n*5+5] if order == 0: element = DiscontinuousLagrange(default_simplex(dim), order) else: element = Lagrange(default_simplex(dim), order) element.numComponents = components elements.append(element) filename = sys.argv[-1] generator.quadDegree = max([e.order for e in elements]) generator.run(elements, numBlocks, operator, filename)
import numpy from FIAT.polynomial_set import mis from FIAT.reference_element import default_simplex from FIAT.quadrature import make_quadrature order = 1 quadrature = make_quadrature(default_simplex(1), order) from FIAT.lagrange import Lagrange degree = 1 element = Lagrange(default_simplex(1), degree) vertices = [n.get_point_dict().keys()[0] for n in element.dual.get_nodes()] quadpts = numpy.array(quadrature.get_points(), dtype=numpy.float64) quadwts = numpy.array(quadrature.get_weights(), dtype=numpy.float64) numQuadPts = len(quadpts) 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() basisDeriv = numpy.array([evals[alpha] for alpha in mis(1, 1)], dtype=numpy.float64).transpose() print "order: %d" % order print "degree: %d" % degree print "numQuadPts: %d" % numQuadPts print "basis:" print basis print "basisDeriv:" print basisDeriv