Base class for implicit time integration
-
The dual time-stepping framework is specialized for BDF methods at the moment, but there are many things (e.g. tracking the physical time and time step count, storing nonlinear solver and time-stepping parameters) that should sit in a base class for all implicit time integrators.
-
Implement a base class from which BDF methods derive. The important part of this task is to recognize what is specific to BDF methods and what is general to all implicit methods. -
Implement a DIRK/SDIRK/ESDIRK family that derives from the base class. One surprising area in which this may be tricky is that the simulation time must be updated for every stage. -
Abstraction considered where "nonlinear iteration" is actually predictor-corrector Adams methods (high-order for nonstiff problems). Here the iteration is a predict
-correct
cycle.predict
means take the step with the explicit method,correct
means use the computed right-hand side to perform an update with the implicit method. This is iterated, and is essentially a different nonlinear solver for the implicit Adams-Moulton method that is used as the corrector. It's a solver with poor stability properties and so is only valid for non-stiff problems, but predictor-corrector Adams methods can be formed with high order of accuracy and can provide error estimates for time step adaptation (which is actually quite tricky for multistep methods, which need Nordsieck representations for variable time steps). For non-stiff problems this is a very valid technique. It carries a lot of 'baggage' but is at least worth considering in the abstraction of implicit time-steppers.
An important part of this abstraction is Wasatch, which doesn't use a lot of the dual time framework (e.g. special handling of the residual calculation because a Uintah reduction is necessary). As it is now the framework has become a bit ugly with two versions of certain methods (e.g. prepare_for_integration
) that were designed for ExprLib and then copied/pasted and changed for Wasatch.