Zombie is a C++17 header-only library with Python bindings for solving partial differential equations with Walk on Spheres-style Monte Carlo methods. It is designed for problems where creating a volume mesh is awkward, expensive, or unnecessary: the solver queries the original boundary representation directly and estimates the solution only where values are needed.
For GPU implementations of these algorithms, see WoSX, which builds on Zombie with GPU support and additional demo applications.
Zombie is research software. The algorithms are still an active area of research, and the implementations are meant to be clear reference implementations rather than final word on performance or variance reduction. For a broader introduction to Walk on Spheres and its recent extensions, see this overview talk and this webpage for in-depth resources such as recent publications and tutorials.
The best way to get started is through the demo application in demo/.
It provides compact 2D reference problems for Laplace, Poisson, screened Poisson,
and multiple solvers. The folder has its own README with the problem setup,
expected outputs, and C++ and Python run commands.
Most Zombie applications follow the same high-level workflow:
- Define geometric queries for the domain boundary, such as distance, intersection, and projection queries.
- Define PDE data: source term, screening, and Dirichlet, Neumann, or Robin boundary conditions.
- Choose sample/evaluation points where the solution and its spatial gradient should be estimated.
- Choose a solver, run the random walks, and write or visualize the resulting values.
The same conceptual workflow applies in C++ and Python.
Zombie targets scalar and vector-valued PDEs in 2D and 3D, including Laplace, Poisson, and screened Poisson equations. Boundary conditions may be mixed across the same boundary:
- Dirichlet: prescribed solution value.
- Neumann: prescribed normal derivative.
- Robin: linear combination of solution value and normal derivative.
Screened Poisson problems currently use a constant absorption coefficient. Geometric queries are backed by FCPW, with line-segment boundaries in 2D and triangle-mesh boundaries in 3D. Exterior problems can be handled through a Kelvin transform.
Available solver families include Walk on Spheres for Dirichlet conditions, Walk on Stars for Neumann and Robin conditions, and Boundary Value Caching and Reverse Walk on Stars for noise reduction.
git clone https://github.com/rohan-sawhney/zombie.git
cd zombie && git submodule update --init --recursive
mkdir build && cd build && cmake ..
make -j4
After cloning Zombie and updating its submodules, build and install the Python bindings from the project root using:
mkdir build
pip install . --force-reinstall
The Python API can be inspected from a Python console:
>>> import zombie
>>> help(zombie)
@software{Zombie,
author = {Sawhney, Rohan and Miller, Bailey},
title = {Zombie: Grid-Free Monte Carlo Solvers for Partial Differential Equations},
version = {1.0},
year = {2023}
}
Code is released under an MIT License.


