Zombie
Grid-Free Monte Carlo Solvers for Partial Differential Equations
Install / Use
/learn @rohan-sawhney/ZombieREADME
Monte Carlo Geometry Processing [Project, Talk]<br> Walk on Stars: A Grid-Free Monte Carlo Method for PDEs with Neumann Boundary Conditions [Project, Talk]<br> Walkin' Robin: Walk on Stars with Robin Boundary Conditions [Project]<br> Grid-Free Monte Carlo for PDEs with Spatially Varying Coefficients [Project, Talk]<br> Boundary Value Caching for Walk on Spheres [Paper, Talk]
WoS is a relatively new concept in graphics, rendering and simulation, and is an active area of research, e.g., 1, 2, 3, 4, 5, 6, 7. Therefore, the algorithms provided in this library are by no means optimal: further work is needed not just to make the Monte Carlo estimators more sample efficient, but also to extend the class of PDEs they can handle. Zombie aims to serve as a reference implementation for the current state of the art. Visit this repository for a step-by-step tutorial on the solver. A more optimized GPU implementation is currently in the works.
Concepts
At its core, Zombie solves PDEs of the form:
$$ \begin{array}{rcll} \Delta u &=& f & \text{on}\ \Omega, \ u &=& g & \text{on}\ \partial\Omega_D, \ \tfrac{\partial u}{\partial n} &=& h & \text{on}\ \partial\Omega_N, \ \tfrac{\partial u}{\partial n} - \mu u &=& k & \text{on}\ \partial\Omega_R, \ \end{array} $$
where $\Omega$ is a domain in $\mathbb{R}^2$ or $\mathbb{R}^3$, and $f$, $g$, $h$ and $k$ are real-valued functions in $\Omega$, the Dirichlet part of the boundary $\partial\Omega_D$, and the complimentary Neumann and Robin parts of the boundary $\partial\Omega_N$ and $\partial\Omega_R$ respectively. Zombie also supports screened Poisson equations with a constant absorption term (variable coefficients are not currently supported). Boundary conditions and source terms are provided as user-defined callback routines that return a value for any query point in the domain. Likewise, the domain boundary is queried using callbacks; Zombie currently supports boundaries represented as triangle meshes in 3D and line segments in 2D (see here), and uses the FCPW library to perform its geometric queries. The PDE solution (and optionally its spatial gradient) can then be evaluated at a set of user-specified evaluation points indepedently or through sample caching. The demo application demonstrates how to use the concepts defined in the library.
<p align="center"><img src="imgs/system-design.png" width="831.6" height="467.775"></p>Compiling from source on Mac & Linux
git clone https://github.com/rohan-sawhney/zombie.git
cd zombie && git submodule update --init --recursive
mkdir build && cd build && cmake ..
make -j4
Python Installation
After cloning Zombie and updating the submodules, build and install the Python bindings in the project root directory using:
mkdir build
pip install . --force-reinstall
The full Zombie API can be viewed in the Python console using:
>>> import zombie
>>> help(zombie)
Citation
@software{Zombie,
author = {Sawhney, Rohan and Miller, Bailey},
title = {Zombie: Grid-Free Monte Carlo Solvers for Partial Differential Equations},
version = {1.0},
year = {2023}
}
Contributors
License
Code is released under an MIT License.
Related Skills
node-connect
338.7kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
frontend-design
83.6kCreate distinctive, production-grade frontend interfaces with high design quality. Use this skill when the user asks to build web components, pages, or applications. Generates creative, polished code that avoids generic AI aesthetics.
openai-whisper-api
338.7kTranscribe audio via OpenAI Audio Transcriptions API (Whisper).
commit-push-pr
83.6kCommit, push, and open a PR
