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
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
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)
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])
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])
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
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
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
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