Actual source code: ex210.c
1: static char help[] = "Test MatCreateNest with block sizes.\n";
3: #include <petscmat.h>
5: int main(int argc, char **argv)
6: {
7: Mat A, B, C, mats[2];
8: ISLocalToGlobalMapping cmap, rmap;
9: const PetscInt indices[1] = {0};
10: PetscMPIInt size;
12: PetscInitialize(&argc, &argv, NULL, help);
13: MPI_Comm_size(PETSC_COMM_WORLD, &size);
15: MatCreate(PETSC_COMM_WORLD, &A);
16: MatSetSizes(A, PETSC_DECIDE, PETSC_DECIDE, 1, 2);
17: MatSetBlockSizes(A, 1, 2);
18: MatSetType(A,MATAIJ);
19: ISLocalToGlobalMappingCreate(PETSC_COMM_WORLD, 2, 1, indices,PETSC_COPY_VALUES, &cmap);
20: ISLocalToGlobalMappingCreate(PETSC_COMM_WORLD, 1, 1, indices,PETSC_COPY_VALUES, &rmap);
21: MatSetLocalToGlobalMapping(A, rmap, cmap);
22: MatCreate(PETSC_COMM_WORLD, &B);
23: MatSetSizes(B, PETSC_DECIDE, PETSC_DECIDE, 1, 1);
24: MatSetBlockSizes(A, 1, 1);
25: MatSetType(B,MATAIJ);
26: MatSetLocalToGlobalMapping(B, rmap, rmap);
27: ISLocalToGlobalMappingDestroy(&rmap);
28: ISLocalToGlobalMappingDestroy(&cmap);
29: MatSetUp(A);
30: MatSetUp(B);
31: mats[0] = A;
32: mats[1] = B;
33: MatCreateNest(PETSC_COMM_WORLD, 1, NULL, 2, NULL, mats,&C);
34: MatSetUp(C);
35: MatAssemblyBegin(C, MAT_FINAL_ASSEMBLY);
36: MatAssemblyEnd(C, MAT_FINAL_ASSEMBLY);
37: MatView(C, NULL);
38: MatDestroy(&C);
39: MatDestroy(&B);
40: MatDestroy(&A);
41: PetscFinalize();
42: return 0;
43: }
45: /*TEST
47: test:
49: TEST*/