[petsc-users] Question about residue norm in PETSc

Matthew Knepley knepley at gmail.com
Sun Jul 2 07:10:31 CDT 2023


On Sun, Jul 2, 2023 at 8:05 AM Matthew Knepley <knepley at gmail.com> wrote:

> On Sun, Jul 2, 2023 at 7:53 AM 王赫萌 <wanghemeng at 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.
>

I built your code, but you did not send the matrix and rhs.

I suggest using

PetscCall(VecAXPY(u, -1.0, b));

instead so that you do not change b, and keep the residual in u.

  Thanks,

     Matt

  Thanks,

     Matt


>   Thanks,
>
>      Matt
>
>
>> Best regards!
>> Hemeng Wang
>>
>>
>> ---- Replied Message ----
>> From Matthew Knepley<knepley at gmail.com> <knepley at gmail.com>
>> Date 7/2/2023 18:51
>> To 王赫萌<wanghemeng at 163.com> <wanghemeng at 163.com>
>> Cc petsc-users at mcs.anl.gov<petsc-users at mcs.anl.gov>
>> <petsc-users at mcs.anl.gov>
>> Subject Re: [petsc-users] Question about residue norm in PETSc
>> On Sun, Jul 2, 2023 at 2:24 AM 王赫萌 <wanghemeng at 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/>
>


-- 
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/>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20230702/12a01720/attachment.html>


More information about the petsc-users mailing list