Split nonlinear operator - time step control

Issue #213 new
David Dickinson created an issue

The split nonlinear operator approach decouples the nonlinear and linear advance somewhat, allowing the nonlinear term to be advanced with many small steps whilst keeping a single large step for the linear terms. We advance the nonlinear term for one linear time in N steps and then advance the linear term one linear time in one step.

This can have some benefits, but introduces an additional challenge. One must now ensure that the linear time step is sufficiently small that the separation between the nonlinear and linear advance is reasonable. Currently, this means repeating the split nonlinear simulation with smaller time step to check the results are converged/insensitive to this.

This is clearly less than ideal as it involves rerunning entire (or large portions of) nonlinear simulations. It would be much better if we could detect if the linear time step is too large or not, and perhaps even adjust the linear time step during the run to ensure this is satisfied.

It is not immediately clear how one can achieve this. This issue is to record thoughts/discussion on this topic.

Comments (2)

  1. David Dickinson reporter

    One initial thought is to look at the dg coming from the NL term and from the linear term. During the linear phase one would expect |dg_lin| >> |dg_nl| whilst during the saturated phase one would expect dg_lin ~ -dg_nl on average. Looking at the ratio dg_nl / dg_lin might give some form of warning that the time step is too large if the ratio is >> 1 or remains > 1 for a long time. This is unlikely to be very robust as one would expect fluctuations about this balance in general. Indeed, for a quick test a split run with dt small enough to give very good agreement with the unsplit scheme still has a ratio which exceeds one at times.

  2. David Dickinson reporter

    One could perhaps try altering the point at which the NL term is calculated (either the start or end of the time step) as the results should not be sensitive to this if the time step is small enough. One could also consider comparing to a Strang split approach which should be second order in dt. Of course if we have a Strang split version then why not just use this directly?

  3. Log in to comment