static char help[] = ""; #include #include #undef __FUNCT__ #define __FUNCT__ "main" int main(int argc,char **args) { Vec x,b; Mat A,; KSP ksp; PC pc; PetscRandom rctx; PetscInt M,N; PetscErrorCode ierr; PetscViewer viewer; PetscReal maxx,minx; PetscInitialize(&argc,&args,(char *)0,help); ierr = PetscViewerBinaryOpen(PETSC_COMM_WORLD,"A.dat",FILE_MODE_READ,&viewer);CHKERRQ(ierr); ierr = MatCreate(PETSC_COMM_WORLD,&A);CHKERRQ(ierr); ierr = MatSetFromOptions(A);CHKERRQ(ierr); ierr = MatLoad(A,viewer);CHKERRQ(ierr); ierr = PetscViewerDestroy(&viewer);CHKERRQ(ierr); MatGetSize(A,&N,&M); VecCreateMPI(MPI_COMM_WORLD,PETSC_DECIDE,N,&x); VecCreateMPI(MPI_COMM_WORLD,PETSC_DECIDE,M,&b); KSPCreate(MPI_COMM_WORLD,&ksp); KSPSetType(ksp,KSPGMRES); KSPSetTolerances(ksp,1.0e-8,PETSC_DEFAULT,PETSC_DEFAULT,100); KSPGMRESSetRestart(ksp, 100); KSPSetComputeSingularValues(ksp,PETSC_TRUE); KSPSetFromOptions(ksp); PetscRandomCreate(PETSC_COMM_WORLD,&rctx); PetscRandomSetFromOptions(rctx); VecSetRandom(b,rctx); KSPGetPC(ksp,&pc); PCSetType(pc,PCNONE); KSPSetOperators(ksp,A,A,SAME_PRECONDITIONER); KSPSolve(ksp,b,x); KSPComputeExtremeSingularValues(ksp, &maxx, &minx); ierr = PetscPrintf(PETSC_COMM_WORLD,"%e \n", maxx); KSPDestroy(&ksp); MatDestroy(&A); VecDestroy(&x); VecDestroy(&b); ierr = PetscFinalize(); return 0; }