[petsc-users] How do I know it is steady state?

Zou (Non-US), Ling ling.zou at inl.gov
Tue Nov 3 09:12:50 CST 2015


Matt, thanks for the reply.
The simulation is a transient simulation, which eventually converges to a
steady-state solution, given enough simulation time.
My code runs fine and I could tell the simulation reaches steady state by
looking at the residual monitored by SNES monitor function.

See an example screen output

Solving time step 90, using BDF1, dt = 0.1.

Current time (the starting time of this time step) = 8.85.

        NL step =  0, SNES Function norm =  1.47538E-02

        NL step =  1, SNES Function norm =  8.06971E-04

        total_FunctionCall_number: 0

converged, time step increased = 0.1

Solving time step 91, using BDF1, dt = 0.1.

Current time (the starting time of this time step) = 8.95.

        NL step =  0, SNES Function norm =  1.10861E-02

        NL step =  1, SNES Function norm =  6.26584E-04

        total_FunctionCall_number: 0

converged, time step increased = 0.1

Solving time step 92, using BDF1, dt = 0.1.

Current time (the starting time of this time step) = 9.05.

        NL step =  0, SNES Function norm =  7.21253E-03

        NL step =  1, SNES Function norm =  9.93402E-04

        total_FunctionCall_number: 0

converged, time step increased = 0.1

Solving time step 93, using BDF1, dt = 0.1.

Current time (the starting time of this time step) = 9.15.

        NL step =  0, SNES Function norm =  5.40260E-03

        NL step =  1, SNES Function norm =  6.21162E-04

        total_FunctionCall_number: 0

converged, time step increased = 0.1

Solving time step 94, using BDF1, dt = 0.1.

Current time (the starting time of this time step) = 9.25.

        NL step =  0, SNES Function norm =  3.40214E-03

        NL step =  1, SNES Function norm =  6.16805E-04

        total_FunctionCall_number: 0

converged, time step increased = 0.1

Solving time step 95, using BDF1, dt = 0.1.

Current time (the starting time of this time step) = 9.35.

        NL step =  0, SNES Function norm =  2.29656E-03

        NL step =  1, SNES Function norm =  6.19337E-04

        total_FunctionCall_number: 0

converged, time step increased = 0.1

Solving time step 96, using BDF1, dt = 0.1.

Current time (the starting time of this time step) = 9.45.

        NL step =  0, SNES Function norm =  1.53218E-03

        NL step =  1, SNES Function norm =  5.94845E-04

        total_FunctionCall_number: 0

converged, time step increased = 0.1

Solving time step 97, using BDF1, dt = 0.1.

Current time (the starting time of this time step) = 9.55.

        NL step =  0, SNES Function norm =  1.32136E-03

        NL step =  1, SNES Function norm =  6.19933E-04

        total_FunctionCall_number: 0

converged, time step increased = 0.1

Solving time step 98, using BDF1, dt = 0.1.

Current time (the starting time of this time step) = 9.65.

        NL step =  0, SNES Function norm =  7.09342E-04

        NL step =  1, SNES Function norm =  6.18694E-04

        total_FunctionCall_number: 0

converged, time step increased = 0.1

Solving time step 99, using BDF1, dt = 0.1.

Current time (the starting time of this time step) = 9.75.

        NL step =  0, SNES Function norm =  5.49192E-04

        total_FunctionCall_number: 0

converged, time step increased = 0.1

Solving time step 100, using BDF1, dt = 0.1.

Current time (the starting time of this time step) = 9.85.

        NL step =  0, SNES Function norm =  5.49192E-04

        total_FunctionCall_number: 0

converged, time step increased = 0.1

Solving time step 101, using BDF1, dt = 0.1.

Current time (the starting time of this time step) = 9.95.

        NL step =  0, SNES Function norm =  5.49192E-04

        total_FunctionCall_number: 0

I observed that after time step 99, the residual never changed, so I
believe the transient simulation converges at time step 99.
I wonder can I use the criterion "SNES converges and it takes 0 iteration"
to say the simulation reaches a steady state. Such that I don't have to
look at the screen and the code knows it converges and should stop.

Put it another way, what's the common way people would implement a scheme
to detect a transient simulation reaches steady state.

Thanks,

Ling


On Tue, Nov 3, 2015 at 5:25 AM, Matthew Knepley <knepley at gmail.com> wrote:

> On Mon, Nov 2, 2015 at 7:29 PM, Barry Smith <bsmith at mcs.anl.gov> wrote:
>
>>
>> > On Oct 30, 2015, at 12:23 PM, Zou (Non-US), Ling <ling.zou at inl.gov>
>> wrote:
>> >
>> > Hi All,
>> >
>> > From physics point of view, I know my simulation converges if nothing
>> changes any more.
>> >
>> > I wonder how normally you do to detect if your simulation reaches
>> steady state from numerical point of view.
>> > Is it a good practice to use SNES convergence as a criterion, i.e.,
>> > SNES converges and it takes 0 iteration(s)
>>
>>    Depends on the time integrator and SNES tolerance you are using. If
>> you use a -snes_rtol 1.e-5 it will always try to squeeze 5 MORE digits out
>> of the residual so won't take 0 iterations even if there is only a small
>> change in the solution.
>>
>
> There are two different situations here:
>
>   1) Solving for a mathematical steady state. You remove the time
> derivative and solve the algebraic system with SNES. Then
>       the SNES tolerance is a good measure.
>
>   2) Use timestepping to advance until nothing looks like it is changing.
> This is a "physical" steady state.
>
> You can use 1) with a timestepping preconditioner TSPSEUDO, which is what
> I would recommend if you
> want a true steady state.
>
>   Thanks,
>
>      Matt
>
>
>> >
>> > Thanks,
>> >
>> > Ling
>>
>>
>
>
> --
> 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
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.mcs.anl.gov/pipermail/petsc-users/attachments/20151103/60b0a599/attachment.html>


More information about the petsc-users mailing list