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