Environmental Impacts¶
Overview¶
The environmental module accounts for greenhouse gas emissions, land use change and nitrogen pollution from food production. These impacts are monetized and included in the objective function via configurable prices/penalties.
This is currently a work in progress and not all relevant environmental impacts are implemented and monetized yet.
Greenhouse Gas Emissions¶
The model tracks three major greenhouse gases using 100-year global warming potentials (GWP100):
CO₂ (GWP = 1): From land use change, fuel combustion
CH₄ (GWP = 28): From enteric fermentation (ruminants), rice paddies, manure
N₂O (GWP = 265): From nitrogen fertilizer application, manure
All emissions are aggregated to CO₂-equivalent (internally tracked in MtCO₂-eq; the configured price still applies per tonne) for carbon pricing.
Implementation notes (buses, stores, links)¶
The optimisation model represents environmental flows with three PyPSA components that are worth keeping in mind:
Buses act as balance sheets. Process components report raw emissions to the
co2
andch4
buses, while a dedicatedghg
bus tracks the combined CO₂-equivalent balance.Links move quantities between buses, applying efficiencies that encode global warming potentials.
convert_co2_to_ghg
has efficiency 1.0, andconvert_ch4_to_ghg
uses the configuredemissions.ch4_to_co2_factor
(27.2 by default). Every megatonne of CH₄ (after scaling from tonnes) therefore appears on theghg
bus weighted by its 100-year GWP.Stores accumulate quantities over the horizon. The extendable
ghg
store sits on the combined bus and is priced atemissions.ghg_price
. Because neither theco2
norch4
buses have stores, their flows must pass through the conversion links before the objective is charged.
With this structure the linear program keeps separate ledgers for each greenhouse gas while charging the objective using a single priced stock of CO₂-equivalent. Scenario files can tighten or relax climate policy simply by changing the configuration values—no code modifications are required.
Sources of Emissions¶
- Crop Production:
N₂O from fertilizer (direct and indirect)
CH₄ from flooded rice cultivation
CO₂ from machinery/fuel (if included)
- Livestock:
CH₄ from enteric fermentation (ruminants)
N₂O and CH₄ from manure management
CO₂ from feed production (indirect)
- Land Use Change:
CO₂ from clearing vegetation (forest, grassland → cropland)
Soil carbon losses
Direct N₂O emission factors¶
The model uses the 2019 Refinement to the IPCC Guidelines for National Greenhouse Gas Inventories to parameterise direct N₂O emissions from managed soils. Table 11.1 (updated) is reproduced below to make the default emission factors and their uncertainty ranges readily accessible when configuring fertilizer-related pathways.
Emission factor |
Aggregated default value |
Aggregated uncertainty range |
Disaggregation |
Default value |
Uncertainty range |
---|---|---|---|---|---|
EF1 for N additions from synthetic fertilisers, organic amendments and crop residues, and N mineralised from mineral soil as a result of loss of soil carbon [kg N₂O-N (kg N)-1] |
0.010 |
0.002 – 0.018 |
Synthetic fertiliser inputs in wet climates Other N inputs in wet climates All N inputs in dry climates |
0.016 (wet synthetic) 0.006 (wet other) 0.005 (dry) |
0.013 – 0.019 0.001 – 0.011 0.000 – 0.011 |
EF1FR for flooded rice fields [kg N₂O-N (kg N)-1] |
0.004 |
0.000 – 0.029 |
Continuous flooding Single and multiple drainage |
0.003 0.005 |
0.000 – 0.010 0.000 – 0.016 |
EF3PRP,CPP for cattle (dairy, non-dairy and buffalo), poultry and pigs [kg N₂O-N (kg N)-1] |
0.004 |
0.000 – 0.014 |
Wet climates Dry climates |
0.006 0.002 |
0.000 – 0.027 0.000 – 0.007 |
EF3PRP,SO for sheep and “other animals” [kg N₂O-N (kg N)-1] |
0.003 |
0.000 – 0.010 |
– |
– |
– |
Carbon Pricing¶
Emissions are priced at a configurable rate:
emissions:
ghg_price: 200 # USD_2024/tCO2-eq (emissions stored in MtCO2-eq internally)
ch4_to_co2_factor: 27.0 # IPCC AR6 GWP100 (WG1, Chapter 7, Table 7.15; https://www.ipcc.ch/report/ar6/wg1/chapter/chapter-7/)
n2o_to_co2_factor: 273.0 # IPCC AR6 GWP100 (WG1, Chapter 7, Table 7.15; https://www.ipcc.ch/report/ar6/wg1/chapter/chapter-7/)
# --- section: land use change ---
luc:
horizon_years: 25
managed_flux_mode: "zero"
forest_fraction_threshold: 0.2 # Minimum forest fraction (0-1) to apply regrowth sequestration
spared_land_agb_threshold_tc_per_ha: 20.0 # Max AGB (tC/ha) for spared land eligibility
Land Use Change¶
Land-use change (LUC) emissions capture the carbon consequences of converting land between natural vegetation, cropland, pasture, and spared (actively rewilded) states. The model derives annualized per-hectare coefficients for each resource class and water supply that quantify the net CO₂ flux associated with allocating an additional hectare to a specific land use.
Conceptual overview¶
For every grid cell on the common suitability grid, the workflow computes three main quantities:
Pulse emissions (:math:`P_{i,u}`) – the one-off release (or uptake) that occurs when land transitions from its natural state to land use \(u\) (cropland or pasture). We estimate above-ground biomass (AGB), below-ground biomass (BGB), and soil organic carbon (SOC) stocks for both the natural and agricultural equilibria, then convert the difference to CO₂ using the stoichiometric factor \(44/12\).
Annual regrowth (:math:`R_i`) – the ongoing sequestration potential when land is spared or allowed to regrow. Regrowth is only applied where forest cover is present in the baseline land-cover map.
Managed flux (:math:`M_{i,u}`) – ongoing emissions from managed systems (e.g., peat oxidation, continuous tillage). The current implementation sets \(M_{i,u} = 0\) everywhere as a simplifying assumption.
The per-hectare land-use change factor (LEF) combines these components over the planning horizon \(H\) (years) configured in config/default.yaml
:
LEFs are computed for three uses (cropland
, pasture
, spared
). Cropland and pasture incur positive costs when they release carbon; spared land yields negative LEFs because regrowth produces a CO₂ sink. Area-weighted aggregation over resource classes produces region-level coefficients that the optimisation layer consumes.
Input datasets¶
The LUC pipeline harmonises several global datasets to the common grid:
Land cover fractions and forest masks from Copernicus ESA CCI land cover (Copernicus Satellite Land Cover)
Above-ground biomass from ESA Biomass CCI v6.0 (ESA Biomass CCI — Global Above-Ground Biomass)
Soil organic carbon stocks (0–30 cm) from ISRIC SoilGrids 2.0 (ISRIC SoilGrids — Global Soil Organic Carbon Stock), scaled to 1 m depth using IPCC Tier 1 factors
Natural forest regrowth rates from Cook-Patton & Griscom (2020) (Cook-Patton & Griscom — Forest Carbon Accumulation Potential)
IPCC Tier 1 below-ground biomass ratios, soil depletion factors, and agricultural equilibrium assumptions stored in
data/luc_zone_parameters.csv
These layers are reprojected, resampled, and combined by dedicated Snakemake rules to produce per-cell biomass/SOC stocks, forest masks, and regrowth rates ready for downstream processing. Figure Land-use change input layers harmonised to the modelling grid: forest fraction (Copernicus CCI), above-ground biomass (ESA Biomass CCI v6.0), soil organic carbon 0–30 cm (SoilGrids 2.0), and natural forest regrowth potential (Cook-Patton & Griscom, 2020). summarises the harmonised rasters on the common model grid.

Land-use change input layers harmonised to the modelling grid: forest fraction (Copernicus CCI), above-ground biomass (ESA Biomass CCI v6.0), soil organic carbon 0–30 cm (SoilGrids 2.0), and natural forest regrowth potential (Cook-Patton & Griscom, 2020).¶
Model integration¶
The land-use change workflow consists of two scripts:
prepare_luc_inputs.py
aligns the raw rasters to the resource-class grid and stores intermediate masks and carbon pools underprocessing/{config}/luc/
.build_luc_carbon_coefficients.py
derives pulse emissions, annual LEFs, and aggregates them toluc_carbon_coefficients.csv
.
During model construction, build_model.py
loads these coefficients, converts the LEFs to marginal CO₂ flows (MtCO₂ per Mha-year), and attaches them to:
Crop production links (cropland LEFs)
Grazing links that supply ruminant feed (pasture LEFs)
Spared-land allocation links that credit regrowth sinks (filtered by current biomass—see below)
All flows connect to a single global co2
bus. A flexible CO₂ store with marginal cost equal to the carbon price (emissions.ghg_price
) accumulates the net balance, so positive flows are penalised while negative flows earn credits. This approach keeps LUC accounting endogenous to the optimisation problem while leveraging a consistent carbon price alongside other greenhouse-gas sources. The spatial pattern of the resulting LEFs is shown in Annualised land-use change emission factors (LEFs) used in the optimisation. Warm colors indicate positive emissions costs (CO₂ release), while cool colors represent sequestration credits..
Spared land filtering¶
Regrowth sequestration rates from Cook-Patton et al. (2020) represent young regenerating forest (0-30 years) on previously cleared or degraded land. They do not apply to mature forests, which have already accumulated most of their carbon stock and exhibit near-zero net sequestration.
To avoid incorrectly crediting sequestration on mature forest, the LEF calculation for spared land includes a conditional that sets the sequestration benefit to zero where current above-ground biomass (AGB) exceeds a configurable threshold (luc.spared_land_agb_threshold_tc_per_ha
, default 20 tC/ha). Specifically:
This ensures:
Low-biomass areas (recently cleared or degraded land suitable for agriculture) receive negative LEFs (sequestration credits) if left unused
High-biomass areas (mature tropical rainforest, boreal forest) receive zero spared-land LEF—their carbon value is already captured via high pulse emissions if converted, but they are not credited for additional regrowth
The threshold of 20 tC/ha is intermediate between typical agricultural land (0-10 tC/ha) and mature forest (50-200+ tC/ha). Areas above this threshold are assumed to represent established vegetation that would not exhibit the rapid early-successional regrowth rates quantified by Cook-Patton et al.

Annualised land-use change emission factors (LEFs) used in the optimisation. Warm colors indicate positive emissions costs (CO₂ release), while cool colors represent sequestration credits.¶
Limitations and assumptions¶
The current implementation makes several simplifying assumptions that should be considered when interpreting results:
Climatic zones: Zones (tropical, temperate, boreal) are assigned by latitude only (tropical: \(\lvert \phi \rvert < 23.5^\circ\), boreal: \(\lvert \phi \rvert \ge 50^\circ\), temperate: otherwise). This does not account for altitude effects (e.g., highland tropics behave more like temperate zones) or local climate variations. A future enhancement would use actual biome or Köppen-Geiger climate classifications.
Agricultural biomass stocks: Cropland and pasture equilibrium above-ground biomass is assumed to be negligible (0 tC/ha) for annual crops. This is a conservative assumption appropriate for grain crops where biomass is harvested annually, but underestimates carbon storage in perennial crops (orchards, oil palm, coffee) and improved pastures. See
data/luc_zone_parameters.csv
for the zone-specific parameters.Forest mask threshold: Regrowth sequestration is only applied to cells with ≥20% forest cover in the baseline land cover map. This threshold can be adjusted via
config['luc']['forest_fraction_threshold']
(default: 0.2). The choice of 20% is intermediate between FAO’s forest definition (≥10% tree cover) and stricter definitions (≥30%).Soil organic carbon depth: SOC stocks in the 0-30 cm layer (from SoilGrids) are scaled to 1 m depth using zone-specific factors from
data/luc_zone_parameters.csv
. TODO: These factors require verification against IPCC 2006/2019 Guidelines Volume 4 Chapter 2 to ensure they match the intended Tier 1 methodology.Managed flux: Set to zero everywhere (\(M_{i,u} = 0\)), meaning ongoing emissions from agricultural management (e.g., peat oxidation, tillage-induced decomposition) are not currently modeled. Future work could incorporate organic soil maps and management-specific emission factors.
Nitrogen Pollution¶
Fertilizer application causes nitrogen pollution via:
Leaching: NO₃⁻ contaminating groundwater
Runoff: Eutrophication of rivers/lakes
Volatilization: NH₃ → N₂O emissions
Global Fertilizer Limit¶
To prevent excessive pollution:
primary:
land:
regional_limit: 0.7 # fraction of each region's potential cropland that is made available.
fertilizer:
limit: 2e11 # kg (200 Mt total NPK - realistic global scale; converted to Mt inside the model)
# High-input agriculture N application rates (percentile of global FUBC data)
n_percentile: 80 # Use 80th percentile for high-input systems (range: 0-100)
synthetic_n2o_factor: 0.010 # kg N2O-N per kg N input (IPCC 2019 Refinement, Table 11.1 aggregated default)
This caps total nitrogen-phosphorus-potassium application globally, forcing efficient use.
Nitrogen Use Efficiency (NUE)¶
Crop-specific fertilizer requirements (in data/crops.csv
) implicitly include NUE (currently mock data). More efficient crops (legumes, which fix nitrogen) require less fertilizer.