[petsc-users] divergence of quasi-Newton scheme (SNES)
hg
hgbk2008 at gmail.com
Tue May 25 17:30:27 CDT 2021
Thanks Barry, with -snes_qn_m 0 it gives exact convergence as -snes_type
newtonls -snes_linesearch_type basic
Giang
On Tue, May 25, 2021 at 10:51 PM Barry Smith <bsmith at petsc.dev> wrote:
>
> Yes, with your options I would expect the first SNES iteration of QN to
> produce the same result as the first iteration of SNES Newton ls.
>
> I have fixed an error that crept (well actually I put it there) in where
> KSPSetFromOptions() was not being called with the QN and Jacobian option,
> hence only the default PC (ilu) was being used so if you changed the PC it
> only affected Newton not QN. I also made it possible to run with a history
> of length 0 so that with the Jacobian option it should exactly match Newton
> for all iterations.
>
> You can access my fixes with
>
> get fetch
> git checkout barry/2021-05-25/fix-qn-jacobian-setfromoptions/release
>
> The merge request with the fixes for release is here
> https://gitlab.com/petsc/petsc/-/merge_requests/4018
>
> I checked it with the runs below. Using first -pc_type lu then the
> default PC.
>
> ~/Src/petsc/src/snes/tutorials*
> (barry/2021-05-25/fix-qn-jacobian-setfromoptions/release *=)*
> arch-fix-qn-jacobian-setfromoptions
> $ ./ex19 -pc_type lu -snes_monitor -snes_type qn -snes_qn_type lbfgs
> -snes_qn_m 0 -snes_qn_restart_type periodic -snes_qn_scale_type jacobian
> -snes_linesearch_type basic
> lid velocity = 0.0625, prandtl # = 1., grashof # = 1.
> 0 SNES Function norm 2.391552133017e-01
> 1 SNES Function norm 6.819684624592e-05
> 2 SNES Function norm 4.203401869625e-12
> Number of SNES iterations = 2
> ~/Src/petsc/src/snes/tutorials*
> (barry/2021-05-25/fix-qn-jacobian-setfromoptions/release *=)*
> arch-fix-qn-jacobian-setfromoptions
> $ ./ex19 -pc_type lu -snes_monitor -snes_linesearch_type basic
> lid velocity = 0.0625, prandtl # = 1., grashof # = 1.
> 0 SNES Function norm 2.391552133017e-01
> 1 SNES Function norm 6.819684624592e-05
> 2 SNES Function norm 4.203401869625e-12
> Number of SNES iterations = 2
> ~/Src/petsc/src/snes/tutorials*
> (barry/2021-05-25/fix-qn-jacobian-setfromoptions/release *=)*
> arch-fix-qn-jacobian-setfromoptions
> $ ./ex19 -snes_monitor -snes_linesearch_type basic
> lid velocity = 0.0625, prandtl # = 1., grashof # = 1.
> 0 SNES Function norm 2.391552133017e-01
> 1 SNES Function norm 6.839858507066e-05
> 2 SNES Function norm 8.558777232425e-11
> Number of SNES iterations = 2
> ~/Src/petsc/src/snes/tutorials*
> (barry/2021-05-25/fix-qn-jacobian-setfromoptions/release *=)*
> arch-fix-qn-jacobian-setfromoptions
> $ ./ex19 -snes_monitor -snes_type qn -snes_qn_type lbfgs -snes_qn_m 0
> -snes_qn_restart_type periodic -snes_qn_scale_type jacobian
> -snes_linesearch_type basic
> lid velocity = 0.0625, prandtl # = 1., grashof # = 1.
> 0 SNES Function norm 2.391552133017e-01
> 1 SNES Function norm 6.839858507066e-05
> 2 SNES Function norm 8.558777232425e-11
> Number of SNES iterations = 2
> ~/Src/petsc/src/snes/tutorials*
> (barry/2021-05-25/fix-qn-jacobian-setfromoptions/release *=)*
> arch-fix-qn-jacobian-setfromoptions
> $ ./ex19 -snes_monitor -snes_type qn -snes_qn_type lbfgs -snes_qn_m 1
> -snes_qn_restart_type periodic -snes_qn_scale_type jacobian
> -snes_linesearch_type basic
> lid velocity = 0.0625, prandtl # = 1., grashof # = 1.
> 0 SNES Function norm 2.391552133017e-01
> 1 SNES Function norm 6.839858507066e-05
> 2 SNES Function norm 1.977614824765e-05
> 3 SNES Function norm 1.286952209377e-10
> Number of SNES iterations = 3
>
> If you still have trouble with the branch you can run with -ksp_monitor
> -snes_linesearch_monitor -info -snes_view to see what may be different with
> your runs with Newton and with QN.
>
> Barry
>
>
>
> On May 25, 2021, at 12:15 PM, hg <hgbk2008 at gmail.com> wrote:
>
> Hello
>
> I would expect the setting below would give the same behaviour like
> -snes_type newtonls -snes_linesearch_type basic:
>
> -snes_type qn
> -snes_qn_type lbfgs
> -snes_qn_m 1
> -snes_qn_restart_type periodic
> -snes_qn_scale_type jacobian
> -snes_linesearch_type basic
>
> But it's not, below is the convergence log:
> entering BuildRHS
> 0 SNES Function norm 7.450427214612e+03
> entering BuildLHS
> entering BuildRHS
> 1 SNES Function norm 7.902262148182e+03
> entering BuildRHS
> 2 SNES Function norm 8.426417730274e+03
> Periodic restart! i_r = 1
> entering BuildLHS
> entering BuildRHS
> 3 SNES Function norm 5.571513092130e+04
> entering BuildRHS
> 4 SNES Function norm 4.019723509872e+05
> Periodic restart! i_r = 1
> entering BuildLHS
> entering BuildRHS
> 5 SNES Function norm 9.259722791615e+05
> entering BuildRHS
> 6 SNES Function norm 3.985884724278e+08
> Nonlinear solve did not converge due to DIVERGED_DTOL iterations 6
>
> For -snes_type newtonls -snes_linesearch_type basic:
>
> entering BuildRHS
> 0 SNES Function norm 7.450427214612e+03
> entering BuildLHS
> entering BuildRHS
> 1 SNES Function norm 1.937109245338e+01
> entering BuildLHS
> entering BuildRHS
> 2 SNES Function norm 8.126736406257e-01
> entering BuildLHS
> entering BuildRHS
> 3 SNES Function norm 1.143237968970e-03
> entering BuildLHS
> entering BuildRHS
> 4 SNES Function norm 2.706184329411e-09
> Nonlinear solve converged due to CONVERGED_FNORM_RELATIVE iterations 4
>
> Would it be the parameters not the same? My idea is first starting with a
> good configuration of lbfgs then increase the restart (m) to see how the
> convergence going (and save time).
>
> Thanks
> Giang
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20210526/03ec3aab/attachment.html>
More information about the petsc-users
mailing list