1 2 static char help[] = "Tests MatILUFactorSymbolic() on matrix with missing diagonal.\n\n"; 3 4 #include <petscmat.h> 5 #include <petscpc.h> 6 7 int main(int argc,char **args) 8 { 9 Mat C,A; 10 PetscInt i,j; 11 PetscErrorCode ierr; 12 PetscScalar v; 13 PC pc; 14 Vec xtmp; 15 16 ierr = PetscInitialize(&argc,&args,(char*)0,help);if (ierr) return ierr; 17 ierr = MatCreate(PETSC_COMM_WORLD,&C);CHKERRQ(ierr); 18 ierr = MatSetSizes(C,PETSC_DECIDE,PETSC_DECIDE,3,3);CHKERRQ(ierr); 19 ierr = MatSetFromOptions(C);CHKERRQ(ierr); 20 ierr = MatSetUp(C);CHKERRQ(ierr); 21 ierr = VecCreateSeq(PETSC_COMM_WORLD,3,&xtmp);CHKERRQ(ierr); 22 i = 0; j = 0; v = 4; 23 ierr = MatSetValues(C,1,&i,1,&j,&v,INSERT_VALUES);CHKERRQ(ierr); 24 i = 0; j = 2; v = 1; 25 ierr = MatSetValues(C,1,&i,1,&j,&v,INSERT_VALUES);CHKERRQ(ierr); 26 i = 1; j = 0; v = 1; 27 ierr = MatSetValues(C,1,&i,1,&j,&v,INSERT_VALUES);CHKERRQ(ierr); 28 i = 1; j = 1; v = 4; 29 ierr = MatSetValues(C,1,&i,1,&j,&v,INSERT_VALUES);CHKERRQ(ierr); 30 i = 2; j = 1; v = 1; 31 ierr = MatSetValues(C,1,&i,1,&j,&v,INSERT_VALUES);CHKERRQ(ierr); 32 33 ierr = MatAssemblyBegin(C,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr); 34 ierr = MatAssemblyEnd(C,MAT_FINAL_ASSEMBLY);CHKERRQ(ierr); 35 36 ierr = MatView(C,PETSC_VIEWER_STDOUT_WORLD);CHKERRQ(ierr); 37 ierr = PCCreate(PETSC_COMM_WORLD,&pc);CHKERRQ(ierr); 38 ierr = PCSetFromOptions(pc);CHKERRQ(ierr); 39 ierr = PCSetOperators(pc,C,C);CHKERRQ(ierr); 40 ierr = PCSetUp(pc);CHKERRQ(ierr); 41 ierr = PCFactorGetMatrix(pc,&A);CHKERRQ(ierr); 42 ierr = MatView(A,PETSC_VIEWER_STDOUT_WORLD);CHKERRQ(ierr); 43 44 ierr = PCDestroy(&pc);CHKERRQ(ierr); 45 ierr = VecDestroy(&xtmp);CHKERRQ(ierr); 46 ierr = MatDestroy(&C);CHKERRQ(ierr); 47 48 ierr = PetscFinalize(); 49 return ierr; 50 } 51 52