[petsc-users] SNES Matrix-Free Parameters

Alfredo J Duarte Gomez aduarteg at utexas.edu
Thu Apr 7 10:21:28 CDT 2022


Hello Barry,

Thank you for the clarification, the petsc user manual does list
snes_mf_type <default or wp> as the options so I was confused.

I believe the function accuracy is fine, but I would like to experiment
with other "h" routines to see if I can get some improvement for small time
steps. However, i am still having  trouble switching that routine at least
from what I see from the message I described in my previous email. I tried
out -snes_mf_type dp, but it did not change the output.

I am currently only calling SNESSetFromOptions() on my snes object, which I
assumed would handle the -snes_mf_type option. Do I need to get the
Jacobian from the snes and then call a MatSetFromOptions() on my
matrix-free jacobian to use this option?

Thank you,

-Alfredo

On Wed, Apr 6, 2022 at 6:35 PM Barry Smith <bsmith at petsc.dev> wrote:

>
> I notice that this part of the message does not change even when I specify
> "-snes_mf_type default" (which is the alternative to wp), so I am a bit
> confused on how I interact to the -snes_mf_type or if I am interpreting the
> message wrong. Could you clarify this?
>
>   Hmm, the two possibilities are -snes_mf_type wp or ds. I would expect an
> error message if you passed default.
>
>  Regarding selecting the
>
>    err=1.49012e-08 (relative error in function evaluation)
>
> this number should be the square root of the expected error in the
> function evaluation. So for double-precision numbers and a function
> evaluation with no noise (so computed accurately to double precision) the
> tolerance is the square root of the machine epsilon.
>
> You should only change this number (make it bigger) if you know that your
> function evaluations are not fully accurate. For example, if you know your
> function evaluation is only accurate to 10 decimal digits you could use an
> err of 1e-5.
>
> But if your function evaluations are accurate to double precision then
> changing this number is unlikely to help anything.
>
>   Barry
>
>
>
>
> On Apr 6, 2022, at 3:13 PM, Alfredo J Duarte Gomez <aduarteg at utexas.edu>
> wrote:
>
> Good afternoon petsc team,
>
> I have a few questions regarding the matrixfree in the snes context.
>
> I am currently using the matrix-free method with my own preconditioner to
> solve a TS problem. I currently trigger this with the -snes_mf_operator
> option.
>
> So far the default values have been working great, but I ran into trouble
> during a convergence study when I made the time step very small, which I
> suspect is probably happening because it's dropping below the matrix-vector
> product tolerance.
>
> I wanted to explore the parameters of the matrix-vector product but using
> the -snes_view option I notice that the following full message comes out:
>
>
> -----------------------------------------------------------------------------------
> SNES Object: 96 MPI processes
>   type: newtonls
>   maximum iterations=20, maximum function evaluations=10000
>   tolerances: relative=1e-06, absolute=1e-06, solution=1e-15
>   total number of linear solver iterations=14
>   total number of function evaluations=35
>   norm schedule ALWAYS
>   Jacobian is never rebuilt
>   Jacobian is applied matrix-free with differencing
>   Jacobian is applied matrix-free with differencing, no explict Jacobian
>   SNESLineSearch Object: 96 MPI processes
>     type: l2
>     maxstep=1.000000e+08, minlambda=1.000000e-12
>     tolerances: relative=1.000000e-08, absolute=1.000000e-15,
> lambda=1.000000e-08
>     maximum iterations=1
>   KSP Object: 96 MPI processes
>     type: gmres
>       restart=100, using Classical (unmodified) Gram-Schmidt
> Orthogonalization with no iterative refinement
>       happy breakdown tolerance 1e-30
>     maximum iterations=400, initial guess is zero
>     tolerances:  relative=0.01, absolute=1e-50, divergence=10000.
>     left preconditioning
>     using PRECONDITIONED norm type for convergence test
>   PC Object: 96 MPI processes
>     type: shell
>       MyPreconditioner
>     linear system matrix followed by preconditioner matrix:
>     Mat Object: 96 MPI processes
>       type: mffd
>       rows=8400000, cols=8400000
>         Matrix-free approximation:
>           err=1.49012e-08 (relative error in function evaluation)
>           Using wp compute h routine
>               Does not compute normU
>     Mat Object: 96 MPI processes
>       type: mpiaij
>       rows=8400000, cols=8400000, bs=4
>       total: nonzeros=2041029504, allocated nonzeros=2041029504
>       total number of mallocs used during MatSetValues calls=0
>
> --------------------------------------------------------------------------------
>
> I have been focusing specifically on the part:
>
>         Matrix-free approximation:
>           err=1.49012e-08 (relative error in function evaluation)
>           Using wp compute h routine
>               Does not compute normU
>
> I notice that this part of the message does not change even when I specify
> "-snes_mf_type default" (which is the alternative to wp), so I am a bit
> confused on how I interact to the -snes_mf_type or if I am interpreting the
> message wrong. Could you clarify this?
>
> Also let me know if you have any general suggestions on tightening the
> tolerance of the matricxvector products.
>
> Thank you,
>
> -Alfredo
>
>
>
> --
> Alfredo Duarte
> Graduate Research Assistant
> The University of Texas at Austin
>
>
>

-- 
Alfredo Duarte
Graduate Research Assistant
The University of Texas at Austin
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20220407/71c65ac4/attachment-0001.html>


More information about the petsc-users mailing list