Exemplo n.º 1
0
def create_simple_petsc_matrix(request):
    vals_F = [3.2, 1.1, 6.3, 1., -5.1]
    col_idx_F = [0, 1, 0, 1, 2]
    row_idx_F = [0, 2, 4, 5]
    num_v_unkwn = 3
    petsc_matF = LAT.csr_2_petsc(size=(num_v_unkwn, num_v_unkwn),
                                 csr=(row_idx_F, col_idx_F, vals_F))
    yield petsc_matF
Exemplo n.º 2
0
def create_simple_petsc_matrix(request):
    vals_F  =    [3.2, 1.1, 6.3, 1., -5.1]
    col_idx_F  = [0, 1, 0, 1, 2]
    row_idx_F  = [0, 2, 4, 5]
    num_v_unkwn = 3
    petsc_matF = LAT.csr_2_petsc(size = (num_v_unkwn,num_v_unkwn),
                                 csr = (row_idx_F,col_idx_F,vals_F))
    yield petsc_matF
Exemplo n.º 3
0
    def test_lsc_shell(self):
        ''' Test for the lsc operator shell '''
        vals_A = [5.5, 7.1, 1.0]
        col_idx_A = [0, 1, 2]
        row_idx_A = [0, 1, 2, 3]
        vals_B = [1.1, 6.3, 7.3, 3.6, 6.3]
        col_idx_B = [0, 2, 0, 1, 2]
        row_idx_B = [0, 2, 5]
        vals_Bt = [1.1, 7.3, 3.6, 6.3, 6.3]
        col_idx_Bt = [0, 1, 1, 0, 1]
        row_idx_Bt = [0, 2, 3, 5]
        vals_F = [3.2, 1.1, 6.3, 1., -5.1]
        col_idx_F = [0, 1, 0, 2, 0]
        row_idx_F = [0, 2, 4, 5]
        num_B_rows = len(row_idx_B) - 1
        num_B_cols = len(row_idx_A) - 1

        petsc_matA = LAT.csr_2_petsc(size=(num_B_cols, num_B_cols),
                                     csr=(row_idx_A, col_idx_A, vals_A))
        petsc_matB = LAT.csr_2_petsc(size=(num_B_rows, num_B_cols),
                                     csr=(row_idx_B, col_idx_B, vals_B))
        petsc_matBt = LAT.csr_2_petsc(size=(num_B_cols, num_B_rows),
                                      csr=(row_idx_Bt, col_idx_Bt, vals_Bt))
        petsc_matF = LAT.csr_2_petsc(size=(num_B_cols, num_B_cols),
                                     csr=(row_idx_F, col_idx_F, vals_F))

        self.petsc_options.setValue('innerLSCsolver_BTinvBt_ksp_type',
                                    'preonly')
        self.petsc_options.setValue('innerLSCsolver_T_ksp_type', 'preonly')
        self.petsc_options.setValue('innerLSCsolver_BTinvBt_pc_type', 'lu')
        self.petsc_options.setValue('innerLSCsolver_T_pc_type', 'lu')
        LSC_shell = LAT.LSCInv_shell(petsc_matA, petsc_matB, petsc_matBt,
                                     petsc_matF)
        x_vec = np.ones(num_B_rows)
        y_vec = np.zeros(num_B_rows)
        x_PETSc_vec = p4pyPETSc.Vec().createWithArray(x_vec)
        y_PETSc_vec = p4pyPETSc.Vec().createWithArray(y_vec)
        A = None
        LSC_shell.apply(A, x_PETSc_vec, y_PETSc_vec)
        true_solu = np.mat('[-0.01096996,0.00983216]')
        assert np.allclose(y_vec, true_solu)
Exemplo n.º 4
0
    def test_matrix_splitting_1(self):
        vals_F  =    [3.2, 1.1, 5.4, 6.3, 1., -5.1, 1.2]
        col_idx_F  = [0, 1, 2, 0, 2, 0, 1]
        row_idx_F  = [0, 3, 5, 7]

        num_v_unkwn = len(row_idx_F) - 1

        petsc_matF = LAT.csr_2_petsc(size = (num_v_unkwn,num_v_unkwn),
                                     csr = (row_idx_F,col_idx_F,vals_F))

        A = LAT.split_PETSc_Mat(petsc_matF)
        A[0].axpy(1.0,A[1])
        assert np.allclose(A[0].getValuesCSR()[2], petsc_matF.getValuesCSR()[2])
Exemplo n.º 5
0
    def test_matrix_splitting_1(self):
        vals_F = [3.2, 1.1, 5.4, 6.3, 1., -5.1, 1.2]
        col_idx_F = [0, 1, 2, 0, 2, 0, 1]
        row_idx_F = [0, 3, 5, 7]

        num_v_unkwn = len(row_idx_F) - 1

        petsc_matF = LAT.csr_2_petsc(size=(num_v_unkwn, num_v_unkwn),
                                     csr=(row_idx_F, col_idx_F, vals_F))

        A = LAT.split_PETSc_Mat(petsc_matF)
        A[0].axpy(1.0, A[1])
        assert np.allclose(A[0].getValuesCSR()[2],
                           petsc_matF.getValuesCSR()[2])
Exemplo n.º 6
0
def test_petsc_load_matrix(tmpdir):
    """test petsc_load_matrix """
    from petsc4py import PETSc as p4pyPETSc
    from proteus import LinearAlgebraTools as LAT

    vals_A = [5.5, 7.1, 1.0]
    col_idx_A = [0, 1, 2]
    row_idx_A = [0, 1, 2, 3]
    A = LAT.csr_2_petsc(size=(3, 3), csr=(row_idx_A, col_idx_A, vals_A))

    A_tmp = tmpdir.join('A.petsc_mat')
    LAT._petsc_view(A, A_tmp.strpath)
    A_test = LAT.petsc_load_matrix(A_tmp.strpath)
    csr_values = A_test.getValuesCSR()

    assert np.allclose(csr_values[0], row_idx_A)
    assert np.allclose(csr_values[1], col_idx_A)
    assert np.allclose(csr_values[2], vals_A)

    A_test = LAT.petsc_load_matrix('dne.txt')
    assert A_test is None
Exemplo n.º 7
0
def test_petsc_load_matrix(tmpdir):
    """test petsc_load_matrix """
    from petsc4py import PETSc as p4pyPETSc
    from proteus import LinearAlgebraTools as LAT

    vals_A =     [5.5,7.1,1.0]
    col_idx_A =  [0 , 1 , 2  ]
    row_idx_A =  [0, 1, 2, 3]
    A = LAT.csr_2_petsc(size = (3,3),
                        csr = (row_idx_A,col_idx_A,vals_A))

    A_tmp = tmpdir.join('A.petsc_mat')
    LAT._petsc_view(A,A_tmp.strpath)
    A_test = LAT.petsc_load_matrix(A_tmp.strpath)
    csr_values = A_test.getValuesCSR()

    assert np.allclose(csr_values[0], row_idx_A)
    assert np.allclose(csr_values[1], col_idx_A)
    assert np.allclose(csr_values[2], vals_A)

    A_test = LAT.petsc_load_matrix('dne.txt')
    assert A_test is None
Exemplo n.º 8
0
def create_simple_saddle_point_problem(request):
    """Builds simple matrices and vectors for saddle point shell tests.

    Returns
    -------
    output_lst : lst
        This function returns an output list with three sublists.  See
        the notes below for a description of these lists.

    Notes
    -----
    The output of this function returns xxx sublists.  The first
    contains a list of matrices.  The second returns a list
    of vectors.  The last returns a list of sizes.
    """
    class Output_Storage(object):
        """Storage class for matrix objects. """
        def __init__(self, petsc_matF, petsc_matD, petsc_matB, petsc_matBt,
                     petsc_matC, x_vec, y_vec, num_p_unkwn, num_v_unkwn):
            self.petsc_matF = petsc_matF
            self.petsc_matD = petsc_matD
            self.petsc_matB = petsc_matB
            self.petsc_matBt = petsc_matBt
            self.petsc_matC = petsc_matC
            self.x_vec = x_vec
            self.y_vec = y_vec
            self.num_p_unkwn = num_p_unkwn
            self.num_v_unkwn = num_v_unkwn

    vals_F = [3.2, 1.1, 6.3, 1., -5.1]
    col_idx_F = [0, 1, 0, 2, 0]
    row_idx_F = [0, 2, 4, 5]

    vals_D = [5.5, 7.1, 1.0]
    col_idx_D = [0, 1, 2]
    row_idx_D = [0, 1, 2, 3]

    vals_B = [1.1, 6.3, 7.3, 3.6, 6.3]
    col_idx_B = [0, 2, 0, 1, 2]
    row_idx_B = [0, 2, 5]

    vals_Bt = [1.1, 7.3, 3.6, 6.3, 6.3]
    col_idx_Bt = [0, 1, 1, 0, 1]
    row_idx_Bt = [0, 2, 3, 5]

    vals_C = [1.2, 2.1, 3.3]
    col_idx_C = [0, 1, 1]
    row_idx_C = [0, 2, 3]

    num_p_unkwn = len(row_idx_B) - 1
    num_v_unkwn = len(row_idx_F) - 1

    petsc_matF = LAT.csr_2_petsc(size=(num_v_unkwn, num_v_unkwn),
                                 csr=(row_idx_F, col_idx_F, vals_F))
    petsc_matD = LAT.csr_2_petsc(size=(num_v_unkwn, num_v_unkwn),
                                 csr=(row_idx_D, col_idx_D, vals_D))
    petsc_matB = LAT.csr_2_petsc(size=(num_p_unkwn, num_v_unkwn),
                                 csr=(row_idx_B, col_idx_B, vals_B))
    petsc_matBt = LAT.csr_2_petsc(size=(num_v_unkwn, num_p_unkwn),
                                  csr=(row_idx_Bt, col_idx_Bt, vals_Bt))
    petsc_matC = LAT.csr_2_petsc(size=(num_p_unkwn, num_p_unkwn),
                                 csr=(row_idx_C, col_idx_C, vals_C))

    x_vec = np.ones(num_p_unkwn)
    y_vec = np.zeros(num_p_unkwn)
    x_PETSc_vec = p4pyPETSc.Vec().createWithArray(x_vec)
    y_PETSc_vec = p4pyPETSc.Vec().createWithArray(y_vec)

    output_data = Output_Storage(petsc_matF, petsc_matD, petsc_matB,
                                 petsc_matBt, petsc_matC, x_PETSc_vec,
                                 y_PETSc_vec, num_p_unkwn, num_v_unkwn)

    yield output_data
Exemplo n.º 9
0
def create_simple_saddle_point_problem(request):
    """Builds simple matrices and vectors for saddle point shell tests.

    Returns
    -------
    output_lst : lst
        This function returns an output list with three sublists.  See
        the notes below for a description of these lists.

    Notes
    -----
    The output of this function returns xxx sublists.  The first
    contains a list of matrices.  The second returns a list
    of vectors.  The last returns a list of sizes.
    """
    class Output_Storage(object):
        """Storage class for matrix objects. """
        def __init__(self,
                     petsc_matF,
                     petsc_matD,
                     petsc_matB,
                     petsc_matBt,
                     petsc_matC,
                     x_vec,
                     y_vec,
                     num_p_unkwn,
                     num_v_unkwn):
            self.petsc_matF = petsc_matF
            self.petsc_matD = petsc_matD
            self.petsc_matB = petsc_matB
            self.petsc_matBt = petsc_matBt
            self.petsc_matC = petsc_matC
            self.x_vec = x_vec
            self.y_vec = y_vec
            self.num_p_unkwn = num_p_unkwn
            self.num_v_unkwn = num_v_unkwn

    vals_F  =    [3.2, 1.1, 6.3, 1., -5.1]
    col_idx_F  = [0, 1, 0, 2, 0]
    row_idx_F  = [0, 2, 4, 5]

    vals_D =     [5.5,7.1,1.0]
    col_idx_D =  [0 , 1 , 2  ]
    row_idx_D =  [0, 1, 2, 3]

    vals_B    =  [1.1, 6.3, 7.3, 3.6, 6.3]
    col_idx_B =  [0  , 2  , 0  , 1  , 2  ]
    row_idx_B =  [0, 2, 5]

    vals_Bt   =  [1.1, 7.3, 3.6, 6.3, 6.3]
    col_idx_Bt = [0, 1, 1, 0, 1]
    row_idx_Bt = [0, 2, 3, 5]

    vals_C = [1.2, 2.1, 3.3]
    col_idx_C = [0, 1, 1]
    row_idx_C = [0, 2, 3]

    num_p_unkwn = len(row_idx_B) - 1
    num_v_unkwn = len(row_idx_F) - 1

    petsc_matF = LAT.csr_2_petsc(size = (num_v_unkwn,num_v_unkwn),
                                 csr = (row_idx_F,col_idx_F,vals_F))
    petsc_matD = LAT.csr_2_petsc(size = (num_v_unkwn,num_v_unkwn),
                                 csr = (row_idx_D,col_idx_D,vals_D))
    petsc_matB = LAT.csr_2_petsc(size = (num_p_unkwn,num_v_unkwn),
                                 csr = (row_idx_B,col_idx_B,vals_B))
    petsc_matBt = LAT.csr_2_petsc(size = (num_v_unkwn,num_p_unkwn),
                                  csr = (row_idx_Bt,col_idx_Bt,vals_Bt))
    petsc_matC = LAT.csr_2_petsc(size = (num_p_unkwn,num_p_unkwn),
                                 csr = (row_idx_C,col_idx_C,vals_C))

    x_vec = np.ones(num_p_unkwn)
    y_vec = np.zeros(num_p_unkwn)
    x_PETSc_vec = p4pyPETSc.Vec().createWithArray(x_vec)
    y_PETSc_vec = p4pyPETSc.Vec().createWithArray(y_vec)

    output_data = Output_Storage(petsc_matF,
                                 petsc_matD,
                                 petsc_matB,
                                 petsc_matBt,
                                 petsc_matC,
                                 x_PETSc_vec,
                                 y_PETSc_vec,
                                 num_p_unkwn,
                                 num_v_unkwn)

    yield output_data