def __init__(self, mesh, elem_u, elem_v=None, mapping=None): if not isinstance(mesh, spfem.mesh.Mesh): raise Exception("First parameter must be an instance of " "spfem.mesh.Mesh!") if not isinstance(elem_u, spfem.element.Element): raise Exception("Second parameter must be an instance of " "spfem.element.Element!") # get default mapping from the mesh if mapping is None: self.mapping = mesh.mapping() else: self.mapping = mapping # assumes an already initialized mapping self.mesh = mesh self.elem_u = elem_u self.dofnum_u = Dofnum(mesh, elem_u) # duplicate test function element type if None is given if elem_v is None: self.elem_v = elem_u self.dofnum_v = self.dofnum_u else: self.elem_v = elem_v self.dofnum_v = Dofnum(mesh, elem_v)
def __init__(self, mesh, elem_u, elem_v=None, intorder=None): if not isinstance(mesh, spfem.mesh.Mesh): raise Exception("First parameter must be an instance of " "spfem.mesh.Mesh.") if not isinstance(elem_u, spfem.element.AbstractElement): raise Exception("Second parameter must be an instance of " "spfem.element.AbstractElement.") if elem_v is not None: if not isinstance(elem_v, spfem.element.AbstractElement): raise Exception("Third parameter must be an instance of " "spfem.element.AbstractElement.") self.mesh = mesh self.elem_u = elem_u self.dofnum_u = Dofnum(mesh, elem_u) self.mapping = mesh.mapping() # duplicate test function element type if None is given if elem_v is None: self.elem_v = elem_u self.dofnum_v = self.dofnum_u else: self.elem_v = elem_v self.dofnum_v = Dofnum(mesh, elem_v) if intorder is None: # compute the maximum polynomial degree from elements self.intorder = self.elem_u.maxdeg + self.elem_v.maxdeg else: self.intorder = intorder # quadrature points and weights X, _ = get_quadrature(self.mesh.refdom, self.intorder) # global quadrature points x = self.mapping.F(X, range(self.mesh.t.shape[1])) # pre-compute basis functions at quadrature points self.u, self.du, self.ddu = self.elem_u.evalbasis(self.mesh, x) if elem_v is None: self.v = self.u self.dv = self.du self.ddv = self.ddu else: self.v, self.dv, self.ddv = self.elem_v.evalbasis(self.mesh, x)