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 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 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, (char *)0, 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