Actual source code: ex95.c
1: static char help[] = "Testing MatCreateMPIAIJSumSeqAIJ().\n\n";
3: #include <petscmat.h>
5: int main(int argc, char **argv)
6: {
7: Mat A, B;
8: MatScalar a[1], alpha;
9: PetscMPIInt size, rank;
10: PetscInt m, n, i, col, prid;
12: PetscFunctionBeginUser;
13: PetscCall(PetscInitialize(&argc, &argv, NULL, help));
14: PetscCallMPI(MPI_Comm_size(PETSC_COMM_WORLD, &size));
15: PetscCallMPI(MPI_Comm_rank(PETSC_COMM_WORLD, &rank));
16: prid = size;
17: PetscCall(PetscOptionsGetInt(NULL, NULL, "-prid", &prid, NULL));
19: m = n = 10 * size;
20: PetscCall(MatCreate(PETSC_COMM_SELF, &A));
21: PetscCall(MatSetSizes(A, PETSC_DETERMINE, PETSC_DETERMINE, m, n));
22: PetscCall(MatSetType(A, MATSEQAIJ));
23: PetscCall(MatSetUp(A));
25: a[0] = rank + 1;
26: for (i = 0; i < m - rank; i++) {
27: col = i + rank;
28: PetscCall(MatSetValues(A, 1, &i, 1, &col, a, INSERT_VALUES));
29: }
30: PetscCall(MatAssemblyBegin(A, MAT_FINAL_ASSEMBLY));
31: PetscCall(MatAssemblyEnd(A, MAT_FINAL_ASSEMBLY));
33: if (rank == prid) {
34: PetscCall(PetscPrintf(PETSC_COMM_SELF, "[%d] A: \n", rank));
35: PetscCall(MatView(A, PETSC_VIEWER_STDOUT_SELF));
36: }
38: /* Test MatCreateMPIAIJSumSeqAIJ */
39: PetscCall(MatCreateMPIAIJSumSeqAIJ(PETSC_COMM_WORLD, A, PETSC_DECIDE, PETSC_DECIDE, MAT_INITIAL_MATRIX, &B));
41: /* Test MAT_REUSE_MATRIX */
42: alpha = 0.1;
43: for (i = 0; i < 3; i++) {
44: PetscCall(MatScale(A, alpha));
45: PetscCall(MatCreateMPIAIJSumSeqAIJ(PETSC_COMM_WORLD, A, PETSC_DECIDE, PETSC_DECIDE, MAT_REUSE_MATRIX, &B));
46: }
47: PetscCall(MatView(B, PETSC_VIEWER_STDOUT_WORLD));
48: PetscCall(MatDestroy(&B));
49: PetscCall(MatDestroy(&A));
50: PetscCall(PetscFinalize());
51: return 0;
52: }
54: /*TEST
56: test:
57: nsize: 3
58: filter: grep -v " MPI process"
60: test:
61: suffix: 2
62: filter: grep -v " MPI process"
64: TEST*/