On Sun, Jul 2, 2023 at 7:53 AM 王赫萌 <wanghem...@163.com> wrote:
> Thanks for your reply! > So sorry that I made a mistake in the description. > I set the tolerances by: > PetscCall(KSPSetTolerances(ksp, 1e-12, DBL_MIN, PETSC_DEFAULT, > PETSC_DEFAULT)); > and got (by passing `-ksp_norm_type unpreconditioned > -ksp_monitor_true_residual`) > 74 KSP unpreconditioned resid norm 7.256655641876e-08 true resid norm > 7.256655641876e-08 ||r(i)||/||b|| 9.975738158726e-13 > I'm wondering why the ` ||r(i)||/||b||` is different with mine which > calculated by: > ``` > PetscCall(VecNorm(b, NORM_2, &norm_b)); // (main.c, line 74) (which is > 72743.044439) > 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)); // (which is 0.039608) > ``` > and (norm_delta) / (norm_b) = 5.44496e-07 which is higher and different > with the rtol I set (1e-12). > Sorry again for the waste of your time. I would really appreciated if you > could help me again! > 1) 7.256655641876e-08 / 72743.044439 = 9.975738158726e-13 so ||r_i||/||b|| is correct in the output 2) You are asking why you calculate a different residual? I will have to run your code. Thanks, Matt > Best regards! > Hemeng Wang > > > ---- Replied Message ---- > From Matthew Knepley<knep...@gmail.com> <knep...@gmail.com> > Date 7/2/2023 18:51 > To 王赫萌<wanghem...@163.com> <wanghem...@163.com> > Cc petsc-users@mcs.anl.gov<petsc-users@mcs.anl.gov> > <petsc-users@mcs.anl.gov> > Subject Re: [petsc-users] Question about residue norm in PETSc > 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/> > -- 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/>