[petsc-users] How do I know it is steady state?
Zou (Non-US), Ling
ling.zou at inl.gov
Tue Nov 3 09:38:35 CST 2015
On Tue, Nov 3, 2015 at 8:24 AM, Matthew Knepley <knepley at gmail.com> wrote:
> On Tue, Nov 3, 2015 at 9:12 AM, Zou (Non-US), Ling <ling.zou at inl.gov>
> wrote:
>
>> 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.
>>
>
> I don't think so. The above makes no sense to me. You are signaling SNES
> convergence with a relative
> residual norm of 5e-4? That does not sound precise enough to me.
>
> I would argue that number (5.e-4) depends on the problem you are solving
(actually I am solving).
The initial residual of the problem starts at ~1e8.
But you might be right, and I have to think about this issue more carefully.
> As I said, I think the believable way to find steady states is to look for
> solutions to the algebraic equations,
> perhaps by using timestepping as a preconditioner.
>
> You still need a numerical criterion to let the code understand it
converges, right? For example, "a set of solutions have already been found
to satisfy the algebraic equations because ___residuals drops below (a
number here)__".
Thanks,
Ling
> Thanks,
>
> Matt
>
>
>> 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
>>>
>>
>>
>
>
> --
> 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/714857e7/attachment-0001.html>
More information about the petsc-users
mailing list