Land Use & Resource Classes¶
Overview¶
The land use module manages agricultural land allocation across the global food system. It translates high-resolution gridded data (0.05° × 0.05°, approximately 5.6 km at the equator) into optimization variables that balance:
Cropland for producing grains, oilseeds, fruits, and other crops
Pasture for grassland-based livestock feed
Spared land that can be taken out of production for carbon sequestration
The module uses a dual-pool structure that separates cropland and pasture, enabling independent control over land allocation and expansion for each use type.
Land Pool Structure¶
The model uses separate land pools for cropland and pasture, with distinct supply pathways and the option to spare land for carbon sequestration:
Land flow structure showing supply paths to cropland and pasture pools, with sparing options for carbon sequestration.¶
Cropland Pool¶
Bus pattern: land:cropland:{region}_c{class}_{water}
The cropland pool serves all crop production. Each pool is specific to a region, resource class, and water supply (rainfed or irrigated). Supply comes from:
Existing cropland baseline (green arrows): Land currently in agricultural use, available without land-use-change emissions
New land conversion (yellow arrows): Expansion onto previously non-agricultural land, incurring LUC emissions
Pasture Pool¶
Bus pattern: land:pasture:{region}_c{class}
The pasture pool serves grassland production for ruminant feed. Pasture pools are water-agnostic (no irrigated/rainfed distinction). Supply comes from:
Existing cropland: Baseline agricultural land diverted to pasture use
New land conversion: Expansion with LUC emissions
Current cropland-suitable grassland: Existing grassland on land suitable for crops (GAEZ)
Current marginal grassland: Existing grazing-only grassland that is not suitable for crops
Spared Land¶
Both existing cropland and both current grassland pools can be spared—taken out of production to earn carbon sequestration credits from vegetation regrowth:
spare_landlinks: Spare existing cropland (purple dashed arrows)spare_existing_grasslandlinks: Spare existing grassland
This enables the model to evaluate trade-offs between agricultural production and carbon sequestration. See Land Use Change for how land-use-change emissions are calculated, and Spared land regrowth for details on sequestration credit eligibility.
Validation Controls¶
For validation scenarios, new land supply can be disabled independently:
validation.disable_new_cropland: Prevents new land from supplying cropland poolsvalidation.disable_new_pasture: Prevents new land from supplying pasture poolsvalidation.disable_spared_cropland: Prevents baseline cropland from being sparedvalidation.disable_spared_grassland: Prevents existing grassland pools from being spared
This allows validating against historical production patterns without spurious land-use-change from the optimizer reallocating land.
Spatial Resolution¶
The model operates at sub-national regional resolution, balancing spatial detail with computational tractability.
Regional Clustering¶
Optimization regions are created by clustering administrative units (GADM level 1) based on spatial proximity:
Simplification: Simplify GADM geometries to reduce complexity while preserving boundaries
Country selection: Filter to configured countries (
countrieslist in config)Clustering: Aggregate administrative units using k-means clustering on centroids
Output: GeoJSON with region polygons (
processing/{name}/regions.geojson)
Global model coverage showing optimization regions created by clustering administrative units.¶
Key configuration parameters:
aggregation.regions.target_count: Number of regions to create (e.g., 400)aggregation.regions.allow_cross_border: Whether regions can span country boundaries (typicallyfalse)aggregation.simplify_tolerance_km: Geometry simplification tolerance
Resource Classes¶
Within each optimization region, agricultural land is heterogeneous—some areas have high yield potential, others low. To capture this heterogeneity without creating a separate decision variable for each gridcell, the model groups land into resource classes based on yield potential quantiles.
Concept¶
For example, with quantiles [0.25, 0.5, 0.75], each region has 4 resource classes:
Class 0: Bottom 25% of yield potential (lowest quality land)
Class 1: 25th–50th percentile
Class 2: 50th–75th percentile
Class 3: Top 25% of yield potential (highest quality land)
This stratification allows the model to:
Preferentially allocate high-value crops to high-quality land
Avoid optimistic bias from averaging yields across heterogeneous land
Capture marginal land-use decisions at the extensive margin
Resource classes are computed from GAEZ yield potentials by taking the maximum attainable yield across all crops for each gridcell, then binning into quantiles within each region.
Resource class stratification within an example region. Darker colors indicate higher productivity classes. The spatial pattern reveals how land quality varies across the landscape.¶
Land Availability¶
Land availability is constrained by suitability from GAEZ, which indicates what fraction of each gridcell is suitable for agriculture.
Suitability-Based Limits¶
GAEZ provides separate suitability rasters for rainfed and irrigated production. The aggregation process:
Load suitability fractions (0–1) for each crop and water supply
Multiply by cell area (hectares) to get suitable area
Aggregate by region, resource class, and water supply
The regional_limit parameter (e.g., 0.7) caps total usable land at a fraction of the suitable area, representing institutional, ecological, or social constraints on agricultural expansion.
Irrigated vs. Rainfed¶
The model distinguishes between irrigated and rainfed production:
- Rainfed
Uses rainfall for water supply
Available on suitable cropland not equipped for irrigation
Generally lower yields than irrigated
- Irrigated
Requires irrigation infrastructure
Only available on land equipped for irrigation (from GAEZ dataset)
Higher yields but consumes blue water (see Crop Production for water constraints)
For each region and resource class, the model maintains separate land variables for rainfed and irrigated production.
Current Grassland: Convertible vs Marginal¶
The model splits current grassland into two explicit pools within each (region, resource_class):
Cropland-suitable current grassland: Current grassland area that lies on land suitable for crop growth (GAEZ suitable)
Marginal current grassland: Current grazing-only grassland that is not suitable for crop growth
Data sources and split:
build_current_grassland_areaprovides total current grassland from ESA CCI land-cover fractionsbuild_grazing_only_landestimates the marginal (grazing-only) subsetCropland-suitable current grassland is computed as
max(current_grassland - grazing_only, 0)
Global grassland availability. Left panel: gridcell fraction that is grassland. Right panel: share of each region’s land budget in the grassland pool.¶
Both current grassland pools flow to the pasture pool via existing_grassland_to_pasture links. Both can also be spared for carbon sequestration via spare_existing_grassland links.
Only the cropland-suitable current grassland pool is subtracted from the rainfed new-land expansion potential, preventing double-counting while preserving the distinct marginal grassland pool.
This separation ensures that:
Ruminant feed has a realistic existing grassland supply without depleting cropland
Every hectare is accounted for exactly once
Sparing decisions reflect the actual opportunity cost of each land type
Land Use Change¶
When the model allocates more land to agriculture than the existing baseline, this represents land use change (LUC). The environmental impacts—primarily carbon emissions from clearing vegetation—are captured via efficiency coefficients on the conversion links.
See Environmental Impacts for details on how LUC emissions are calculated from above-ground biomass, soil organic carbon, and foregone regrowth potential.
Configuration Reference¶
Key configuration parameters for land use (in config/default.yaml):
aggregation:
regions:
target_count: 400
allow_cross_border: false
method: "kmeans"
simplify_tolerance_km: 5
simplify_min_area_km: 25
resource_class_quantiles: [0.25, 0.5, 0.75]
# Data source for determining irrigated land area when aggregating by region/resource class.
# - "current": use GAEZ "land equipped for irrigation" dataset (same area for all crops)
# - "potential": use GAEZ irrigated suitability rasters (crop-specific potential area)
irrigated_area_source: "current"
land:
regional_limit: 0.7 # fraction of each region's potential cropland that is made available.
land_use_cost_usd_per_ha: 0.0 # Small optional per-hectare land-use cost to regularize land allocation (set >0 to activate)
filtering:
min_crop_yield_t_per_ha: 0.01 # Minimum yield for crop links (t/ha); filters ~1% of entries
min_grassland_yield_t_per_ha: 0.05 # Minimum yield for grassland links (t/ha); filters ~6% of entries
min_area_ha: 100 # Minimum land area (ha); filters very small resource classes
# --- section: water ---
water:
# Water supply scenario determines which dataset is used for regional water limits:
# - "sustainable": Water Footprint Network blue water availability by basin (Hoekstra & Mekonnen 2011)
# Represents sustainable water extraction limits.
# - "current_use": Huang et al. (2018) gridded irrigation water withdrawals
# Represents actual/current agricultural water use, useful for validation.
supply_scenario: sustainable
# Reference year for Huang irrigation data (only used when supply_scenario is "current_use")
huang_reference_year: 2010
Land Slack¶
Validation runs that pin observed harvested area may encounter land-class mismatches. To maintain feasibility without globally loosening land limits, each land bus can receive a land_slack generator:
Controlled by
validation.land_slack: trueMarginal cost set by
land.slack_marginal_cost(USD per Mha)Default ~5000 USD/ha ensures slack activates only as a last resort