Hi,
I recently learned about the class Algorithms::TimestepControl and how it is being used in the Algorithms::ThetaTimestepping class. It has a fairly limited set of strategies (uniform step size and doubling step size). I wonder if we can customize it to allow adaptive time stepping. Let me explain with an example. Suppose we are running a time dependent algorithm and at each time-step we perform a Newton algorithm to solve a nonlinear time-dependent equation. The Newton algorithm reports its convergence quality through a SolverControl object. When we are advancing the time, we need to adjust the time step size based on the results stored in the SolverControl object. If it took too many steps to converge, we should reduce the time step size and if the convergence was easy, we can increase the step size.
1. Is there already a class in dealii that can do that?
2. If we want to implement this functionality, what are the best designs for the interface?
There is another related functionality that I am also looking for. If the convergence in one of the steps fails, we need to go back in time and redo the calculations with a smaller time step size. Any ideas on how I can make that work?
Thank you
Reza