In this section of the documentation, PyClaw refers a Python version of the hyperbolic PDE solvers that allows solving the problem in Python (e.g. in a Jupyter notebook) without explicitly using any Fortran code. Versions of the solvers are written in Python. However, they use Riemann solvers that are converted from the Fortran versions into Python-callable versions using f2py, to facilitate using the same large set of solvers from either Fortran or Python. Note that in order for this to work the solvers must be precompiled, as is done when using pip install, for example (see pip install instructions).

See Which Clawpack solver should I use? for more information about the different capabilities of PyClaw relative to Classic, AMRClaw, and GeoClaw.

Note: The clawpack/pyclaw directory also contains some Python tools that are used many places in Clawpack, e.g. when plotting with visclaw or when compiling and running Fortran code using a Makefile and file (when using Classic, AMRClaw, and GeoClaw). These modules are mostly used “under the hood”. Other Python tools of use in the Fortran versions are described elsewhere; see e.g. Plotting with Visclaw or GeoClaw Description and Detailed Contents. All of these modules are pure Python and should work fine as long as the top level of Clawpack is on your Python path.

PyClaw installation

Using pip install is the recommended approach, see pip install instructions.


Next, try running an example Jupyter notebook.

Alternatively, to run an example from the IPython prompt:

from clawpack.pyclaw import examples
claw = examples.shock_bubble_interaction.setup()

To run an example and plot the results directly from the command line, go to the directory where Clawpack is installed and then:

cd pyclaw/examples/euler_2d
python iplot=1


  • A hyperbolic PDE solver in 1D, 2D, and 3D, including mapped grids and surfaces, built on Clawpack;

  • Massively parallel – the same simple script that runs on your laptop will scale efficiently on the world’s biggest supercomputers (see Running in parallel);

  • High order accurate, with WENO reconstruction and Runge-Kutta time integration (see Using PyClaw’s solvers: Classic and SharpClaw);

  • Simple and intuitive thanks to its Python interface.

PyClaw makes use of the additional Clawpack packages, Riemann and VisClaw for Riemann solvers and visualization, respectively.

If you have any issues or need help using PyClaw, contact us.

Riemann Solvers reference documentation

The Riemann solvers now comprise a separate package. For convenience, documentation of the available pure python Riemann solvers is included here. Many other Fortran-based Riemann solvers are available.

Indices and tables

Citing PyClaw

If you use PyClaw in work that will be published, please cite the Clawpack software (see Citing this work) and also mention specifically that you used PyClaw, and cite the paper:

        Author = {Ketcheson, David I. and Mandli, Kyle T. and Ahmadia, Aron J. and Alghamdi, Amal and {Quezada de Luna}, Manuel and Parsani, Matteo and Knepley, Matthew G. and Emmett, Matthew},
        Journal = {SIAM Journal on Scientific Computing},
        Month = nov,
        Number = {4},
        Pages = {C210--C231},
        Title = {{PyClaw: Accessible, Extensible, Scalable Tools for Wave Propagation Problems}},
        Volume = {34},
        Year = {2012}}

If you use the Classic (2nd-order) solver, you may also wish to cite:

        Author = {LeVeque, Randall J.},
        Journal = {Journal of Computational Physics},
        Pages = {327--353},
        Title = {{Wave Propagation Algorithms for Multidimensional Hyperbolic Systems}},
        Volume = {131},
        Year = {1997}}

If you use the SharpClaw (high order WENO) solver, you may also wish to cite:

        Author = {Ketcheson, David I. and Parsani, Matteo and LeVeque,
        Randall J.},
        Journal = {SIAM Journal on Scientific Computing},
        Number = {1},
        Pages = {A351--A377},
        Title = {{High-order Wave Propagation Algorithms for Hyperbolic Systems}},
        Volume = {35},
        Year = {2013}}