On Apr 30, 2020, at 6:22 AM, Yingjie Wu 
<[email protected]<mailto:[email protected]>> wrote:

I'm sorry for dropping the mailing list in previous mail.
I went over the code and made sure I didn't set the maximum number or final 
time to zero for TS. And I found a very similar example in 
petsc/src/ts/tutorials/ex8.c.
I made the following changes:

  1.  
TSSetMaxStepRejections<https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/TS/TSSetMaxStepRejections.html#TSSetMaxStepRejections>(ts,10);
 -> 
TSSetMaxStepRejections<https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/TS/TSSetMaxStepRejections.html#TSSetMaxStepRejections>(ts,0);
  2.  
TSSetMaxSNESFailures<https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/TS/TSSetMaxSNESFailures.html#TSSetMaxSNESFailures>(ts,-1);
 -> 
TSSetMaxSNESFailures<https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/TS/TSSetMaxSNESFailures.html#TSSetMaxSNESFailures>(ts,0);

Now it is clear why your code terminates early.
TSSetMaxStepRejections<https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/TS/TSSetMaxStepRejections.html#TSSetMaxStepRejections>
 (-td_max_reject) specifies the maximum number of failed time steps that TS 
adapter allows.
TSSetMaxSNESFailures<https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/TS/TSSetMaxSNESFailures.html#TSSetMaxSNESFailures>
 (-ts_max_snes_failures) specifies the maximum number of failed nonlinear 
solves that TS adapter allows.

The TS adapter can reject a time step and restart it with a decreased step size 
if the error criterion is not met. Diverged nonlinear solve is one of the 
reasons that cause a time step rejected.

To avoid termination caused by these constraints, you can use
-ts_max_snes_failures -1
-ts_max_reject -1
to set both of them unlimited.

When the nonlinear solve diverges (e.g. the number of SNES iterations reaches 
the limit set by -snes_max_it), TS adapter will decrease the step size by a 
factor (can be changed with -ts_adapt_scale_solve_failed) and repeat the time 
step. Sometimes you may end up with excessively small steps if the repeated 
nonlinear solves keep struggling. In that case, I would turn off the adapter 
with -ts_adapt_type none and stick with the fixed time stepping or control the 
step size myself.

Hong (Mr.)


These changes adjust the Rejections and SNESFailures to the default state.
Then test the following commands: mpiexec -n 1 ./ex8 -ts_atol 1e-2 -ts_rtol 
1e-2 -ts_max_time 15 -ts_type arkimex -ts_arkimex_type 2e -problem_type orego 
-ts_arkimex_initial_guess_extrapolate 0 -ts_adapt_time_step_increase_delay 4 
-ts_monitor -snes_monitor -snes_converged_reason
The output on the screen is:

(......)


7 TS dt 6.86235 time 3.47215
    0 SNES Function norm 2.000433909025e-01
    1 SNES Function norm 1.991123862317e-01
    2 SNES Function norm 1.975627926780e-01
    3 SNES Function norm 1.946057832068e-01
    4 SNES Function norm 1.900556025613e-01
    5 SNES Function norm 1.840284735193e-01
    6 SNES Function norm 1.767727556549e-01
    7 SNES Function norm 1.685779659858e-01
    8 SNES Function norm 1.597281513554e-01
    9 SNES Function norm 1.504796576996e-01
   10 SNES Function norm 1.410521859210e-01
   11 SNES Function norm 1.316269768177e-01
   12 SNES Function norm 1.223486899848e-01
   13 SNES Function norm 1.127512649756e-01
   14 SNES Function norm 1.020567711262e-01
   15 SNES Function norm 8.979527463515e-02
   16 SNES Function norm 7.508859688939e-02
   17 SNES Function norm 7.355450203066e-02
   18 SNES Function norm 2.927834451754e-06
   19 SNES Function norm 4.107891676938e-15
  Nonlinear solve converged due to CONVERGED_FNORM_RELATIVE iterations 19
    0 SNES Function norm 1.349799651143e-01
    1 SNES Function norm 1.333235099246e-01
    2 SNES Function norm 1.314928290684e-01
    3 SNES Function norm 1.295004620848e-01
    4 SNES Function norm 1.273561109747e-01
    5 SNES Function norm 1.250670006052e-01
    6 SNES Function norm 1.226381484156e-01
    7 SNES Function norm 1.200604281861e-01
    8 SNES Function norm 1.173313259697e-01
    9 SNES Function norm 1.144768440013e-01
   10 SNES Function norm 1.141593852677e-01
   11 SNES Function norm 1.121207287132e-01
   12 SNES Function norm 1.087640960519e-01
   13 SNES Function norm 1.044397486143e-01
   14 SNES Function norm 9.944173247962e-02
   15 SNES Function norm 9.401107464556e-02
   16 SNES Function norm 8.834148211449e-02
   17 SNES Function norm 8.258574767211e-02
   18 SNES Function norm 7.686203062639e-02
   19 SNES Function norm 7.076716424793e-02
   20 SNES Function norm 6.389435437215e-02
   21 SNES Function norm 5.587963465672e-02
   22 SNES Function norm 4.597296586383e-02
   23 SNES Function norm 3.649153890859e-02
   24 SNES Function norm 1.112024137036e-06
   25 SNES Function norm 1.368410750160e-14
  Nonlinear solve converged due to CONVERGED_FNORM_RELATIVE iterations 25
8 TS dt 7.74608 time 10.3345
    0 SNES Function norm 2.851716167826e-01
    1 SNES Function norm 2.827877334190e-01
    2 SNES Function norm 2.803985313138e-01
    3 SNES Function norm 2.780035928632e-01
    4 SNES Function norm 2.756024874780e-01
    5 SNES Function norm 2.731947705882e-01
    6 SNES Function norm 2.707799825757e-01
    7 SNES Function norm 2.683576476261e-01
    8 SNES Function norm 2.659272724924e-01
    9 SNES Function norm 2.634883451605e-01
   10 SNES Function norm 2.610403334061e-01
   11 SNES Function norm 2.585826832306e-01
   12 SNES Function norm 2.561148171641e-01
   13 SNES Function norm 2.536361324179e-01
   14 SNES Function norm 2.511459988719e-01
   15 SNES Function norm 2.486437568755e-01
   16 SNES Function norm 2.461287148411e-01
   17 SNES Function norm 2.461031613348e-01
   18 SNES Function norm 2.455705375830e-01
   19 SNES Function norm 2.445878823765e-01
   20 SNES Function norm 2.432027776816e-01
   21 SNES Function norm 2.414549711706e-01
   22 SNES Function norm 2.393776915919e-01
   23 SNES Function norm 2.369987079777e-01
   24 SNES Function norm 2.343411787922e-01
   25 SNES Function norm 2.314243298882e-01
   26 SNES Function norm 2.282639927909e-01
   27 SNES Function norm 2.248730282013e-01
   28 SNES Function norm 2.212616539034e-01
   29 SNES Function norm 2.174376914167e-01
   30 SNES Function norm 2.134067415679e-01
   31 SNES Function norm 2.091722954520e-01
   32 SNES Function norm 2.047263028819e-01
   33 SNES Function norm 2.000468148325e-01
   34 SNES Function norm 1.951751560520e-01
   35 SNES Function norm 1.946187817680e-01
   36 SNES Function norm 1.912149142781e-01
   37 SNES Function norm 1.856377137631e-01
   38 SNES Function norm 1.784574187852e-01
   39 SNES Function norm 1.701485679136e-01
   40 SNES Function norm 1.611004146461e-01
   41 SNES Function norm 1.516277627394e-01
   42 SNES Function norm 1.419813980321e-01
   43 SNES Function norm 1.323577340278e-01
   44 SNES Function norm 1.224961331340e-01
   45 SNES Function norm 1.115622228182e-01
   46 SNES Function norm 9.910072225366e-02
   47 SNES Function norm 8.425984823824e-02
   48 SNES Function norm 6.475245098809e-02
   49 SNES Function norm 2.817391391875e-02
   50 SNES Function norm 2.187931938195e-06
  Nonlinear solve did not converge due to DIVERGED_MAX_IT iterations 50
[0]PETSC ERROR: --------------------- Error Message 
--------------------------------------------------------------
[0]PETSC ERROR:
[0]PETSC ERROR: TSStep has failed due to DIVERGED_STEP_REJECTED
[0]PETSC ERROR: See https://www.mcs.anl.gov/petsc/documentation/faq.html for 
trouble shooting.
[0]PETSC ERROR: Petsc Release Version 3.12.4, unknown
[0]PETSC ERROR: ./ex8 on a arch-linux2-c-debug named ubuntu103 by wuyj Thu Apr 
30 10:40:07 2020
[0]PETSC ERROR: Configure options --with-cc=gcc --with-cxx=g++ 
--with-fc=gfortran --download-mpich --download-fblaslapack
[0]PETSC ERROR: #1 TSStep() line 3596 in /home/wuyj/petsc/src/ts/interface/ts.c
[0]PETSC ERROR: #2 TSSolve() line 3768 in /home/wuyj/petsc/src/ts/interface/ts.c
[0]PETSC ERROR: #3 main() line 416 in ex8.c
[0]PETSC ERROR: PETSc Option Table entries:
[0]PETSC ERROR: -problem_type orego
[0]PETSC ERROR: -snes_converged_reason
[0]PETSC ERROR: -snes_monitor
[0]PETSC ERROR: -ts_adapt_time_step_increase_delay 4
[0]PETSC ERROR: -ts_arkimex_initial_guess_extrapolate 0
[0]PETSC ERROR: -ts_arkimex_type 2e
[0]PETSC ERROR: -ts_atol 1e-2
[0]PETSC ERROR: -ts_max_time 15
[0]PETSC ERROR: -ts_monitor
[0]PETSC ERROR: -ts_rtol 1e-2
[0]PETSC ERROR: -ts_type arkimex
[0]PETSC ERROR: ----------------End of Error Message -------send entire error 
message to [email protected]<mailto:[email protected]>----------
application called MPI_Abort(MPI_COMM_WORLD, 91) - process 0

At the eighth time step, the maximum iterations number of SNES resulting in the 
failure of the time step calculation, the program reported errors.
Then I tested the following commands: mpiexec -n 1 ./ex8 -ts_atol 1e-2 -ts_rtol 
1e-2 -ts_max_time 15 -ts_type arkimex -ts_arkimex_type 2e -problem_type orego 
-ts_arkimex_initial_guess_extrapolate 0 -ts_adapt_time_step_increase_delay 4 
-snes_monitor -snes_converged_reason -ts_monitor -ts_error_if_step_fails 0
The output in screen:
(......)

7 TS dt 6.86235 time 3.47215
    0 SNES Function norm 2.000433909025e-01
    1 SNES Function norm 1.991123862317e-01
    2 SNES Function norm 1.975627926780e-01
    3 SNES Function norm 1.946057832068e-01
    4 SNES Function norm 1.900556025613e-01
    5 SNES Function norm 1.840284735193e-01
    6 SNES Function norm 1.767727556549e-01
    7 SNES Function norm 1.685779659858e-01
    8 SNES Function norm 1.597281513554e-01
    9 SNES Function norm 1.504796576996e-01
   10 SNES Function norm 1.410521859210e-01
   11 SNES Function norm 1.316269768177e-01
   12 SNES Function norm 1.223486899848e-01
   13 SNES Function norm 1.127512649756e-01
   14 SNES Function norm 1.020567711262e-01
   15 SNES Function norm 8.979527463515e-02
   16 SNES Function norm 7.508859688939e-02
   17 SNES Function norm 7.355450203066e-02
   18 SNES Function norm 2.927834451754e-06
   19 SNES Function norm 4.107891676938e-15
  Nonlinear solve converged due to CONVERGED_FNORM_RELATIVE iterations 19
    0 SNES Function norm 1.349799651143e-01
    1 SNES Function norm 1.333235099246e-01
    2 SNES Function norm 1.314928290684e-01
    3 SNES Function norm 1.295004620848e-01
    4 SNES Function norm 1.273561109747e-01
    5 SNES Function norm 1.250670006052e-01
    6 SNES Function norm 1.226381484156e-01
    7 SNES Function norm 1.200604281861e-01
    8 SNES Function norm 1.173313259697e-01
    9 SNES Function norm 1.144768440013e-01
   10 SNES Function norm 1.141593852677e-01
   11 SNES Function norm 1.121207287132e-01
   12 SNES Function norm 1.087640960519e-01
   13 SNES Function norm 1.044397486143e-01
   14 SNES Function norm 9.944173247962e-02
   15 SNES Function norm 9.401107464556e-02
   16 SNES Function norm 8.834148211449e-02
   17 SNES Function norm 8.258574767211e-02
   18 SNES Function norm 7.686203062639e-02
   19 SNES Function norm 7.076716424793e-02
   20 SNES Function norm 6.389435437215e-02
   21 SNES Function norm 5.587963465672e-02
   22 SNES Function norm 4.597296586383e-02
   23 SNES Function norm 3.649153890859e-02
   24 SNES Function norm 1.112024137036e-06
   25 SNES Function norm 1.368410750160e-14
  Nonlinear solve converged due to CONVERGED_FNORM_RELATIVE iterations 25
8 TS dt 7.74608 time 10.3345
    0 SNES Function norm 2.851716167826e-01
    1 SNES Function norm 2.827877334190e-01
    2 SNES Function norm 2.803985313138e-01
    3 SNES Function norm 2.780035928632e-01
    4 SNES Function norm 2.756024874780e-01
    5 SNES Function norm 2.731947705882e-01
    6 SNES Function norm 2.707799825757e-01
    7 SNES Function norm 2.683576476261e-01
    8 SNES Function norm 2.659272724924e-01
    9 SNES Function norm 2.634883451605e-01
   10 SNES Function norm 2.610403334061e-01
   11 SNES Function norm 2.585826832306e-01
   12 SNES Function norm 2.561148171641e-01
   13 SNES Function norm 2.536361324179e-01
   14 SNES Function norm 2.511459988719e-01
   15 SNES Function norm 2.486437568755e-01
   16 SNES Function norm 2.461287148411e-01
   17 SNES Function norm 2.461031613348e-01
   18 SNES Function norm 2.455705375830e-01
   19 SNES Function norm 2.445878823765e-01
   20 SNES Function norm 2.432027776816e-01
   21 SNES Function norm 2.414549711706e-01
   22 SNES Function norm 2.393776915919e-01
   23 SNES Function norm 2.369987079777e-01
   24 SNES Function norm 2.343411787922e-01
   25 SNES Function norm 2.314243298882e-01
   26 SNES Function norm 2.282639927909e-01
   27 SNES Function norm 2.248730282013e-01
   28 SNES Function norm 2.212616539034e-01
   29 SNES Function norm 2.174376914167e-01
   30 SNES Function norm 2.134067415679e-01
   31 SNES Function norm 2.091722954520e-01
   32 SNES Function norm 2.047263028819e-01
   33 SNES Function norm 2.000468148325e-01
   34 SNES Function norm 1.951751560520e-01
   35 SNES Function norm 1.946187817680e-01
   36 SNES Function norm 1.912149142781e-01
   37 SNES Function norm 1.856377137631e-01
   38 SNES Function norm 1.784574187852e-01
   39 SNES Function norm 1.701485679136e-01
   40 SNES Function norm 1.611004146461e-01
   41 SNES Function norm 1.516277627394e-01
   42 SNES Function norm 1.419813980321e-01
   43 SNES Function norm 1.323577340278e-01
   44 SNES Function norm 1.224961331340e-01
   45 SNES Function norm 1.115622228182e-01
   46 SNES Function norm 9.910072225366e-02
   47 SNES Function norm 8.425984823824e-02
   48 SNES Function norm 6.475245098809e-02
   49 SNES Function norm 2.817391391875e-02
   50 SNES Function norm 2.187931938195e-06
  Nonlinear solve did not converge due to DIVERGED_MAX_IT iterations 50
9 TS dt 1.93652 time 10.3345
steps 9 (1 rejected, 1 SNES fails), ftime 10.3345, nonlinits 126, linits 126


Although the program did not report errors, but end the operation after the 
eighth time step, and output results.
Note that the program did not reach the set termination time (-ts_max_time 15).
This indicates that the command -ts_error_if_step_fails 0, while avoiding 
program errors, ends TS solving after a failed SNES and does not proceed to the 
next step.
And I'd like to continue the next step with the result after a failed SNES time 
step (although this result is not converged).
In addition, I would like to ask the function of these two functions: 
TSSetMaxStepRejections<https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/TS/TSSetMaxStepRejections.html#TSSetMaxStepRejections>
 and 
TSSetMaxSNESFailures<https://www.mcs.anl.gov/petsc/petsc-current/docs/manualpages/TS/TSSetMaxSNESFailures.html#TSSetMaxSNESFailures>().
I looked it up in manualpages/singleindex.html, but there were very few 
explanations, and I still didn't quite understand the meaning of Rejection and 
SNES Failures variables.
Thank you very much for your reply and I hope you can help me to answer these 
questions.

Thanks,
Yingjie



Zhang, Hong <[email protected]<mailto:[email protected]>> 于2020年4月30日周四 
下午1:22写道:
Please do not drop the mailing list when replying.

It looks like the max steps or the final time has been set to zero for TS. You 
might want to check your code to see if the TS settings are correct or if they 
are overwritten in some callback functions by mistake.

Hong (Mr.)

> On Apr 29, 2020, at 10:16 PM, Yingjie Wu 
> <[email protected]<mailto:[email protected]>> wrote:
>
> Command: mpiexec -n 1 ./SGts -snes_fd -pc_type lu -ts_error_if_step_fails 0 
> -ts_monitor -snes_monitor \
>                          -ksp_monitor \
>                          -ksp_converged_reason \
>                          -snes_converged_reason \
>                          -snes_rtol 1.e-2 \
>                          -ksp_rtol 1.e-5 \
>                          -snes_max_it 2 \
>                          -snes_view
> Output: Timestep 0:
> CurrentTime 0.:
> 0 TS dt 1. time 0.
> iter = 0, SNES Function norm 245.204
>      0 SNES Function norm 2.452043863308e+02
>       0 KSP Residual norm 1.641317090793e+04
>       1 KSP Residual norm 2.717662845608e-10
>     Linear solve converged due to CONVERGED_RTOL iterations 1
> iter = 1, SNES Function norm 170.58
>      1 SNES Function norm 1.705802879797e+02
>       0 KSP Residual norm 1.146216600447e+04
>       1 KSP Residual norm 3.272076151518e-11
>     Linear solve converged due to CONVERGED_RTOL iterations 1
> iter = 2, SNES Function norm 140.625
>      2 SNES Function norm 1.406249065994e+02
>   Nonlinear solve did not converge due to DIVERGED_MAX_IT iterations 2
> SNES Object: 1 MPI processes
>   type: newtonls   maximum iterations=2, maximum function 
> evaluations=-1530494976
>   tolerances: relative=0.01, absolute=1e-50, solution=1e-08
>   total number of linear solver iterations=2
>   total number of function evaluations=1063
>   norm schedule ALWAYS
>   Jacobian is built using finite differences one column at a time
>   SNESLineSearch Object: 1 MPI processes
>     type: bt
>       interpolation: cubic
>       alpha=1.000000e-04
>     maxstep=1.000000e+08, minlambda=1.000000e-12
>     tolerances: relative=1.000000e-08, absolute=1.000000e-15, 
> lambda=1.000000e-08
>     maximum iterations=40
>   KSP Object: 1 MPI processes
>     type: gmres
>       restart=30, using Classical (unmodified) Gram-Schmidt Orthogonalization 
> with no iterative refinement
>       happy breakdown tolerance 1e-30
>     maximum iterations=10000, initial guess is zero
>     tolerances:  relative=1e-05, absolute=1e-50, divergence=10000.
>     left preconditioning
>     using PRECONDITIONED norm type for convergence test
>   PC Object: 1 MPI processes
>     type: lu
>       out-of-place factorization
>       tolerance for zero pivot 2.22045e-14
>       matrix ordering: nd
>       factor fill ratio given 5., needed 2.84376
>         Factored matrix follows:
>           Mat Object: 1 MPI processes
>             type: seqaij             rows=528, cols=528
>             package used to perform factorization: petsc
>             total: nonzeros=7863, allocated nonzeros=7863
>             total number of mallocs used during MatSetValues calls=0
>               not using I-node routines
>     linear system matrix = precond matrix:
>     Mat Object: 1 MPI processes
>       type: seqaij       rows=528, cols=528
>       total: nonzeros=2765, allocated nonzeros=5280
>       total number of mallocs used during MatSetValues calls=0
>         not using I-node routines
> Timestep 1:
> CurrentTime 0.:
> 1 TS dt 1. time 0.
>
> Number of timesteps = 1 final time 0.00e+00
>
>  After the first time step, the program directly ends the TS solution 
> process. I've set up 50 time steps, so the program is not running properly.
>  Although the program accepted that first time step SNES did not achieve 
> convergence, and there is no error information, but did not continue to go to 
> the next time step calculation, chose to end the program. I hope that when 
> the SNES not converge at a certain time step and reaches the set maximum 
> number SNES iteration steps, it can go to the next time step calculation.
> I am looking forward to your suggestion.
>
> Thanks,
> Yingjie
>
> Zhang, Hong <[email protected]<mailto:[email protected]>> 于2020年4月29日周三 
> 下午11:26写道:
> Please send the list of your command line options and the screen output with 
> -ts_monitor.
>
> Hong (Mr.)
>
>> On Apr 28, 2020, at 11:00 PM, Yingjie Wu 
>> <[email protected]<mailto:[email protected]>> wrote:
>>
>> Thank you very much for your reply.
>> I tried both switches, but unfortunately they didn't seem to meet my needs.
>>  -ts_adapt_always_accept
>>  The switch doesn't seem to work, reporting errors
>>  when the maximum number of steps is reached without convergence, then the 
>> program exits.
>>
>>  -ts_error_if_step_fails  0        This switch accepts the non-convergence 
>> time step and outputs the result, but does not continue into the next time 
>> step calculation (
>>
>>  The time step hasn't reached the maximum time step I set
>> ).
>>
>> And I wonder if the variable behind this switch is optional? What does it 
>> mean?
>> I hope to achieve in the case of non-convergence Newton step( for example, 
>> the maximum number of Newton iteration steps reached -snes_max_it 50), can 
>> go in the next time step calculation.
>>
>> Thanks,
>> Yingjie
>>
>> Zhang, Hong <[email protected]<mailto:[email protected]>> 于2020年4月28日周二 
>> 下午10:51写道:
>> -ts_error_if_step_fails 0
>>
>> You might want to find out why the nonlinear solver does not converge first. 
>> If you have a hand-written Jacobian, you can validate it with 
>> -snes_test_jacobian 1 (for a small test case).
>>
>> Hong (Mr.)
>>
>> > On Apr 28, 2020, at 8:21 AM, Yingjie Wu 
>> > <[email protected]<mailto:[email protected]>> wrote:
>> >
>> > Dear PETSc developers
>> > Hi,
>> >
>> > I have recently used TS to solve nonlinear equations with time terms. 
>> > since the convergence of my model is not very good, i would like to set to 
>> > iterative fixed nonlinear steps per time step. If the problem does not 
>> > meet the SNES convergence criteria after fixed number of nonlinear steps , 
>> > then go to the next time step calculation. I tried -snes_max_it , but 
>> > didn't achieve the effect I wanted, and the program stopped after 
>> > iterating the fixed number of steps. How should I set up in the program?
>> >
>> > Thanks,
>> > Yingjie
>>
>


Reply via email to