Emissions limits (multiple years)
This constraint implements a decarbonisation pathway by capping emissions across multiple investment periods. It's useful for long-term planning scenarios where you need to model gradual emissions reductions aligned with net-zero targets or policy trajectories.
Common use cases:
- Modeling decarbonisation pathways aligned with climate targets (e.g., Paris Agreement)
- Long-term capacity expansion planning under carbon budget constraints
- Exploring technology deployment strategies needed to achieve net-zero emissions
Note that in the code block below, n refers to the network object.
python
import math
# Configure your emission pathway parameters
baseline_year = 2023
baseline_emissions_mtco2 = 30.0 # Peak emissions in MtCO2
net_zero_year = 2050
start_year = 2025 # First constraint year
end_year = 2050 # Last constraint year
def smooth_cap(year, baseline_year, baseline_emissions, net_zero_year):
"""Square-root decay: steeper early reduction, smooth tail-off."""
if year <= baseline_year:
return baseline_emissions
frac = (year - baseline_year) / float(net_zero_year - baseline_year)
frac = min(max(frac, 0.0), 1.0)
# Square-root decay: high early reduction, flatter later
remaining_fraction = (1.0 - math.sqrt(frac))
return round(baseline_emissions * remaining_fraction, 6)
# Add emission constraints for each year in the pathway
for year in range(start_year, end_year + 1):
cap_mtco2 = smooth_cap(year, baseline_year, baseline_emissions_mtco2, net_zero_year)
n.add(
"GlobalConstraint",
f"co2_limit_{year}",
type="primary_energy",
carrier_attribute="co2_emissions",
sense="<=",
investment_period=year,
constant=cap_mtco2 * 1_000_000 # convert units
)
# print statement for your logs
print(f"Added CO2 emissions limit for {year}: {cap_mtco2:.2f} MtCO2 ({cap_mtco2*1_000_000:.0f} tCO2)")
