Skip to content

Instantly share code, notes, and snippets.

@YingboMa
Last active August 28, 2017 12:35
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save YingboMa/65dbe1a43564ab367408588467ccb671 to your computer and use it in GitHub Desktop.
Save YingboMa/65dbe1a43564ab367408588467ccb671 to your computer and use it in GitHub Desktop.
2017 GSoC Summary

What did I do

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.

  1. SciML/OrdinaryDiffEq.jl#69
  2. SciML/OrdinaryDiffEq.jl#73

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.

  1. Nystrom4 and Nystrom4VelocityIndependent
  2. Nystrom5VelocityIndependent and Nystrom4VelocityIndependent
  3. IRKN4
  4. IRKN3
  5. Code clean up
  6. DPRKN6
  7. DPRKN8
  8. DPRKN12
  9. ERKN4
  10. Optimize IRKN4 & IRKN3 and code clean up

Then, there are tools that make problem solving easier.

  1. Ploting
  2. Hamiltonian problem
  3. N-body problem

Finally, there are documentations and tutorials that I wrote.

  1. BVP sovler tutorial
  2. Classical Physics Models
  3. Kepler Problem Orbit
  4. Outer Solar System Planetary Orbits

Miscellaneous Pull Requests

In the DiffEqDiffTools.jl repository, I had some PRs to improve the Jacobian matrix calulation and bug fix.

  1. Bug fix
  2. Make Jacobian calulation more generic

I also added banded Jacobian support in Sundials.jl in this PR.

Post GSoC work

Currently, there is no adaptivity and dense output support in BoundaryValueDiffEq.jl, and I should add them.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment