Actual source code: ex207.c

  1: static char help[] = "Test MatCreateRedundantMatrix for a BAIJ matrix.\n\
  2:                       Contributed by Lawrence Mitchell, Feb. 21, 2017\n\n";

  4: #include <petscmat.h>
  5: int main(int argc, char **args)
  6: {
  7:   Mat         A, B;
  8:   Vec         diag;
  9:   PetscMPIInt size, rank;

 11:   PetscFunctionBeginUser;
 12:   PetscCall(PetscInitialize(&argc, &args, (char *)0, help));
 13:   PetscCallMPI(MPI_Comm_size(PETSC_COMM_WORLD, &size));
 14:   PetscCallMPI(MPI_Comm_rank(PETSC_COMM_WORLD, &rank));

 16:   PetscCall(MatCreate(PETSC_COMM_WORLD, &A));
 17:   PetscCall(MatSetSizes(A, 2, 2, PETSC_DETERMINE, PETSC_DETERMINE));
 18:   PetscCall(MatSetBlockSize(A, 2));
 19:   PetscCall(MatSetType(A, MATBAIJ));
 20:   PetscCall(MatSetUp(A));

 22:   PetscCall(MatCreateVecs(A, &diag, NULL));
 23:   PetscCall(VecSet(diag, 1.0));
 24:   PetscCall(MatDiagonalSet(A, diag, INSERT_VALUES));
 25:   PetscCall(MatAssemblyBegin(A, MAT_FINAL_ASSEMBLY));
 26:   PetscCall(MatAssemblyEnd(A, MAT_FINAL_ASSEMBLY));
 27:   PetscCall(MatView(A, PETSC_VIEWER_STDOUT_WORLD));

 29:   PetscCall(MatCreateRedundantMatrix(A, size, MPI_COMM_NULL, MAT_INITIAL_MATRIX, &B));
 30:   if (rank == 0) PetscCall(MatView(B, PETSC_VIEWER_STDOUT_SELF));

 32:   PetscCall(MatDestroy(&A));
 33:   PetscCall(MatDestroy(&B));
 34:   PetscCall(VecDestroy(&diag));
 35:   PetscCall(PetscFinalize());
 36:   return 0;
 37: }

 39: /*TEST

 41:    test:

 43:    test:
 44:       suffix: 2
 45:       nsize: 3

 47: TEST*/