Skip to main content

Python surface process framework on highly scalable unstructured meshes

Project description


Quagmire is a Python surface process framework for building erosion and deposition models on highly parallel, decomposed structured and unstructured meshes.

Quagmire is structured into three major classes that inherit methods and attributes from lower tiers.

Quagmire hierarchy

The Surface Processes class inherits from the Topography class, which in turn inherits from TriMesh or PixMesh depending on the type of mesh.


Numpy and a fortran compiler, preferably gfortran, are required to install Quagmire.

  • python build
    • If you change the fortran compiler, you may have to add the flags config_fc --fcompiler=<compiler name> when is run (see docs for numpy.distutils).
  • python install


Running this code requires the following packages to be installed:

  • Petsc 3.7.x and above
  • Numpy 1.9 and above
  • Scipy 0.15 and above
  • mpi4py
  • petsc4py
  • stripy
  • h5py (optional - for saving parallel data)
  • Matplotlib (optional - for visualisation)

PETSc installation

PETSc is used extensively via the Python frontend, petsc4py. It is required that PETSc be configured and installed on your local machine prior to using Quagmire. You can use pip to install petsc4py and its dependencies.

[sudo] pip install numpy mpi4py
[sudo] pip install petsc petsc4py

If that fails you must compile these manually.

HDF5 installation

This is an optional installation, but it is very useful for saving data that is distributed across multiple processes. If you are compiling HDF5 from source it should be configured with the --enable-parallel flag:

CC=/usr/local/mpi/bin/mpicc ./configure --enable-parallel --enable-shared --prefix=<install-directory>
make	# build the library
make check	# verify the correctness
make install

You can then point to this install directory when you install h5py.


Quagmire is highly scalable. All of the python scripts in the tests subdirectory can be run in parallel, e.g.

mpirun -np 4 python

where the number after the -np flag specifies the number of processors.


Tutorials with worked examples can be found in the Notebooks subdirectory. These are Jupyter Notebooks that can be run locally. We recommend installing FFmpeg to create videos in some of the notebooks.

The topics covered in the Notebooks include:


  • Square mesh
  • Elliptical mesh
  • Mesh refinement (e.g. Lloyd's mesh improvement)
  • Poisson disc sampling

Flow algorithms

  • Single and multiple downhill pathways
  • Accumulating flow

Erosion and deposition

  • Long-range stream flow models
  • Short-range diffusive evolution

Landscape evolution

  • Explicit timestepping and numerical stability
  • Landscape equilibrium metrics
  • Basement uplift

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Files for quagmire, version 0.2.1
Filename, size File type Python version Upload date Hashes
Filename, size quagmire-0.2.1.tar.gz (3.7 MB) File type Source Python version None Upload date Hashes View

Supported by

AWS AWS Cloud computing Datadog Datadog Monitoring DigiCert DigiCert EV certificate Facebook / Instagram Facebook / Instagram PSF Sponsor Fastly Fastly CDN Google Google Object Storage and Download Analytics Pingdom Pingdom Monitoring Salesforce Salesforce PSF Sponsor Sentry Sentry Error logging StatusPage StatusPage Status page