A continuous ground-level or elevated release into a steady horizontal wind spreads as a Gaussian plume. Downwind distance is x, crosswind offset is y, height is z, source height is H:
C(x,y,z) = Q / (2π u σy σz) ·
exp(-y²/2σy²) ·
[exp(-(z-H)²/2σz²) + exp(-(z+H)²/2σz²)]
Q is the mass release rate, u the mean wind speed, and the bracketed term is the method of images: it adds a mirror source below the ground so the real plume cannot pass through it (dC/dz = 0 at z = 0). The plume widens with downwind distance through the dispersion coefficients σy(x) and σz(x), whose growth rate depends on the Pasquill–Gifford stability class — from A (strong daytime turbulence, spreads fast, dilutes fast) to F (calm stable night air, stays narrow and concentrated far downwind). This simulator uses the standard Briggs rural power-law fits for σy(x) and σz(x) per class.
- Release rate Q — how much toxic mass leaves the source per second; concentration scales linearly with it.
- Stack height H — releases above ground level dilute more before the plume touches down; the peak ground concentration moves further downwind as H increases.
- Wind speed u — concentration is inversely proportional to u: a light breeze traps the release near the source, a strong wind stretches and dilutes it.
- Stability class — sets how fast σy and σz grow with distance; class F can carry a hazardous concentration many times further downwind than class A for the same release.
The particles animate a real ensemble draw from this same distribution — each keeps a fixed pair of standard-normal offsets and is displaced by σy(x)·zy and σz(x)·zz as it advects downwind, so their spread visually matches the analytic plume. The red contour on the ground marks the IDLH (Immediately Dangerous to Life or Health) boundary used in real emergency planning to size evacuation and shelter-in-place zones around a chemical release.