david/Practical Minimum-Storage Runge-Kutta Pairs
High order methods of multistep or Runge-Kutta type generally require an amount of memory equal to several times the number of equations to be solved. When the system of equations comes from semi-discretization of a PDE, this memory requirement may be excessive. Low-storage Runge-Kutta methods that use memory equal to only two or three times the number of equations have been developed over the last few decades. Recently, the existing low-storage algorithms have been clarified and analyzed in a new framework, leading to the discovery of even more efficient algorithms, including low-storage embedded Runge-Kutta methods.
The goal of this project is to exploit this theoretical breakthrough to develop practical methods for industrial use. These methods will be optimized for a variety of properties relevant to important applications; such properties include accuracy, linear and nonlinear stability, and dispersion/dissipation properties.
The initial goal will be to develop methods that share the linear properties (i.e., have the same stability polynomial) of current state-of-the-art methods, but use less memory. Then, the project will seek to develop low-storage methods with better properties than currently used methods. One benchmark against which to compare these methods is the work of Kennedy et. al. (2000). Finally, the methods developed would be applied to relevant test problems, including the DETEST ODE suite and some semi-discretized PDEs. Finally, one or more methods will be implemented and tested by our collaborators in a production code, such as CFDNS.
The approach used will be to apply commercially available optimization software to this problem. The optimization problem is highly nonlinear, with complicated equality and inequality constraints, and involves on the order of 10-100 degrees of freedom. Hence sophisticated software will be required, and it is anticipated that a number of software packages may be applied, including MATLAB’s optimization toolbox, the Python package OpenOpt, and others.
Further work in this area could involve allowing additional registers, determining what kinds of low-storage algorithms are then possible, and finding optimized methods with extra registers.
An interesting related theoretical question is that of proving whether the known class of low-storage (two-register) methods includes all possible two-register methods. This question is connected to certain questions of circuit computability.