On Sun, Jul 2, 2023 at 2:24 AM 王赫萌 <wanghem...@163.com> wrote:
> Dear PETSc Team, > > Sorry to bother! My name is Hemeng Wang, and I am currently learning the > use of PETSc software package. I am confused while calculating the norm of > residue. > > I calculated residue norm by myself with: > ``` > PetscCall(VecNorm(b, NORM_2, &norm_b)); // (main.c, line 74) > > PetscCall(VecDuplicate(b, &u)); // (main.c, line 105) > PetscCall(MatMult(A, x, u)); > PetscCall(VecAXPY(b, -1.0, u)); > PetscCall(VecNorm(b, NORM_2, &norm_delta)); > ``` > and check the (norm_delta) / (norm_b). It seems not the `atol` which set > by `KSPSetTolerances()`. > (I set atol as 1e-12, but got 5e-7 finally) > (options: -ksp_type cg -pc_type gamg -ksp_converged_reason -ksp_norm_type > unpreconditioned -ksp_monitor_true_residual) > If you are using the default convergence test, there is an absolute tolerance (atol) _and_ a relative tolerance (rtol). It seems likely you hit the relative tolerance. You can check this using -ksp_converged_reason You could make rtol really small if you want to just see the atol -ksp_rtol 1e-20 Thanks, Matt > I also check the soure code of `KSPSolve_CG` in > `petsc/src/ksp/ksp/impls/cg/cg.c`. And could not figure out where is the > difference. > > I will really really appreciated if someone can explain the calculation of > `resid norm` in petsc. And where is my mistake. > > To provide you with more context, here are the source code about my > implementation. And the output of my test. > > main.c > Main code of my program > > mmio.h mmloader.h > Headers for matrix read > > Makefile > For compiling, same as sample provided > > task.sh > A script for running program in `slurm` > > slurm-4803840.out > Output of my test > > Thank you very much for your time and attention. I greatly appreciate your > support and look forward to hearing from you soon. > Best regards, > Hemeng Wang > > -- What most experimenters take for granted before they begin their experiments is infinitely more interesting than any results to which their experiments lead. -- Norbert Wiener https://www.cse.buffalo.edu/~knepley/ <http://www.cse.buffalo.edu/~knepley/>