Actual source code: ex46.c
2: static char help[] = "Tests late MatSetBlockSizes.\n\n";
4: #include <petscmat.h>
6: int main(int argc, char **args)
7: {
8: Mat A;
9: Vec x[4];
10: IS is;
11: ISLocalToGlobalMapping rmap, cmap;
12: PetscInt bs[4], l2gbs[4], rbs, cbs, l2grbs, l2gcbs, i;
14: PetscFunctionBeginUser;
15: PetscCall(PetscInitialize(&argc, &args, (char *)0, help));
16: PetscCall(MatCreate(PETSC_COMM_WORLD, &A));
17: PetscCall(MatSetSizes(A, 12, 12, PETSC_DECIDE, PETSC_DECIDE));
18: PetscCall(MatSetType(A, MATAIJ));
19: PetscCall(ISCreateStride(PETSC_COMM_WORLD, 12, 0, 1, &is));
20: PetscCall(ISLocalToGlobalMappingCreateIS(is, &rmap));
21: PetscCall(ISLocalToGlobalMappingSetBlockSize(rmap, 2));
22: PetscCall(ISLocalToGlobalMappingCreateIS(is, &cmap));
23: PetscCall(ISLocalToGlobalMappingSetBlockSize(cmap, 2));
25: PetscCall(MatSetLocalToGlobalMapping(A, rmap, cmap));
26: PetscCall(ISLocalToGlobalMappingDestroy(&rmap));
27: PetscCall(ISLocalToGlobalMappingDestroy(&cmap));
28: PetscCall(ISDestroy(&is));
29: PetscCall(MatSetUp(A));
31: PetscCall(MatCreateVecs(A, &x[1], &x[0]));
32: PetscCall(MatSetBlockSizes(A, 6, 3));
33: PetscCall(MatCreateVecs(A, &x[3], &x[2]));
34: for (i = 0; i < 4; i++) {
35: ISLocalToGlobalMapping l2g;
37: PetscCall(VecGetBlockSize(x[i], &bs[i]));
38: PetscCall(VecGetLocalToGlobalMapping(x[i], &l2g));
39: PetscCall(ISLocalToGlobalMappingGetBlockSize(l2g, &l2gbs[i]));
40: PetscCall(VecDestroy(&x[i]));
41: }
42: PetscCall(MatGetBlockSizes(A, &rbs, &cbs));
43: PetscCall(MatGetLocalToGlobalMapping(A, &rmap, &cmap));
44: PetscCall(ISLocalToGlobalMappingGetBlockSize(rmap, &l2grbs));
45: PetscCall(ISLocalToGlobalMappingGetBlockSize(cmap, &l2gcbs));
46: PetscCall(MatDestroy(&A));
47: PetscCall(PetscPrintf(PETSC_COMM_WORLD, "Mat Block sizes: %" PetscInt_FMT " %" PetscInt_FMT " (l2g %" PetscInt_FMT " %" PetscInt_FMT ")\n", rbs, cbs, l2grbs, l2gcbs));
48: PetscCall(PetscPrintf(PETSC_COMM_WORLD, "Vec Block sizes: %" PetscInt_FMT " %" PetscInt_FMT " (l2g %" PetscInt_FMT " %" PetscInt_FMT ")\n", bs[0], bs[1], l2gbs[0], l2gbs[1]));
49: PetscCall(PetscPrintf(PETSC_COMM_WORLD, "Vec Block sizes: %" PetscInt_FMT " %" PetscInt_FMT " (l2g %" PetscInt_FMT " %" PetscInt_FMT ")\n", bs[2], bs[3], l2gbs[2], l2gbs[3]));
50: PetscCall(PetscFinalize());
51: return 0;
52: }
54: /*TEST
56: test:
57: nsize: 2
59: TEST*/