Estimate fatalities and loss of industry in the direct aftermath of a nuclear war. Also estimates yield decrease due to loss of agricultural inputs. The code version used in the paper is the one in the paper1-release branch.
- Clone the repo on your local machine.
- Create the Conda environment using
conda env create -f environment.yml. - Activate the new environment using
conda activate Population-Loss-NW. - (Optional)
- Download the
.osmdata to thedata/OSMdirectory if you want to use the industrial loss option. It can be downloaded here. For more countries, additional files can also be generated using thedata/OSM/extract-industrial-country.shscript. - Download the HD LandScan data to the
data/LandScandirectory if you want to use the HD version of the LandScan data. It can be downloaded here. - Download the Ahvo et al. data to the
data/ahvodirectory if you want to use the agricultural loss option; it can be downloaded here. - Download the BACI data to the
data/BACIdirectory if you want to estimate loss of pesticides; it can be downloaded here.
- Download the
Here we use a methodology similar to Toon et al. 2007 and Toon et al. 2008 to estimate the number of fatalities in the aftermath of a nuclear war.
In Hiroshima and Nagasaki data a normal distribution around ground zero was measured for the fatality rate, scripts/burn-radius-scaling.ipynb).
Using LandScan data for population, we can estimate the number of fatalities in the immediate aftermath of a nuclear war by integrating over the distribution of distances from ground zero.
Targets can be selected by finding for a given country where to detonate a given number of warheads over the country's most populated region and without overlapping targets (following the Toon et al. methodology). For example, here are the results for 50 100-kt non-overlapping strikes on Germany. The areas colored in light red are regions where fatalities are expected from the blasts and ensuing fires and those colored in dark red are regions expected to be burned down. 14 million fatalities are expected in this scenario. Other targeting options currently supported are to maximize the number of fatalities while allowing overlapping targets, and defining the coordinates of the targets (along with a CEP to account for targeting inaccuracy).
In addition, industrial zones can be shown in purple or brown if they are burned down by the nuclear explosions. This allows to estimate the loss of industry in the aftermath of a nuclear war by calculating for a given country what fraction of all industrial areas are burned down.
Finally, we also calculate the amount of soot emissions in Tg. We use the same relation as Toon et al. 2008 to calculate the amount of soot emitted in a given pixel. However, we also add the condition that a firestorm only occurs if the fuel loading is above 4 g/cm². If a pixel is below this threshold, there is no firestorm and therefore no injection of soot in the stratosphere. Also, we assume that only half of locations that can firestorm based on this single criterion will actually firestorm (this is based on the fact that Hiroshima firestormed but not Nagasaki).
Note that other targeting options are also supported. Currently, there is an option for following the OPEN-RISOP target list for the US, and an option for following the declassified 1956 US target list for Russia and China.
Fatalities due to nuclear fallout from ground bursts can now also be calculated. The methodology is described in this document. The image below shows an example for 100 kt strikes against Paris. The brown circles are the regions destroyed by fire and the green-yellow-orange-red colors indicate the total radiation accumulated after 48 hours. 500 rads is fatal without protection, but most people would shelter inside (being in a residential basement offers a ~10x protection factor).
To translate the loss of industrial capacity into loss of agricultural production, we use the data from Ahvo et al. 2023. First, we calculate the loss of fertilizers and pesticides due to the destruction or disablement of industrial capacity using data for fertilizer and pesticide production by country. Then, we use the data from Ahvo et al. to estimate the loss of agricultural production due to the loss of fertilizers and pesticides. This is done for each country separately assuming that the loss of fertilizers and pesticides applies globally. For each country, we calculate the loss of agricultural production for 12 crops and average these numbers using the number of calories supplied by each crop as weights. We are making the assumption that all yield loss sources are multiplicative.
- LandScan for population data
- OSM for industrial data
- BACI for data on pesticides
- OWID for agricultural production data and fertilizer data
- Ahvo et al. 2023 for data on yield loss due to input shock
- The code requires quite a bit of RAM if the target country is large. If this is an issue, you can use the
degradeoption to degrade the resolution of the LandScan data. The original resolution is 30 arc-seconds, so the individual pixels are somewhat smaller than 1 km² for the regions most susceptible to nuclear war.
-
Simply use
scripts/nuclear-attack.ipynbto calculate the number of fatalities and destruction of industrial capacity in a nuclear war given an attack with a given number of warheads against a given country. All the code is insrc/main.py.resultscontains the number of fatalities and loss of industrial capacity for different scenarios. -
scripts/HEMP.ipynbcontains the standalone code to calculate the disablement of industrial capacity due to HEMP. For the scenarios currently considered, EMP effects can be applied separately from the effects of direct destruction of industrial capacity. However, this could change in the future, which would necessitate a more integrated approach. This was avoided at this stage to keep the codebase simple. -
scripts/impact-of-loss-of-industry.ipynbtransforms loss of total industrial capacity per country into loss of industrial capacity per sector using the code insrc/sectors.pyanddata/industry-sectors/. In addition, it also calculates the loss of agricultural production due to loss of fertilizers and pesticides (using the code insrc/inputshock.py). This script produces the file that can be used as input for the integrated model. -
The other notebooks in
scripts/are for the specific scenarios considered so far, all described in these slides.
To verify that the population loss implementation is correct, we can compare to the results of Toon et al. Below is a comparison between the number of casualties (in millions) in different scenarios. Note that this includes fatalities and injuries to facilitate the comparison with the results of Toon et al. Everything seems to work ok. Some numbers are significantly higher, but this can be attributed to population increase over the years (India in particular). Note that this verification was performed using the same scaling assumptions as Toon et al. (the default code uses different scaling assumptions).
| Scenario | Toon et al. | This code (Toon assumptions) |
|---|---|---|
| China, 1100x 100kt | 287 | 314 |
| France, 200x 100kt | 23 | 20 |
| Germany, 200x 100kt | 28 | 27 |
| India, 200x 100kt | 116 | 172 |
| Japan, 200x 100kt | 59 | 50 |
| Pakistan, 200x 100kt | 50 | 66 |
| Russia, 1100x 100kt | 76 | 66 |
| UK, 200x 100kt | 28 | 29 |
| US, 1000x 100kt | 104 | 108 |
| Total | 771 | 851 |
And here is a similar comparison for the amount of soot emissions in Tg. Note that for the second column in this table we use the same burn radius prescription as Toon et al., which is different from the default code (see scripts/burn-radius-scaling.ipynb).
| Scenario | Toon et al. | This code (Toon assumptions) |
|---|---|---|
| China, 1100x 100kt | 59.5 | 64.9 |
| France, 200x 100kt | 6.5 | 6.1 |
| Germany, 200x 100kt | 7.3 | 7.0 |
| India, 200x 100kt | 21.4 | 33.8 |
| Japan, 200x 100kt | 11.9 | 11.1 |
| Pakistan, 200x 100kt | 11.0 | 13.8 |
| Russia, 1100x 100kt | 26.9 | 23.7 |
| UK, 200x 100kt | 7.4 | 7.6 |
| US, 1000x 100kt | 28.1 | 29.7 |
| Total | 180 | 198.5 |
See theses slides for a description of the scenarios considered.


