Source code for irksome.scheme

from FIAT import ufc_simplex, create_quadrature
from FIAT.quadrature import RadauQuadratureLineRule


ufc_line = ufc_simplex(1)


[docs] class GalerkinScheme: """ Base class for describing Galerkin-in-time methods in lieu of a Butcher tableau. :arg order: An integer indicating the order of the method :kwarg basis_type: A string (or tuple of strings) indicating the finite element family (either `'Lagrange'` or `'Bernstein'`) or the Lagrange variant (either `'equispaced'`, `'spectral'`, `'chebyshev'`, or `'integral'`) for the test/trial spaces. Defaults to equispaced Lagrange elements. :kwarg quadrature_degree: An integer indicating the degree of the quadrature to be use in time. Defaults to the sum of the degrees of the trial and test spaces. :kwarg quadrature_scheme: A string indicating the quadrature scheme to be used in time. Defaults to Gauss-Legendre. """ def __init__(self, order, basis_type=None, quadrature_degree=None, quadrature_scheme="default"): self.order = order self.basis_type = basis_type self.quadrature_degree = quadrature_degree self.quadrature_scheme = quadrature_scheme
[docs] class DiscontinuousGalerkinScheme(GalerkinScheme): """Class for describing DG-in-time methods""" def __init__(self, order, basis_type=None, quadrature_degree=None, quadrature_scheme="default"): assert order >= 0, f"{type(self).__name__} must have order >= 0" super().__init__(order, basis_type=basis_type, quadrature_degree=quadrature_degree, quadrature_scheme=quadrature_scheme)
[docs] class ContinuousPetrovGalerkinScheme(GalerkinScheme): """Class for describing cPG-in-time methods""" def __init__(self, order, basis_type=None, quadrature_degree=None, quadrature_scheme="default"): assert order >= 1, f"{type(self).__name__} must have order >= 1" super().__init__(order, basis_type=basis_type, quadrature_degree=quadrature_degree, quadrature_scheme=quadrature_scheme)
[docs] def create_time_quadrature(degree, scheme="default"): if scheme == "radau": num_points = degree + 1 return RadauQuadratureLineRule(ufc_line, num_points) else: return create_quadrature(ufc_line, degree, scheme=scheme)