A paper → a model → a simulation

This project is a reimplementation of selected equations from Yang et al. (2024) into simulated particle journeys.

Source paper · Yang et al., 2024 ↗ Estimating the concentration of silver iodide needed to detect unambiguous signatures of glaciogenic cloud seeding
Twenty particles follow Python-generated trajectories already in progress. Elapsed time and collected water mass start at zero.
280× speed
— min · — particles

Loading crystals…

* ice / o liquid · purple: seeded · altitude in metres · particle size exaggerated

From calculation to cloud

Where the data comes from

  1. Calculatemodel.py

    Integrate each crystal’s mass and height with SciPy’s adaptive RK45 solver.

  2. Saveexport_simulations.py

    Choose a reproducible preset and export times, heights, masses, phases, and exact transition endpoints.

  3. Animatecloud.json → trajectory.ts

    Read the saved trajectories and interpolate between samples. The browser replays these calculations.

The preset you are watching

Loading settings from the simulation data…

How one seeding burst becomes crystals

Loading the exported nucleation calculations…

Values read from the same JSON file used by the animation. Display values are rounded.
Height (m)Temperature (K)Ice saturationFraction activatedExpected crystalsWhole crystals

Background starting heights are distributed between 2,300 and 2,700 m using Python’s random seed 42. Each starts with a 4 µm radius and ice density of 910 kg/m³. Seeded crystals use the same initial sphere.

The animation plays at 280× speed. Background journeys loop, with two staggered groups and a 450-minute playback offset. The water counter subtracts arrivals before the scene opens. Each completed angel flight starts one fresh replay of the saved seeding burst; these seeded journeys do not loop. Horizontal placement and the angel are visual choices.

Download the simulation data (JSON) ↓

Behind each particle

How this simulation works

The equations below describe the calculations used in this implementation, with their sources and assumptions. Each equation includes its LaTeX source. Quantities use SI units unless stated otherwise.

A simplified implementation of selected parts of the paper.

I use deposition nucleation and spherical vapor growth, with still air and prescribed humidity. I omit the paper’s other nucleation modes, changing crystal shapes, riming, turbulence, and radar-detection algorithm. Moisture is not depleted. Below-cloud descent and instantaneous melting are my additions.

Building the project

Tech Stack

Animated ASCII logos by ascii.rest ↗.

Explore the code

You can find the code for this project on my GitHub.

rowan-cake / rainmaker ↗

Shoutout to codex for making this possible. Pls hire me @Rainmaker