Excellant, thanks for letting us know.

> On May 25, 2021, at 5:30 PM, hg <[email protected]> wrote:
> 
> 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 <[email protected] 
> <mailto:[email protected]>> 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 
> <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 <[email protected] 
>> <mailto:[email protected]>> 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
>> 
> 

Reply via email to