The DifferentialEquations.jl ecosystem has an extensive set of state-of-the-art methods for solving differential equations. By mixing native methods and wrapped methods under the same dispatch system, DifferentialEquations.jl serves both as a system to deploy and research the most modern efficient methodologies. While most of the basic methods have been developed and optimized, many newer methods need high performance implementations and real-world tests of their efficiency claims. In this project students will be paired with current researchers in the discipline to get a handle on some of the latest techniques and build efficient implementations into the *DiffEq libraries (OrdinaryDiffEq.jl, StochasticDiffEq.jl, DelayDiffEq.jl). Possible families of methods to implement are:
Additionally, projects could potentially improve the performance of the full differential equations ecosystem include:
Many of these methods are the basis of high-efficiency partial differential equation (PDE) solvers and are thus important to many communities like computational fluid dynamics, mathematical biology, and quantum mechanics.
Recommended Skills: Background knowledge in numerical analysis, numerical linear algebra, and the ability (or eagerness to learn) to write fast code.
Expected Results: Contributions of production-quality solver methods.
Mentors: Chris Rackauckas
There are two ways to approach libraires for partial differential equations (PDEs): one can build “toolkits” which enable users to discretize any PDE but require knowledge of numerical PDE methods, or one can build “full-stop” PDE solvers for specific PDEs. There are many different ways solving PDEs could be approached, and here are some ideas for potential projects:
Recommended Skills: Background knowledge in numerical methods for solving differential equations. Some basic knowledge of PDEs, but mostly a willingness to learn and a strong understanding of calculus and linear algebra.
Expected Results: A production-quality PDE solver package for some common PDEs.
Mentors: Chris Rackauckas
Differential equation systems which arise from partial differential equation discretizations and large-scale chemical interaction networks from climate and biological sciences often exhibit sparse connections. These models require implicit and exponential methods in order to handle the stiffness involved in the equations. However, using a stiff solver can be costly since it requires calculating or factorizing a Jacobian. In many cases this can be heavily sped up if the Jacobian is sparse, but this requires the user to provide an analytically-derived calculation for the full Jacobian.
However, alternative methods can be used in order to automatically calculate sparse Jacobians. Matrix coloring algorithms can be utilized to speed up calculations of derivatives when a known sparsity pattern is given, and this can be combined with both numerical differentiation and automatic differentiation via dual number seeding. Additionally, automatic detection of sparsity patterns can be employed to allow for building sparse matrices for use in the coloring algorithm. This would give a pipeline for simplified sparsity handling in the differential equation solvers.
Recommended Skills: Basic calculus and linear algebra is most of what’s needed with strong programming skills. Background knowledge in numerical analysis can be helpful.
Expected Results: Implementations of matrix coloring and automatic sparsity detection employed in the defaults of DifferentialEquations.jl.
Mentors: Chris Rackauckas
Bifurcation plotting allows a scientist to determine how the steady states of an equation evolve as a given parameter is changed. Existing software such as PyDSTool, MatCont, and AUTO utilize a classic technique called arclength continuation in order to generate a plot. However, this method has three major issues: (1) signatures for detecting each type of bifurcation must be explicitly coded, (2) it does not scale to high dimensions, and (3) it is not able to detect disconnected bifurcations.
A newer technique known as deflation can be used instead to compute bifurcation diagrams in a way that does not require specialization on every possible type of bifurcation, allowing the method to easily scale to higher dimensions and be more robust. In addition, this method does not require continuation from previous branches and thus is able to detect disconnection bifurcation branches. However, since the method is quite recent, no open source software make use of this technique. The goal of this project is to implement this method in order to create a bifurcation visualizer that works well with the JuliaDiffEq ecosystem, and demonstrate its ability to handle new classes of bifurcations beyond that of the previous software.
Recommended Skills: Knowledge of calculus and linear algebra (Newton’s method) is all that’s required. Previous experience with dynamical systems theory is preferred but can be picked up along the way.
Expected Results: A functional bifurcation plotting package.
Mentors: Chris Rackauckas and Christoph Ortner
Global Sensitivity Analysis is a popular tool to assess the affect that parameters have on a differential equation model. A good introduction can be found in this thesis. Global Sensitivity Analysis tools can be much more efficient than Local Sensitivity Analysis tools, and give a better view of how parameters affect the model in a more general sense. The goal of this project would be to implement more global sensitivity analysis methods like the eFAST method into DiffEqSensitivity.jl which can be used with any differential equation solver on the common interface.
Recommended Skills: An understanding of how to use DifferentialEquations.jl to solve equations.
Expected Results: Efficient functions for performing global sensitivity analysis.
Mentors: Chris Rackauckas
Quantum computing might be the next big thing. Using Yao.jl one can efficiently simulate quantum algorithms, making Julia the perfect place to start implementing quantum differential equation solvers! Papers describing such possible algorithms already exist and an experimental GSoC can implement these algorithms to try them out.
Recommended Skills: An understanding of differential equation solvers and and quantum mechanics is a must.
Expected Results: Implementations of quantum ODE solvers.
Mentors: Chris Rackauckas
The Sundials set of solvers is a popular library for performing the time stepping portion of large-scale partial differential equation (PDE) solvers. This library has the ability to be internally parallelized, supporting threading, multi-node distributed parallelism, and GPUs. The Julia package Sundials.jl is a wrapper for the Sundials library which is almost feature-complete with the wrapped code. However, the functionality that it does not make use of is the parallelization. The purpose of this project is to build the tooling to be able to utilize the parallelization parts from within Julia, and benchmarking their effectiveness on large PDEs.
Recommended Skills: Background knowledge in C++. Some knowledge of parallel computing is preferred.
Expected Results: Examples showing how to utilize the direct wrappers to perform calculations in parallel and the ability to “flip a switch” to turn on parallelism in high-level APIs.
Mentors: Chris Rackauckas