Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 16 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,22 @@ introduce breaking changes to configuration and outputs.

### Added

- Multiple cropping is now anchored to an observed baseline derived from
MIRCA-OS v2 (new automated data source), using the available 2010, 2015, or
2020 release nearest `baseline_year`. A fixed, documented sequence catalog
replaces dynamic combination discovery. Config entries may disable catalog
sequences or add zero-baseline greenfield potential under a new name.
Irrigated and rainfed observations are attributed separately, competing
rotations share crop-area budgets, and outputs are derived per config so the
spatial and climate inputs cannot be mixed between runs.
`crop_production_multi` links participate in the land deviation penalty, crop
growth cap, cost calibration, and validation-mode pinning like single-crop
links. Harvested cycles are reconciled out of the single-crop FAOSTAT
baselines so each cycle is counted once. A new `multi_crop_cost.csv`
calibration artefact carries per-(combination, country) bundle corrections.
The GAEZ growing-season compatibility gate is removed; observed feasibility
comes from MIRCA plus the GAEZ multiple-cropping zone.

- New `health.segment_formulation: relax_and_fix` option (now the default):
a two-pass LP scheme for the health module's non-convex dose-response
curves (solve the relaxation, pin each non-convex curve to the segment of
Expand Down
4 changes: 2 additions & 2 deletions config/calibration/cost.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@
# data/curated/calibration/grassland_cost.csv \
# data/curated/calibration/animal_cost.csv

# Shared name across all calibration configs so the expensive upstream
# processing is built once under processing/calibration/ and reused.
# ``tools/calibrate`` overrides this with a source- and step-specific name so
# another calibration config cannot overwrite this step's intermediates.
name: "calibration"

scenarios:
Expand Down
6 changes: 3 additions & 3 deletions config/calibration/feed.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -30,9 +30,8 @@
# data/curated/calibration/exogenous_forage.csv \
# data/curated/calibration/exogenous_feed.csv

# Shared name across all calibration configs so the expensive upstream
# processing (crop yields, harvested area, regions, etc.) is built once
# under processing/calibration/ and reused by each calibration step.
# ``tools/calibrate`` overrides this with a source- and step-specific name so
# another calibration config cannot overwrite this step's intermediates.
name: "calibration"

scenarios:
Expand Down Expand Up @@ -81,6 +80,7 @@ exogenous_feed_calibration:
scenario: feed_uncal

health:
enabled: false
value_per_yll: 0

emissions:
Expand Down
5 changes: 3 additions & 2 deletions config/calibration/food_demand.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -34,8 +34,8 @@
# tools/smk --configfile config/calibration/food_demand.yaml -- \
# data/curated/calibration/food_demand.csv

# Shared name across all calibration configs so the expensive upstream
# processing is built once under processing/calibration/ and reused.
# ``tools/calibrate`` overrides this with a source- and step-specific name so
# another calibration config cannot overwrite this step's intermediates.
name: "calibration"

scenarios:
Expand Down Expand Up @@ -74,6 +74,7 @@ food_demand_calibration:
scenario: "food_demand_uncal"

health:
enabled: false
value_per_yll: 0

emissions:
Expand Down
5 changes: 3 additions & 2 deletions config/calibration/food_waste.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@
# tools/smk --configfile config/calibration/food_waste.yaml -- \
# data/curated/calibration/food_waste.yaml

# Shared name across all calibration configs so the expensive upstream
# processing is built once under processing/calibration/ and reused.
# ``tools/calibrate`` overrides this with a source- and step-specific name so
# another calibration config cannot overwrite this step's intermediates.
name: "calibration"

scenarios:
Expand Down Expand Up @@ -72,6 +72,7 @@ food_loss_waste_calibration:
scenario: "food_waste_uncal"

health:
enabled: false
value_per_yll: 0

emissions:
Expand Down
5 changes: 3 additions & 2 deletions config/calibration/stability.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@
# tools/smk --configfile config/calibration/stability.yaml -- \
# data/curated/calibration/deviation_penalty.yaml

# Shared name across all calibration configs so the expensive upstream
# processing is built once under processing/calibration/ and reused.
# ``tools/calibrate`` overrides this with a source- and step-specific name so
# another calibration config cannot overwrite this step's intermediates.
name: "calibration"

planning_horizon: 2020
Expand All @@ -33,6 +33,7 @@ baseline_year: 2020
emissions:
ghg_price: 0
health:
enabled: false
value_per_yll: 0

# Block-based diminishing marginal utility for food consumption (used by main
Expand Down
29 changes: 6 additions & 23 deletions config/default.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -387,7 +387,7 @@ crops:
# land can be brought into production for them. Each entry must:
# * appear in `crops`,
# * be absent from `irrigation.irrigated_crops` (rainfed-only),
# * not appear in any `multiple_cropping` combination,
# * not appear in any curated or configured multi-cropping combination,
# * have a row in data/curated/cropgrids_crop_mapping.csv,
# enforced by workflow/validation/cropgrids_crops.py.
cropgrids_crops:
Expand Down Expand Up @@ -441,28 +441,10 @@ non_food_crops:
- biomass-sorghum

# --- section: multiple_cropping ---
multiple_cropping:
double_rice:
crops:
- wetland-rice
- wetland-rice
water_supplies:
- r
- i
rice_wheat:
crops:
- wetland-rice
- wheat
water_supplies:
- r
- i
maize_soybean:
crops:
- maize
- soybean
water_supplies:
- r
- i
# Observed systems come from the curated MIRCA-OS catalog. Set a catalog name
# to null to disable it, or add a uniquely named combination to expose
# zero-baseline greenfield potential. Catalog combinations cannot be redefined.
multiple_cropping: {}

# --- section: macronutrients ---
macronutrients: {}
Expand Down Expand Up @@ -1798,6 +1780,7 @@ cost_calibration:
generate: false # Generate calibration from solved model (breaks DAG cycle when true)
scenario: "calibration" # Scenario name used for calibration solve
crop_correction_csv: "data/curated/calibration/{calibration_source}/crop_cost.csv"
multi_crop_correction_csv: "data/curated/calibration/{calibration_source}/multi_crop_cost.csv"
grassland_correction_csv: "data/curated/calibration/{calibration_source}/grassland_cost.csv"
animal_correction_csv: "data/curated/calibration/{calibration_source}/animal_cost.csv"

Expand Down
16 changes: 12 additions & 4 deletions config/schemas/config.schema.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -698,12 +698,17 @@ properties:
type: string
water_supplies:
type: array
minItems: 2
maxItems: 3
minItems: 1
maxItems: 2
uniqueItems: true
items:
type: string
enum: [r, i]
description: "Multiple cropping systems (double cropping)"
description: |
Overrides and greenfield additions to the curated MIRCA-OS combination
catalog. Set a catalog name to null to disable it. A non-null entry must
use a new name and defines a zero-baseline combination that optimization
may develop where GAEZ indicates sufficient potential.

macronutrients:
type: object
Expand Down Expand Up @@ -1658,7 +1663,7 @@ properties:

cost_calibration:
type: object
required: [enabled, generate, scenario, crop_correction_csv, grassland_correction_csv, animal_correction_csv]
required: [enabled, generate, scenario, crop_correction_csv, multi_crop_correction_csv, grassland_correction_csv, animal_correction_csv]
additionalProperties: false
properties:
enabled:
Expand All @@ -1673,6 +1678,9 @@ properties:
crop_correction_csv:
type: string
description: "Path to crop cost calibration correction CSV"
multi_crop_correction_csv:
type: string
description: "Path to multi-cropping cost calibration correction CSV"
grassland_correction_csv:
type: string
description: "Path to grassland cost calibration correction CSV"
Expand Down
Loading
Loading