chalmersplasmatheory / DREAM

The Disruption Runaway Electron Analysis Model
MIT License
24 stars 5 forks source link

Predictor step in SolverNonLinear #74

Open Embreus opened 3 years ago

Embreus commented 3 years ago

We should implement a structure to allow the initial guess x{n+1}^(0) for the solution in the next time step to be estimated using various possible models. The default, currently in use, is to take it as the solution from the previous time step: x{n+1}^(0) = x_n. By improving this initial guess we may accelerate the convergence of the solver and possibly increase stability.

Embreus commented 3 years ago

For quantities where we are not concerned with exact conservation and which evolve on characteristic time scales comparable to the simulation time, we can extrapolate from the previous ’k’ time steps. This could be appropriate for the electric field, temperature and poloidal flux. A good choice (that I’ve seen in the literature) could be a quadratic extrapolation from the previous 3 time steps, and which would be inactive for the first couple of time steps where there may be fast transients which should settle down before it is safe to extrapolate.

Embreus commented 3 years ago

An alternative, which is more complex but possibly with a greater payoff, would be to evolve the full system while keeping the distribution functions fixed at the values they took at the end of the previous timestep. This would be a computationally cheaper fluid simulation, that could provide a good approximation to the background plasma in the next timestep.

Thus, for each time step, you would:

  1. Take the full timestep, using the nonlinear solver, for the reduced fluid system which is obtained by fixing the distribution function at the previous value.
  2. Repeat the time step with the solution from step 1 as an initial guess, but now including the distribution functions.

Typically, because of its (much) smaller grid, step 1 should be nearly free compared to step 2, but has the potential to significantly reduce the number of iterations required to take step 2. If needed for stability, step 1 could be carried out using all means necessary, such as step size reduction or other trickery.

A counter argument could be that the number of iterations in the solver is (sometimes?) mainly set by the flux limiter, in which case this method would not decrease computation time. Not sure if that is the case, though.