Actual source code: lsqr_monitor.c
1: #include <petscksp.h>
2: #include <../src/ksp/ksp/impls/lsqr/lsqr.h>
5: PetscErrorCode KSPMonitorLSQR(KSP solksp, PetscInt iter, PetscReal rnorm, void *ctx)
6: {
7: PetscInt mxiter; /* Maximum number of iterations */
8: PetscReal arnorm; /* The norm of the vector A.r */
9: PetscReal atol; /* Absolute convergence tolerance */
10: PetscReal dtol; /* Divergence tolerance */
11: PetscReal rtol; /* Relative convergence tolerance */
12: Vec x_sol;
13: PetscReal xnorm;
14: PetscErrorCode ierr;
15: MPI_Comm comm;
16:
18: PetscObjectGetComm((PetscObject)solksp,&comm);
19: KSPGetTolerances( solksp, &rtol, &atol, &dtol, &mxiter );
20: KSPLSQRGetArnorm( solksp, &arnorm,PETSC_NULL,PETSC_NULL);
21: KSPGetSolution( solksp, &x_sol );
22: VecNorm( x_sol, NORM_2, &xnorm );
24: if (iter % 100 == 0){
25: PetscPrintf(comm, "Iteration Res norm Grad norm Upd norm\n");
26: }
27: if (iter <= 10 || iter >= mxiter - 10 || iter % 10 == 0){
28: PetscPrintf(comm, "%10d %10.7e %10.7e %10.7e\n", iter, rnorm , arnorm, xnorm );
29: }
30: return(0);
31: }