1 static char help[] = "Tests copying and ordering uniprocessor row-based sparse matrices.\n\n";
2
3 #include <petscmat.h>
4
main(int argc,char ** args)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;
11
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));
42
43 PetscCall(MatConvert(C, MATSAME, MAT_INITIAL_MATRIX, &A));
44
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));
49
50 PetscCall(ISDestroy(&perm));
51 PetscCall(ISDestroy(&iperm));
52 PetscCall(MatDestroy(&C));
53 PetscCall(MatDestroy(&A));
54 PetscCall(PetscFinalize());
55 return 0;
56 }
57
58 /*TEST
59
60 test:
61 filter: grep -v " MPI process"
62
63 TEST*/
64