Name: Utkarsh
Organisation: The Julia Language
Proposal: Performance Enhancements and Optimizations for Differential Equation solvers
Mentors: Chris Rackauckas, Kanav Gupta & Samuel Issacson

Hello Everyone! This blog marks my end of the journey in which I had enjoyed every bit of it. I learnt a variety of things and explored the power and awesomeness of Julia. Special shoutout to Chris Rackauckas, Kanav Gupta and Yingbo Ma who immensely helped me in getting my work done and helping me throughout this whole summer. I would always be greatful to them for accepting me as a student. I also thank Google Summer of Code which is an excellent platform to get students acquainted to open-source for which I would always remain grateful.


Regarding my work, I accomplished my project by completing its sub-tasks in a defined timeline. They are mostly related to optimisations and bug fixes to make the code-base more robust. I had initially started with multi-step backward solvers and continued to optimise while benchmarking with other existing suites of solvers. They were continuously benchmarked, and the performance was reviewed with prevalent ODE problems. I then moved to implement 4th and 5th order Kennedy-Carpenter methods. It proved to have one of the best benchmarks on stiff and IMEX classes of problems.

I worked on implicit & explicit extrapolation class of methods with in-built parallelism. Most of the work was to optimise them and add multi-threading support to solvers which proved significant improvements on a large number of ODEs. I researched and worked on Barycentric Extrapolation and implemented an implicit Euler discretisation version of it. I significantly worked on step-sizing adaptivity of solvers to increase speed and accuracy. Other than that, I worked on extraneous optimisations and reduction of memory allocations.

Other detailed blog posts

The know about the work done, features and goals achieved, please check these blog posts.

List of all Contributions


Description Pull Requests Current Status
Zero Dissipation ERK6(5) #1033 Merged
Phase Fitted RK8(7) with zero dissipations #1047 Merged
Attempty at RKM Mead, Renaut #1052 Merged
BDF Fixes #1058 Merged
Fix::Array{Float64,1} use case in QNDF #1085 Merged
Fixes for QNDF and QBDF Tests #1088 Merged
Improvements in adaptivity of QNDF #1106 Open
Failed step handling in NDF #1125 Merged
Conditions for order and step change in NDFs #1130 Merged
Migrating NDF methods to controllers.jl #1132 Merged
Fix quasi-constant step-sizing #1158 Merged
Update QNDF1 to new multistep solver #1163 Merged
Update QNDF2 to new multistep solver #1164 Merged
Update QNDF to new multistep solver #1165 Merged
Adaptivity fixes in QNDF #1173 Open
Adding new Kennedy Carpenter 4th order methods #1177 Merged
Fix redundant copies of tdir_t in tstops heap #1178 Merged
Adding new Kennedy Carpenter 5th order methods #1187 Merged
KenCarp47 and KenCarp58 tests #1189 Merged
Split methods test timeout fix in Travis #1192 Merged
Add sequences for Implicit Euler Extrapolation #1199 Merged
DEStats update in extrapolation method and fixes #1200 Merged
Sequence factor option in explicit extrapolation algo #1202 Merged
Recalculating Jacobian in Internal Discretisation #1203 Merged
Update T cal in adaptive step-sizing Extrapolation #1208 Merged
Update Work Calc in Implicit Extrapolation Methods #1209 Merged
Fix Overflow in Implicit Extrapolation Methods #1211 Merged
Add Gragg’s Smoothing to ImplicitHW Extrapolation #1212 Merged
Multi-threading for Implicit Hairer-Wanner #1213 Merged
Multi-threading for Implicit Extrapolation Methods #1215 Merged
Update Work Calculation in ImplicitEulerExtrapolation #1217 Merged
Update step-sizing in Implicit Euler Extrapolation #1230 Merged
Implemented Implicit Euler Barycentric Extrapolation #1232 Merged
Update work calculation and minor fixes #1233 Merged
Fix tests in ImplicitEulerExtrapolation #1235 Merged
Order convergence issue in Barycentric Euler Ex #1239 Merged
Fixes in ImplicitEulerBarycentricExtrapolation #1243 Merged
Order and step-sizing fixes in Implicit Euler Extrapolation Methods #1244 Merged
Fix similar->zero causing NaN dt #1245 Merged
Allocation fixes in controllers in Implicit Extrapolation Methods #1246 Merged
Allocation fixes in controllers for Hairer Wanner Methods #1251 Merged
Higher order calculations in ImplicitEulerExtrapolation #1254 Approved


Description Pull Requests Current Status
Importing MATLAB Solver stats to DiffEq #20 Merged
Change saveat handling similar to DiffEq #18 Merged


Description Pull Requests Current Status
Fix Typos and added new KenCarp methods #377 Merged
Broken Eg. in Implicit Euler Extrapolation #379 Merged
Update Parallel Extrapolation Docs #388 Merged


Description Pull Requests Current Status
Update Benchmarks to DiffEqDevTools #20 Merged

Future Goals

I really loved the Google Summer of Code program and the Julia language community. I will continue to contribute in Julia and extend my work in OrdinaryDiffEq.jl. People here are amazing and I have never seen a community that works towards efficiency in code more than this. GSoC was a great way of getting involved in SciML and Julia organizations. I will try to explore other facets of SciML, including NeuralPDE.jl, Stochastic solvers and welcome other contributors.