OrdinaryDiffEq.jl
OrdinaryDiffEq.jl copied to clipboard
Full list of exponential integrators to implement
Note: many integrators for linear systems also use exponential-like matrix functions and Krylov approximations (Magnus expansion, adiabatic integrators, symplectic exponential methods, etc). Since they require special structure for the intended problems I have opted to not include them in the list below.
Classical ExpRK methods
The classical exponential Runge-Kutta type integrators use the semilinear formulation and can be summarized using the Butcher table (see the Hochbruck review [1]). As such they can be easily constructed for small semilinear systems by precomputing the operators $a_{ij}$ and $b_i$. For systems that do not have a semilinear structure, the exponential Rosenbrock formulation casts each integration step to a semilinear problem using the system's Jacobian.
For large systems, Krylov approximation should be used, which typically use fixed subspace dimension m
and does not use internal time-stepping or adaptation. An optimized Krylov implementation should go in the column direction (i.e. use a single Krylov subspace for all terms in a column) and an $s$-stage ExpRK scheme should require at most $s$ Arnoldi iterations.
ETDRK schemes
Oldest of the ExpRK methods, originally constructed to mimic the classical Runge-Kutta methods.
- [x] Norsett-Euler/ETDRK1
- [x] Exponential Trapezoid/ETDRK2
- [x] ETDRK3
- [x] ETDRK4
Stiffly accurate methods of Hochbruck
- [ ] Third order method families (5.8), (5.9) and (5.12) in [2].
- [x] Hochbruck-Ostermann (5.19) in [2], also in [3].
Other methods
- [ ] Exponential Midpoint ((2.40) of [1] with $c_2 = 1/2$)
- [ ] Strehmel and Weiner's third order method in [2].
- [ ] ExpRK methods included in [3]:
- [ ] Krogstad
- [ ] Strehmel and Weiner's fourth order method.
- [ ] Friedli
- [ ] ETD5RKF
- [ ] Affine Lie group schemes in [3]:
- [ ] RKMK2e
- [ ] ETD2CF3
- [ ] Cfree4
- [ ] RKMK4t
Adaptive exponential Rosenbrock methods
Not to be confused with adaptive Krylov methods in EPIRK, these are ExpRK methods that use a lower-order error estimator to perform step size adaptation, much like classical adaptive RK methods.
- [x] exprb32 in [1].
- [x] exprb43 in [1].
Exponential multistep methods
- [ ] Tokman's two-step method and variant ((2.72) in [1]).
ETD schemes
- [ ] ETD2 (partially implemented but needs update and Krylov version).
- [ ] ETD methods in [3]:
- [ ] ABNorsett2
- [ ] ABNorsett3
- [ ] ABNorsett4
Lawson/generalized integrated factor methods
These methods can be one-step or multistep, depending on the underlying classical method used for the new variable.
- [x] Lawson-Euler.
- [ ] Lawson-Runge (Example 2.33 in [1]).
- [ ] Lawson and generalized Lawson methods in [3]:
- [ ] ABLawson2
- [ ] ABLawson3
- [ ] ABLawson4
- [ ] Lawson2a
- [ ] Lawson2b
- [ ] Lawson4
- [ ] Ehle-Lawson
- [ ] GenLawson41
- [ ] GenLawson42
- [ ] GenLawson43
- [ ] ModGenLawson41
- [ ] ModGenLawson42
- [ ] ModGenLawson43
EPIRK methods
- [x] Exp4 ((5.8) of [4])
- [ ] EPIRK methods of Table 4.2 in [5]
- [ ] EPIRK4
- [x] EPIRK5-P1
- [x] EPIRK5-P2
- [x] EPIRK methods in [6]
- [x] EPIRK4s3A
- [x] EPIRK4s3B
- [x] EPIRK5s3
- [x] EXPRB53s3
These methods ditch the semilinear formulation in favor of using the Taylor expansion of the right hand side directly, with the Taylor remainder replacing the nonlinear function used by classical ExpRK methods. Typically they are structured to make full use of the adaptive Krylov methods with internal time-stepping.
References
[1] Hochbruck, M., & Ostermann, A. (2010). Exponential integrators. Acta Numerica, 19, 209-286. (https://doi.org/10.1017/S0962492910000048)
[2] Hochbruck, M., & Ostermann, A. (2005). Explicit exponential Runge--Kutta methods for semilinear parabolic problems. SIAM Journal on Numerical Analysis, 43(3), 1069-1090. (https://doi.org/10.1137/040611434)
[3] Berland, H., Skaflestad, B., & Wright, W. M. (2007). EXPINT---A MATLAB package for exponential integrators. ACM Transactions on Mathematical Software (TOMS), 33(1), 4. (https://doi.org/10.1145/1206040.1206044)
[4] Hochbruck, M., Lubich, C., & Selhofer, H. (1998). Exponential integrators for large systems of differential equations. SIAM Journal on Scientific Computing, 19(5), 1552-1574. (https://doi.org/10.1137/S1064827595295337)
[5] Tokman, M., Loffeld, J., & Tranquilli, P. (2012). New Adaptive Exponential Propagation Iterative Methods of Runge--Kutta Type. SIAM Journal on Scientific Computing, 34(5), A2650-A2669. (https://doi.org/10.1137/110849961)
[6] Rainwater, G., & Tokman, M. (2016). A new approach to constructing efficient stiffly accurate EPIRK methods. Journal of Computational Physics, 323, 283-309. (https://doi.org/10.1016/j.jcp.2016.07.026)
Great comprehensive list! I see this is missing the IIF which are implicit Lawson methods, but since those utilize additional structure in their actual implementation (or at least should) they should be kept separate.
Hochbruck-Ostermann (5.19) in [2], also in [3].
This is #395 ? I checked it.
The IMEX methods should get a mention as well: https://github.com/JuliaDiffEq/OrdinaryDiffEq.jl/issues/279
These EPIRK methods are probably interesting as well for PDEs: https://link.springer.com/article/10.1007/s10915-018-0761-3
I want to request that we do exprb32 in [1] and exprb43 in [1] before the summer is over. These are the only "classical adaptive" methods, which is important since that's required to be a default for solve(prob)
without user dt
input. Also, it would be nice to have that setup in place since I would think that future exponential integrators like future EPIRKs will want to head there, so we might as well make sure it works.
What about https://www.researchgate.net/publication/328257114_Further_development_of_efficient_and_accurate_time_integration_schemes_for_meteorological_models ?
Hi! I am looking to implement one of these exponential integrator methods for my course 18.337 project. Perhaps one of the ones from ref [3]. Would that still be of interest?
Yes, definitely of interest. Only these ones were completed:
https://diffeq.sciml.ai/stable/solvers/split_ode_solve/#OrdinaryDiffEq.jl-2
so there's quite a bit that can be done.