blog.dominik-roth.eu

Nuclear Construction Cost is Going Down

Gold doesn’t do anything. It just sits there, rare and inert, which makes it a useful measuring stick: unlike fiat currencies it isn’t inflated away, unlike commodities it has no industrial demand cycle distorting its price. Measured in gold, nuclear construction costs are reliably going down.

Nuclear construction cost in ounces of gold per kWe, 1970-2024

The common position is that nuclear is expensive and only getting more expensive. In dollars, that looks true: the same IAEA series behind this chart runs from $1,000/kWe in 1970 to $6,000/kWe in 2020. But dollars are a rubber ruler. Gold stays gold. When its dollar price rises, that is not gold becoming more valuable; it is more money chasing the same inert metal, because there is more money. Price nuclear in the thing that doesn’t move and the picture inverts: the effort humanity has to put into a kW of nuclear capacity has been drifting down for fifty years.

Yes, there are local increases, and they are real: Vogtle and the European EPRs went badly over budget, and if you deflate with CPI instead of gold you can draw a rising line for Western first-of-a-kind builds. Both things are true at once. Some Western megaprojects got worse at building, while the world as a whole, increasingly building in Korea, China, and the UAE, spends less real effort per kW than it did in 1980. The chart is a claim about the global trend measured in effort, not a denial of Vogtle.

import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import linregress

# Annual average gold prices USD/troy oz, 1970-2024 (source: curvo.eu)
gold_prices = [
    35.94, 40.62, 58.16, 97.32, 159.26, 161.02, 124.74, 147.84, 193.40, 307.62,  # 1970-1979
    615.00, 460.00, 375.67, 424.35, 360.29, 317.40, 367.66, 446.46, 437.00, 381.44,  # 1980-1989
    383.51, 362.11, 343.82, 359.77, 384.04, 383.79, 387.77, 331.02, 294.24, 278.98,  # 1990-1999
    279.11, 271.04, 309.73, 363.38, 409.72, 444.74, 603.46, 695.39, 871.96, 972.35,  # 2000-2009
    1224.53, 1571.52, 1669.50, 1411.23, 1266.40, 1160.06, 1250.74, 1257.15, 1268.49, 1393.34,  # 2010-2019
    1769.64, 1798.89, 1800.93, 1940.54, 2386.00,  # 2020-2024
]

years = np.arange(1970, 2025)

# Nuclear construction cost USD/kWe (source: IAEA, interpolated between survey points)
nuclear_cost_years = [1970, 1980, 1990, 2000, 2010, 2020]
nuclear_costs =      [1000, 3000, 2000, 2500, 1800, 6000]
nuclear_cost_interp = np.interp(years, nuclear_cost_years, nuclear_costs)

ounces_per_kwe = nuclear_cost_interp / np.array(gold_prices)

slope, intercept, r_value, _, _ = linregress(years, ounces_per_kwe)
trendline = slope * years + intercept

plt.figure(figsize=(12, 6))
plt.plot(years, ounces_per_kwe, marker='o', markersize=4, linestyle='-', linewidth=2, label='Ounces of gold per kWe')
plt.plot(years, trendline, linestyle='--', color='red', label=f'Linear trend (r={r_value:.2f})')

plt.title('Nuclear Power Plant Construction Cost in Ounces of Gold per kWe (1970-2024)', fontsize=14)
plt.xlabel('Year', fontsize=12)
plt.ylabel('Ounces of gold per kWe', fontsize=12)
plt.grid(True, linestyle='--', alpha=0.5)
plt.legend(fontsize=12)

plt.figtext(0.5, 0.01,
    'Gold: curvo.eu | Nuclear costs: IAEA (interpolated between survey points)',
    fontsize=9, color='gray', ha='center')

plt.tight_layout()
plt.savefig('nuclear-construction-cost.png', dpi=150, bbox_inches='tight')