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