Actual source code: ex81.c
1: static char help[] = "Test different KSP and Mat prefixes.\n\n";
3: #include <petscksp.h>
5: int main(int argc, char **args)
6: {
7: KSP ksp;
8: PC pc;
9: Mat A, B, C;
11: PetscFunctionBeginUser;
12: PetscCall(PetscInitialize(&argc, &args, NULL, help));
13: PetscCall(MatCreateConstantDiagonal(PETSC_COMM_WORLD, 2, 2, PETSC_DECIDE, PETSC_DECIDE, 1.0, &A));
14: PetscCall(MatConvert(A, MATAIJ, MAT_INPLACE_MATRIX, &A));
15: PetscCall(MatDuplicate(A, MAT_COPY_VALUES, &B));
16: PetscCall(MatDuplicate(A, MAT_COPY_VALUES, &C));
17: PetscCall(KSPCreate(PETSC_COMM_WORLD, &ksp));
18: PetscCall(MatSetOptionsPrefix(A, "alpha_"));
19: PetscCall(KSPSetOperators(ksp, A, A));
20: PetscCall(KSPSetOptionsPrefix(ksp, "beta_"));
21: PetscCall(KSPSetFromOptions(ksp));
22: PetscCall(KSPGetPC(ksp, &pc));
23: PetscCall(PCSetUp(pc));
24: PetscCall(PCSetUpOnBlocks(pc));
25: PetscCall(PCView(pc, PETSC_VIEWER_STDOUT_WORLD));
26: PetscCall(MatSetOptionsPrefix(C, "gamma_"));
27: PetscCall(KSPSetOperators(ksp, C, C));
28: PetscCall(PCSetUp(pc));
29: PetscCall(PCSetUpOnBlocks(pc));
30: PetscCall(PCView(pc, PETSC_VIEWER_STDOUT_WORLD));
31: PetscCall(KSPDestroy(&ksp));
32: PetscCall(MatDestroy(&C));
33: PetscCall(MatDestroy(&B));
34: PetscCall(MatDestroy(&A));
35: PetscCall(PetscFinalize());
36: return 0;
37: }
39: /*TEST
41: test:
42: nsize: 2
43: requires: mumps
44: args: -beta_pc_type lu -beta_pc_factor_mat_solver_type mumps -beta_mat_mumps_icntl_14 30
46: test:
47: nsize: 2
48: suffix: 2
49: requires: mumps
50: args: -beta_pc_type asm -beta_sub_pc_factor_mat_solver_type mumps -beta_sub_mat_mumps_icntl_14 30 -beta_sub_pc_type lu
52: TEST*/