My original goal that I proposed to my mentor Chris was solving boundary value problems (a.k.a. BVPs) which were determined from second order ordinary differential equations (a.k.a. ODEs). I started the BVP path, built a shooting method to solve BVPs from initial value problems (a.k.a. IVPs). Then, I built the beginning of a mono-implicit-Runge-Kutta (a.k.a. MIRK) method, but I don't have all of the bells and whistles. Both of these solvers are in the BoundaryValueDiffEq.jl repository. Instead of trying to jump directly to the end point, and talk about how to do every detail in MIRK, I went to explore how those details naturally arise in second order ODEs.
First, there the idea of symplecticity, because the Labatto MIRK (Lobatto IIIA-IIIB) tableaux are actually symplectic integrators. Symplecticity basically is another way to say energy conservation, so symplectic integrators are specialized for solving second order ODEs that are raised from dynamic system, which require energy conservation. It is easier to see what that actually entails on dynamical IVPs, the good things and the limitations. I have two PRs about symplecticity.
Secondly, there are adaptivity and dense output, those are easier explored through IVPs once again. I implemented Runge-Kutta-Nyström (a.k.a. RKN) methods for second order ODEs, and some of them have adaptivity and dense output. The MIRK adaptivity is a residual control which uses differences between the interpolation and the function output f
, but it's the same idea in the end: using a bounded difference as an error estimation, and adapting based on that estimation.
Nystrom4
andNystrom4VelocityIndependent
Nystrom5VelocityIndependent
andNystrom4VelocityIndependent
IRKN4
IRKN3
- Code clean up
DPRKN6
DPRKN8
DPRKN12
ERKN4
- Optimize IRKN4 & IRKN3 and code clean up
Then, there are tools that make problem solving easier.
Finally, there are documentations and tutorials that I wrote.
- BVP sovler tutorial
- Classical Physics Models
- Kepler Problem Orbit
- Outer Solar System Planetary Orbits
In the DiffEqDiffTools.jl repository, I had some PRs to improve the Jacobian matrix calulation and bug fix.
I also added banded Jacobian support in Sundials.jl in this PR.
Currently, there is no adaptivity and dense output support in BoundaryValueDiffEq.jl, and I should add them.