Actual source code: ex87.c


  2: static char help[] = "Tests MatCreateSubMatrices() for SBAIJ matrices\n\n";

  4: #include <petscmat.h>

  6: int main(int argc, char **args)
  7: {
  8:   Mat         BAIJ, SBAIJ, *subBAIJ, *subSBAIJ;
  9:   PetscViewer viewer;
 10:   char        file[PETSC_MAX_PATH_LEN];
 11:   PetscBool   flg;
 12:   PetscInt    n = 2, issize, M, N;
 13:   PetscMPIInt rank;
 14:   IS          isrow, iscol, irow[n], icol[n];

 17:   PetscInitialize(&argc, &args, (char *)0, help);
 18:   PetscOptionsGetString(NULL, NULL, "-f", file, sizeof(file), &flg);
 19:   PetscViewerBinaryOpen(PETSC_COMM_WORLD, file, FILE_MODE_READ, &viewer);

 21:   MatCreate(PETSC_COMM_WORLD, &BAIJ);
 22:   MatSetType(BAIJ, MATMPIBAIJ);
 23:   MatLoad(BAIJ, viewer);
 24:   PetscViewerDestroy(&viewer);

 26:   PetscViewerBinaryOpen(PETSC_COMM_WORLD, file, FILE_MODE_READ, &viewer);
 27:   MatCreate(PETSC_COMM_WORLD, &SBAIJ);
 28:   MatSetType(SBAIJ, MATMPISBAIJ);
 29:   MatLoad(SBAIJ, viewer);
 30:   PetscViewerDestroy(&viewer);

 32:   MatGetSize(BAIJ, &M, &N);
 33:   issize = M / 4;
 34:   ISCreateStride(PETSC_COMM_SELF, issize, 0, 1, &isrow);
 35:   irow[0] = irow[1] = isrow;
 36:   issize            = N / 2;
 37:   ISCreateStride(PETSC_COMM_SELF, issize, 0, 1, &iscol);
 38:   icol[0] = icol[1] = iscol;
 39:   MatCreateSubMatrices(BAIJ, n, irow, icol, MAT_INITIAL_MATRIX, &subBAIJ);
 40:   MatCreateSubMatrices(BAIJ, n, irow, icol, MAT_REUSE_MATRIX, &subBAIJ);

 42:   /* irow and icol must be same for SBAIJ matrices! */
 43:   icol[0] = icol[1] = isrow;
 44:   MatCreateSubMatrices(SBAIJ, n, irow, icol, MAT_INITIAL_MATRIX, &subSBAIJ);
 45:   MatCreateSubMatrices(SBAIJ, n, irow, icol, MAT_REUSE_MATRIX, &subSBAIJ);

 47:   MPI_Comm_rank(PETSC_COMM_WORLD, &rank);
 48:   if (rank == 0) {
 49:     MatView(subBAIJ[0], PETSC_VIEWER_STDOUT_SELF);
 50:     MatView(subSBAIJ[0], PETSC_VIEWER_STDOUT_SELF);
 51:   }

 53:   /* Free data structures */
 54:   ISDestroy(&isrow);
 55:   ISDestroy(&iscol);
 56:   MatDestroySubMatrices(n, &subBAIJ);
 57:   MatDestroySubMatrices(n, &subSBAIJ);
 58:   MatDestroy(&BAIJ);
 59:   MatDestroy(&SBAIJ);

 61:   PetscFinalize();
 62:   return 0;
 63: }