Beispiel #1
0
    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)
Beispiel #2
0
    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)