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*/