Ejemplo n.º 1
0
    def setup_quadrature(self):
        """
        The quadrature rules can be defined once on the reference element
        and then a change of variables allows integration on any element.
        """
        self.quad_nonsingular = dict()
        for n_q in range(self.min_points - 1, self.max_points):
            self.quad_nonsingular[n_q + 1] = \
                self.get_nonsingular_ptswts(n_q + 1)

        self.highest_nonsingular =  self.quad_nonsingular[self.max_points]

        self.quad_shared_edge_left=telles_singular(self.quad_points_logr, 0.0)
        self.quad_shared_edge_right=telles_singular(self.quad_points_logr, 1.0)

        self.quad_logr = []
        self.quad_oneoverr = []
        # For each point of the outer quadrature formula, we need a different
        # singular quadrature formula, because the singularity location will
        # move.
        # The highest order nonsingular quadrature is used for the outer
        # quadrature in the case of a singular kernel.
        for singular_pt in self.highest_nonsingular.x:
            logr = telles_singular(self.quad_points_logr, singular_pt)
            oneoverr = piessens(self.quad_points_oneoverr,
                                               singular_pt,
                                               self.max_points)
            self.quad_logr.append(logr)
            self.quad_oneoverr.append(oneoverr)
Ejemplo n.º 2
0
 def get_point_source_quadrature(self,
                                 singularity_type,
                                 singular_pt,
                                 e_k,
                                 in_element = False,
                                 reference_loc = 0.0):
     if singularity_type == 'logr' and in_element:
         quad = telles_singular(self.quad_points_logr,
                                              reference_loc)
     elif singularity_type == 'oneoverr' and in_element:
         quad = piessens(self.quad_points_oneoverr,
                                            reference_loc,
                                            self.max_points)
     else:
         quad = self.get_interior_quadrature(e_k, singular_pt)
     return quad