import {withDownload, cellFeatures, fmt, locatorMap, placeMarks, boxPolygon, maskTable, maskLabels} from "../assets/js/dl.js"
S = FileAttachment("data/luzon/summary.json").json()
B = FileAttachment("data/luzon/boundaries.json").json()
countries = FileAttachment("data/luzon/countries.geojson").json()
adm1 = FileAttachment("data/luzon/adm1.geojson").json()
adm2 = FileAttachment("data/luzon/adm2.geojson").json()
cells = FileAttachment("data/luzon/cells.csv").csv({typed: true})
bands = FileAttachment("data/luzon/bands.csv").csv({typed: true})
years = FileAttachment("data/luzon/years.csv").csv({typed: true})
SEASON = ({wet: "wet season (transplanted 1 July)", dry: "dry season (transplanted 1 December)"})
LOSS = ({domain: ["lost to heat", "lost to cold"], range: ["#d1495b", "#3c6fb4"]})
canopyTmin = t => (t - 0.87) / 0.92Luzon - Rice: from the plain to the terraces
The same flooded rice, planted from the lowlands of northern Luzon up into the Cordillera, 33 years, two seasons: what changes with height is temperature, and the model shows where heat and where cold take their share
| Setup | |
|---|---|
| Area | 120.5-121.5 E, 16.0-17.0 N, northern Luzon, from the plain into the Cordillera (regions and provinces below) |
| Crop map | MapSPAM 2020 rice, physical area (International Food Policy Research Institute (IFPRI) 2024) |
| Weather, soil, height | AgERA5 1990-2024 (Copernicus Climate Change Service 2019); SoilGrids 2.0 (Poggio et al. 2021), one profile per 0.1° cell; elevation: ETOPO1 (Amante and Eakins 2009), mean over each 0.1° cell |
| Crop, template | CERES-Rice, IR 64 (DSSAT cultivar IB0015) and IR 58 (IB0012), 105 kg N/ha; template XDRI8601.RIX, from the IRRI experiment IRMZ8601 (Muñoz, 1986); flooded everywhere, so water plays no part |
| Seasons | wet: transplanted on 1 July; dry: transplanted on 1 December; every year |
| Scenarios | the baseline; the same without cold sterility (TCLDF 0); the same without heat sterility (THOT 45). The grain each stress costs is the difference with the baseline, season by season |
| Years | 1991-2023 |
| Boundaries | edge-matched OCHA administrative boundaries (COD-AB) from HDX: Philippines (NAMRIA, PSA), CC BY-IGO |
| Experiment file | configs/cases/luzon-rice.yml |
Where
Up the slope, the crop slows down
The switches below set the cultivar and the season for every chart on the page.
Heat at the bottom, cold at the top
Cold years
The map of the two stresses
What this does not say
- Simulated, not observed. Why the simulated yields differ from official statistics, in every case study: FAQ.
- Uncalibrated. IR 64 and IR 58 run with DSSAT’s own coefficients, flooded and at 105 kg N everywhere, without pests, diseases or weeds. Their cold thresholds are DSSAT’s defaults. Varieties grown in the mountains, and their real tolerance of cold, are not in this experiment.
- Smoothed mountains. AgERA5 and the cell heights are 0.1° averages. A terrace higher than its cell’s mean is colder than the model’s weather for it.
- One date per season. Every cell transplants on 1 July and on 1 December. A crop that takes longer in the cold may not leave room for a second one; the model runs each season on its own.
- Losses are model experiments. Each loss is the yield without that stress minus the baseline, so it shows what the model’s sterility rules cost, not a measured loss.
Run it yourself
python scripts/prepare_weather.py --config configs/cases/luzon-rice.yml
python scripts/prepare_crop_mask.py --config configs/cases/luzon-rice.yml
python scripts/prepare_soils.py --config configs/cases/luzon-rice.yml --aoi luzon_rice
python scripts/run_aoi.py --config configs/cases/luzon-rice.yml
python docs/scripts/export_cases.py luzon
python docs/scripts/export_boundaries.py luzonThe export reads the prepared weather (for the temperatures before flowering) and ETOPO1 for the cell heights (etopo180 from ERDDAP, the copy used here; set its path in ETOPO in docs/scripts/export_cases.py).
References
Amante, C., and B. W. Eakins. 2009. ETOPO1 1 Arc-Minute Global Relief Model: Procedures, Data Sources and Analysis. NOAA Technical Memorandum NESDIS NGDC-24. National Oceanic and Atmospheric Administration (NOAA), National Geophysical Data Center.
Copernicus Climate Change Service. 2019. Agrometeorological Indicators from 1979 up to 2019 Derived from Reanalysis (AgERA5). ECMWF. https://doi.org/10.24381/cds.6c68c9bb.
Food and Agriculture Organization of the United Nations. 2025. FAOSTAT: Crops and Livestock Products (QCL), Yield. Via Our World in Data: maize https://ourworldindata.org/grapher/maize-yields, rice https://ourworldindata.org/grapher/rice-yields, millet https://ourworldindata.org/grapher/millet-yield, accessed 2026-11-09. https://www.fao.org/faostat/en/#data/QCL.
International Food Policy Research Institute (IFPRI). 2024. Global Spatially-Disaggregated Crop Production Statistics Data for 2020 Version 2.0 Release 2. Harvard Dataverse. https://doi.org/10.7910/DVN/SWPENT.
Poggio, Laura, Luis M. de Sousa, Niels H. Batjes, et al. 2021. “SoilGrids 2.0: Producing Soil Information for the Globe with Quantified Spatial Uncertainty.” SOIL 7 (1): 217–40. https://doi.org/10.5194/soil-7-217-2021.