Actual source code: ex13.c
1: static char help[] = "Tests copying and ordering uniprocessor row-based sparse matrices.\n\n";
3: #include <petscmat.h>
5: int main(int argc, char **args)
6: {
7: Mat C, A;
8: PetscInt i, j, m = 5, n = 5, Ii, J;
9: PetscScalar v;
10: IS perm, iperm;
12: PetscFunctionBeginUser;
13: PetscCall(PetscInitialize(&argc, &args, NULL, help));
14: PetscCall(MatCreateSeqAIJ(PETSC_COMM_SELF, m * n, m * n, 5, NULL, &C));
15: /* create the matrix for the five point stencil, YET AGAIN*/
16: for (i = 0; i < m; i++) {
17: for (j = 0; j < n; j++) {
18: v = -1.0;
19: Ii = j + n * i;
20: if (i > 0) {
21: J = Ii - n;
22: PetscCall(MatSetValues(C, 1, &Ii, 1, &J, &v, INSERT_VALUES));
23: }
24: if (i < m - 1) {
25: J = Ii + n;
26: PetscCall(MatSetValues(C, 1, &Ii, 1, &J, &v, INSERT_VALUES));
27: }
28: if (j > 0) {
29: J = Ii - 1;
30: PetscCall(MatSetValues(C, 1, &Ii, 1, &J, &v, INSERT_VALUES));
31: }
32: if (j < n - 1) {
33: J = Ii + 1;
34: PetscCall(MatSetValues(C, 1, &Ii, 1, &J, &v, INSERT_VALUES));
35: }
36: v = 4.0;
37: PetscCall(MatSetValues(C, 1, &Ii, 1, &Ii, &v, INSERT_VALUES));
38: }
39: }
40: PetscCall(MatAssemblyBegin(C, MAT_FINAL_ASSEMBLY));
41: PetscCall(MatAssemblyEnd(C, MAT_FINAL_ASSEMBLY));
43: PetscCall(MatConvert(C, MATSAME, MAT_INITIAL_MATRIX, &A));
45: PetscCall(MatGetOrdering(A, MATORDERINGND, &perm, &iperm));
46: PetscCall(ISView(perm, PETSC_VIEWER_STDOUT_SELF));
47: PetscCall(ISView(iperm, PETSC_VIEWER_STDOUT_SELF));
48: PetscCall(MatView(A, PETSC_VIEWER_STDOUT_SELF));
50: PetscCall(ISDestroy(&perm));
51: PetscCall(ISDestroy(&iperm));
52: PetscCall(MatDestroy(&C));
53: PetscCall(MatDestroy(&A));
54: PetscCall(PetscFinalize());
55: return 0;
56: }
58: /*TEST
60: test:
61: filter: grep -v " MPI process"
63: TEST*/