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 than one process");
22: if (rank) {
23: for (PetscInt i = 0; i < 3; i++) ia[i] = 0;
24: for (PetscInt i = 0; i < 5; i++) ia2[i] = 0;
25: }
26: PetscCall(PetscOptionsGetBool(NULL, NULL, "-rect", &rect, NULL));
27: PetscCall(MatCreate(PETSC_COMM_WORLD, &ssbaij));
28: PetscCall(MatSetBlockSize(ssbaij, 2));
29: if (rect) {
30: PetscCall(MatSetType(ssbaij, MATMPIBAIJ));
31: PetscCall(MatSetSizes(ssbaij, 4, 6, PETSC_DECIDE, PETSC_DECIDE));
32: } else {
33: PetscCall(MatSetType(ssbaij, MATMPISBAIJ));
34: PetscCall(MatSetSizes(ssbaij, 4, 4, PETSC_DECIDE, PETSC_DECIDE));
35: }
36: PetscCall(MatSetFromOptions(ssbaij));
37: PetscCall(MatMPIAIJSetPreallocationCSR(ssbaij, ia2, ja2, c2));
38: PetscCall(MatMPIBAIJSetPreallocationCSR(ssbaij, 2, ia, ja, c));
39: PetscCall(MatMPISBAIJSetPreallocationCSR(ssbaij, 2, ia, ja, c));
40: PetscCall(MatViewFromOptions(ssbaij, NULL, "-view"));
41: PetscCall(MatDestroy(&ssbaij));
42: PetscCall(PetscFinalize());
43: return 0;
44: }
46: /*TEST
48: test:
49: filter: grep -v type | sed -e "s/\.//g"
50: suffix: aijbaij_csr
51: nsize: 2
52: args: -mat_type {{aij baij}} -view -rect {{0 1}}
54: test:
55: filter: sed -e "s/\.//g"
56: suffix: sbaij_csr
57: nsize: 2
58: args: -mat_type sbaij -view -rect {{0 1}}
60: TEST*/