1 static char help[] = "Tests the different MatColoring implementations and ISColoringTestValid() \n\
2 Modified from the code contributed by Ali Berk Kahraman. \n\n";
3 #include <petscmat.h>
4
FormJacobian(Mat A)5 PetscErrorCode FormJacobian(Mat A)
6 {
7 PetscInt M, ownbegin, ownend, i, j;
8 PetscScalar dummy = 0.0;
9
10 PetscFunctionBeginUser;
11 PetscCall(MatGetSize(A, &M, NULL));
12 PetscCall(MatGetOwnershipRange(A, &ownbegin, &ownend));
13
14 for (i = ownbegin; i < ownend; i++) {
15 for (j = i - 3; j < i + 3; j++) {
16 if (j >= 0 && j < M) PetscCall(MatSetValues(A, 1, &i, 1, &j, &dummy, INSERT_VALUES));
17 }
18 }
19 PetscCall(MatAssemblyBegin(A, MAT_FINAL_ASSEMBLY));
20 PetscCall(MatAssemblyEnd(A, MAT_FINAL_ASSEMBLY));
21 PetscFunctionReturn(PETSC_SUCCESS);
22 }
23
main(int argc,char * argv[])24 int main(int argc, char *argv[])
25 {
26 Mat J;
27 PetscMPIInt size;
28 PetscInt M = 8;
29 ISColoring iscoloring;
30 MatColoring coloring;
31
32 PetscFunctionBeginUser;
33 PetscCall(PetscInitialize(&argc, &argv, NULL, help));
34 PetscCallMPI(MPI_Comm_size(PETSC_COMM_WORLD, &size));
35
36 PetscCall(MatCreate(PETSC_COMM_WORLD, &J));
37 PetscCall(MatSetSizes(J, PETSC_DECIDE, PETSC_DECIDE, M, M));
38 PetscCall(MatSetFromOptions(J));
39 PetscCall(MatSetUp(J));
40
41 PetscCall(FormJacobian(J));
42 PetscCall(MatView(J, PETSC_VIEWER_STDOUT_WORLD));
43
44 /*
45 Color the matrix, i.e. determine groups of columns that share no common
46 rows. These columns in the Jacobian can all be computed simultaneously.
47 */
48 PetscCall(MatColoringCreate(J, &coloring));
49 PetscCall(MatColoringSetType(coloring, MATCOLORINGGREEDY));
50 PetscCall(MatColoringSetFromOptions(coloring));
51 PetscCall(MatColoringApply(coloring, &iscoloring));
52
53 if (size == 1) PetscCall(MatISColoringTest(J, iscoloring));
54
55 PetscCall(ISColoringDestroy(&iscoloring));
56 PetscCall(MatColoringDestroy(&coloring));
57 PetscCall(MatDestroy(&J));
58 PetscCall(PetscFinalize());
59 return 0;
60 }
61
62 /*TEST
63
64 test:
65 suffix: sl
66 requires: !complex double !defined(PETSC_USE_64BIT_INDICES)
67 args: -mat_coloring_type sl
68 output_file: output/ex24_1.out
69
70 test:
71 suffix: lf
72 requires: !complex double !defined(PETSC_USE_64BIT_INDICES)
73 args: -mat_coloring_type lf
74 output_file: output/ex24_1.out
75
76 test:
77 suffix: id
78 requires: !complex double !defined(PETSC_USE_64BIT_INDICES)
79 args: -mat_coloring_type id
80 output_file: output/ex24_1.out
81
82 TEST*/
83