Actual source code: ex233.c

  1: static char help[] = "Tests MatMPI{AIJ,BAIJ,SBAIJ}SetPreallocationCSR\n\n";

  3: #include <petscmat.h>

  5: int main(int argc, char **argv)
  6: {
  7:   PetscInt    ia[3]   = {0, 2, 4};
  8:   PetscInt    ja[4]   = {0, 1, 0, 1};
  9:   PetscScalar c[16]   = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15};
 10:   PetscInt    ia2[5]  = {0, 4, 8, 12, 16};
 11:   PetscInt    ja2[16] = {0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3, 0, 1, 2, 3};
 12:   PetscScalar c2[16]  = {0, 1, 4, 5, 2, 3, 6, 7, 8, 9, 12, 13, 10, 11, 14, 15};
 13:   PetscMPIInt size, rank;
 14:   Mat         ssbaij;
 15:   PetscBool   rect = PETSC_FALSE;

 17:   PetscFunctionBeginUser;
 18:   PetscCall(PetscInitialize(&argc, &argv, NULL, help));
 19:   PetscCallMPI(MPI_Comm_size(PETSC_COMM_WORLD, &size));
 20:   PetscCallMPI(MPI_Comm_rank(PETSC_COMM_WORLD, &rank));
 21:   PetscCheck(size > 1, PETSC_COMM_WORLD, PETSC_ERR_WRONG_MPI_SIZE, "This is an example with more then one processors");
 22:   if (rank) {
 23:     PetscInt i;
 24:     for (i = 0; i < 3; i++) ia[i] = 0;
 25:     for (i = 0; i < 5; i++) ia2[i] = 0;
 26:   }
 27:   PetscCall(PetscOptionsGetBool(NULL, NULL, "-rect", &rect, NULL));
 28:   PetscCall(MatCreate(PETSC_COMM_WORLD, &ssbaij));
 29:   PetscCall(MatSetBlockSize(ssbaij, 2));
 30:   if (rect) {
 31:     PetscCall(MatSetType(ssbaij, MATMPIBAIJ));
 32:     PetscCall(MatSetSizes(ssbaij, 4, 6, PETSC_DECIDE, PETSC_DECIDE));
 33:   } else {
 34:     PetscCall(MatSetType(ssbaij, MATMPISBAIJ));
 35:     PetscCall(MatSetSizes(ssbaij, 4, 4, PETSC_DECIDE, PETSC_DECIDE));
 36:   }
 37:   PetscCall(MatSetFromOptions(ssbaij));
 38:   PetscCall(MatMPIAIJSetPreallocationCSR(ssbaij, ia2, ja2, c2));
 39:   PetscCall(MatMPIBAIJSetPreallocationCSR(ssbaij, 2, ia, ja, c));
 40:   PetscCall(MatMPISBAIJSetPreallocationCSR(ssbaij, 2, ia, ja, c));
 41:   PetscCall(MatViewFromOptions(ssbaij, NULL, "-view"));
 42:   PetscCall(MatDestroy(&ssbaij));
 43:   PetscCall(PetscFinalize());
 44:   return 0;
 45: }

 47: /*TEST

 49:   test:
 50:     filter: grep -v type | sed -e "s/\.//g"
 51:     suffix: aijbaij_csr
 52:     nsize: 2
 53:     args: -mat_type {{aij baij}} -view -rect {{0 1}}

 55:   test:
 56:     filter: sed -e "s/\.//g"
 57:     suffix: sbaij_csr
 58:     nsize: 2
 59:     args: -mat_type sbaij -view -rect {{0 1}}

 61: TEST*/