Example #1
0
    def transfer_operators(self):
        """
        generate transfer operators for the given layer, assuming the given conventions
        interpolation is identity concatted with averaging matrix

        how to organize mg?
        maintain complex hierarchy? this is the only place we truely need it no?
        otoh, with geometry all required info is first available no?
        """
        vertex_vertex = util.coo_matrix( util.dia_simple(np.ones(self.P0)))
        edge_vertex   = util.coo_matrix( self.edge_mid)
        edge_vertex   = util.coo_shift( edge_vertex,self.P0, 0)

        self.interpolation = util.coo_append(vertex_vertex, edge_vertex)
        self.restriction   = self.interpolation.T
        #redution of operator
        self.weighting     = self.restriction * np.ones(self.P0+self.P1)
        self.interpolation_weighting     = self.interpolation * np.ones(self.P0)
Example #2
0
    def precomp(self):
        """precompute jacobi iteration matrices"""
        #precompute merged metric operations
        D1P1 = util.dia_simple(self.geometry.D1P1)
        P0D2 = util.dia_simple(self.geometry.P0D2)
        D21 = self.topology.D21
        P10 = self.topology.P10
        L = util.coo_matrix(D21 * D1P1 * P10 * P0D2)
        od = L.row != L.col
        self.off_diagonal = util.csr_matrix(
            (L.data[od], (L.row[od], L.col[od])),
            shape=(self.topology.P0, self.topology.P0))

        self._laplace_d2 = util.csr_matrix(L)

        self.inverse_diagonal = 1.0 / (L.data[od==False][:, None])
Example #3
0
 def coo_matrix(data, row, col):
     """construct a coo_matrix from data and index arrays"""
     return util.coo_matrix(
         (data.ravel(),(row.ravel(), col.ravel())),
         shape=(coarse.topology.D2, fine.topology.D2))