Over the years, students, visitors and collaborators have developed software which is hopefully is useful for other researchers. Some of this software is described below and I invite you to follow the provided links for further information and download.

While this software certainly is endorsed and used by myself and my collaborators, it is provided with no guarantees for functionality or correctness. For specific questions and comments on the software I recommend that you contact the person indicated as being responsible for it.

Happy computing.


nudg: Nodal Unstructured Discontinuous Galerkin methods. This is an extensively developed software package, providing both Matlab and C++ software, for method components and a large number of application examples solved using discontinuous Galerkin methods on unstructured grids. The Matlab software is extensively documented in the text Nodal Discontinuous Galerkin Methods and the C++ code (named nudg++) provides a C++ mirror of these codes to enable enhanced efficiency and flexibility beyond Matlab. Licensed under LGPLv3.

Contact person for nudg Matlab: Jan S Hesthaven or Tim Warburton

Contact person for nudg++: Tim Warburton


hedge: Hybrid and Easy Discontinuous Galerkin Environment. hedge is an unstructured, high-order, parallel Discontinuous Galerkin (DG) code. Its design is focused on two things: being fast and easy to use. While computational efficiency dictates implementation in a low level language, these same low-level languages become quite cumbersome at a higher level of abstraction. This is where the “h” in hedge comes from; it takes a hybrid approach. It allows the user to specify a DG operator in a high-level, mathematically oriented language and then worries about the details of applying this operator in a matrix-free fashion across a wide array of execution environments, including CPUs, GPUs, and MPI-based clusters of CPUs and GPUs. Licensed under the GPL3.

Contact person for hedge: Andreas Kloeckner


PyCUDA: Python for CUDA. PyCUDA makes the Nvidia CUDA compute abstraction accessible from Python. But rather than being merely a nice interface to CUDA, it aims to enable a new, generative style of GPU programming: It allows the user to easily generate and automatically tune computational kernels. It further contains a GPU-based array package and building blocks for common vectorial and reductive operations. It also features RAII-based automatic cleanup, tight integration with Numpy and extensive documentation. Available under the terms of the MIT license.

Contact person for PyCUDA: Andreas Kloeckner


sledge++: Sledge++ offers an experimental development framework for testing the numerical properties and feasibility of applying discontinuous Galerkin methods to a diverse family of differential equations. Sledge++ is an object-oriented C++. Part of the software is superseeded by nudg++ but support for adjoint based error estimation and link to large scale libraries remains unique. Licensed under LGPLv3.

Contact person for sledge++: Tim Warburton


Pyrticle: Pyrticle is an experimental hybrid Particle-in-Cell solver based on hedge. It forms the testbed for our research into combining discontinuous Galerkin Maxwell field solvers with particle-based solvers for the Vlasov equation. Licensed under the GPL3.

Contact person for Pyrticle: Andreas Kloeckner


MeshPy: MeshPy is a Python interface to two well-known simplicial mesh generation packages: Jonathan Shewchuk’s Triangle and Hang Si’s Tetgen. Both meshers’ source codes are included within meshpy, allowing easy access to unstructured mesh generation and refinement from within Python. MeshPy itself is MIT-licensed, but the mesh generators have more restrictive licenses that prohibit commercial use.

Contact person for MeshPy: Andreas Kloeckner


PyMetis: PyMetis offers a Python interface to the well-known Metis mesh partitioner. PyMetis itself is MIT-licensed, but Metis is non-free.

Contact person for PyMetis: Andreas Kloeckner


PyUblas: PyUblas forms a bridge between the Python array package numpy and the C++ array package Boost.Ublas. It allows the user to natively use numpy arrays for calculations in C++, and, with the help of Boost.Python, provides a glue layer that allows easily exposing such C++ functions to Python. Available under the terms of the MIT license.

Contact person for PyUblas: Andreas Kloeckner


speclab: A Matlab library that enables the efficient and accurate manipulation of generalized Wiener rational functions on infinite and semi-infinite intervals for approximation and use for solving PDEs on unbounded domains. It also includes software for the manipulation and use of Jacobi polynomials in spectral methods. Available under the terms of the MIT license.

Contact person for speclab: Akil Narayan

Kernel compression schemes for fractional differential equations: A Matlab implementation of efficient and accurate kernel compression schemes for the adaptive solution of fractional differential equations. Schemes are high order accurate, error controlled and fully adaptive. Available under the terms of the MIT license.

Contact person: Daniel Baffet