A Lagrangian particle dispersion model for simulating the transport and deposition of nuclear fallout.
This repository contains:
- A local particle-based simulator (advection, turbulence, and wet deposition/scavenging).
- An optional comparison workflow against NOAA HYSPLIT (trajectory mode).
- Quantitative metrics and an ensemble runner to estimate stochastic uncertainty.
src/Core implementation (particles, wind/rain models, plotting utilities, HYSPLIT integration).main.pyRuns the local simulator and generates plots.compare_models.pyRuns the local simulator + HYSPLIT trajectories and prints a comparison scorecard.
Generated data and plots (meteorological caches, HYSPLIT outputs, ensemble outputs) are excluded from version control.
- Python 3.11/3.10+ recommended.
- A scientific Python environment (NumPy, Matplotlib).
Two environments are recommended:
- A minimal environment for running the local simulator.
- A fuller environment for HYSPLIT comparison and mapping.
This is the smallest set of packages required to run the core simulation and the wind-data pipeline used by this repository.
conda create -n fallout-sim -c conda-forge python=3.11 \
numpy scipy pandas matplotlib requests \
xarray
conda activate fallout-sim
pip install cfgrib eccodes findlibsThis adds the geo/mapping stack and the HYSPLIT helper package used by the comparison workflow.
conda create -n fallout-compare -c conda-forge python=3.11 \
numpy scipy pandas matplotlib requests \
xarray \
cartopy basemap basemap-data \
geopandas shapely fiona pyproj pyshp \
folium
conda activate fallout-compare
pip install cfgrib eccodes findlibs pysplitNotes:
cfgribrelies on ECMWF ecCodes (eccodes). If you run into installation issues, prefer installingeccodesfromconda-forge.- If you want a fully reproducible environment, export it from your machine:
conda env export -n fallout-compare > environment.ymlTo run HYSPLIT comparisons you need a local HYSPLIT installation.
compare_models.py currently assumes:
C:\hysplit\HYSPLIT
If yours differs, update hysplit_root inside compare_models.py.
Create and activate an environment (example using Conda):
conda create -n fallout-sim python=3.11
conda activate fallout-simpython main.pyOutputs are written under simulation_results/.
Run a multi-start HYSPLIT trajectory ensemble seeded from the initial particle cloud:
python compare_models.py --hysplit-n 50 --seed 0Common flags:
--hysplit-nNumber of HYSPLIT trajectories (sampled start locations).--seedSeed used to select which particles are used as HYSPLIT starts.--no-downloadUse cached meteorological inputs only.
To quantify uncertainty from stochastic components (initial sampling, turbulence perturbations, scavenging), run an ensemble of independent simulations:
python compare_models.py --ensemble-n 20 --ensemble-base-seed 0This adds a “TEST F” block to the printed scorecard and writes per-run outputs to ensemble_output/.
The following directories are created/used at runtime and are ignored by git:
gfs_data/GFS GRIB2 files for the local model.hysplit_data/ARL/GDAS files for HYSPLIT.hysplit_output/HYSPLIT run outputs.ensemble_output/Ensemble per-run CSV/JSON summaries.
GNU GPL v3.0. See LICENSE.