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