Software
Software development is an integral part of our research.
In order for new numerical algorithms to have impact, they must be implemented in software
that is both easy to use and powerful enough to solve interesting problems.
We believe in the principles of
reproducibility and
open science,
including those outlined in the
Science Code Manifesto. All codes used in
our papers are released (under modified BSD license) and we encourage others to use them.
Below you will find brief descriptions of and links to the software packages developed
within our group and with collaborators. Smaller scripts used for a specific paper can be found
in links on our
publications page.
Documentation
Code
PyClaw is a parallel finite volume solver that includes the algorithms of
Clawpack (2nd order, Lax-Wendroff-based) and
SharpClaw (based on high order WENO and Runge-Kutta methods). It is scalable to tens of thousands of processors and includes a convenient Python interface. For more information, see our
paper in SISC.
Related packages:
- Clawpack: High resolution methods for hyperbolic PDEs (in Fortran)
- VisClaw: Visualization tools for Clawpack, PyClaw, and PetClaw
- Riemann: A library of wave propagation Riemann solvers
- PyWENO: Automatic generation of WENO kernels
- Ignition: Automatic generation of Riemann solvers (experimental)
Documentation
Code
RK-opt is a collection of tools for designing Runge-Kutta and multistep Runge-Kutta methods with prescribed or optimized stability and accuracy properties. It is written primarily in MATLAB and makes use of the Optimization Toolbox and Global Optimization Toolbox, as well as CVX. RK-opt contains routines for finding
- polynomials with optimal radius of absolute monotonicity
- polynomials with optimal stable step size for prescribed complex spectra
- Runge-Kutta, low-storage Runge-Kutta, and multistep Runge-Kutta methods with
- optimal radius of absolute monotonicity
- minimal leading truncation error coefficients
- prescribed stability polynomial coefficients
Documentation
Code
NodePy (Numerical ODEs in Python) is a Python package for designing, analyzing, and testing numerical methods for initial value ODEs. NodePy takes an object-oriented approach, in which the basic object is a numerical ODE solver (e.g., a Runge-Kutta or linear multistep method). It is intended to be a laboratory for such methods, with simple and intuitive methods of creating, modifying, and understanding them.
The package contains implementations of many things of general use for numerical analysts:
- Methods for generating Runge-Kutta and linear multistep methods, including numerous individual methods and families.
- Methods for studying well-known and some less-common properties of methods, including strong stability preservation, contractivity, order stars, etc.
- Rooted trees and order conditions: the package contains a full implementation of the Butcher group, including methods for plotting and computing products on rooted trees, as well as elementary weights and functions for generating and checking order conditions.
- Numerous additional classes of methods, including low-storage Runge-Kutta methods, multistep Runge-Kutta methods, embedded Runge-Kutta pairs, and more.
- The DETEST suite of initial value test problems, as well as a variety of other problems and methods for automatically comparing the performance of any set of numerical methods in the solution of these problems.
Documentation
Old Code (deprecated; use PyClaw instead)
SharpClaw is a high-order accurate solver for general hyperbolic PDEs. It uses the same kind of wave-propagation Riemann solvers as ClawPack, but is based on a method-of-lines approach. It makes use of high order WENO reconstruction and Runge-Kutta methods to achieve high order accuracy.
SharpClaw has recently been integrated into PyClaw/PetClaw along with very high order WENO reconstruction through PyWENO code generation. The pure Fortran SharpClaw code is no longer supported.
Downloading PyClaw (see above) is the recommended way to get the SharpClaw algorithms, and will allow you to run in parallel as well.