Skip to main content

Java - Maize: the second crop

Rice in the wet season, maize after it on the same field, 32 years in East Java as one DSSAT crop sequence: what the rice leaves to the maize, and what two crops a year do to the soil

Setup
Area 111.4-112.4 E, 8.0-7.0 S, East Java, on the rice fields of MapSPAM 2020 (International Food Policy Research Institute (IFPRI) 2024)
Crop map, for comparison GFSAD LGRIP30 cropland (30 m, nominal 2015), all or irrigated only: the same simulated cells, weighted by its cropland instead (the switch under the map)
Weather, soil AgERA5 1990-2024 (Copernicus Climate Change Service 2019); SoilGrids 2.0 (Poggio et al. 2021), one profile per 0.1° cell
The sequence one DSSAT crop sequence per cell (mode Q, template XDRM8601.SQX): IR 58 rice, 140 kg N/ha, transplanted on 15 November, then McCurdy 84aa maize, 120 kg N/ha, rainfed, sown on 15 March; the soil’s water, nitrogen and organic matter pass from crop to crop. Two sequences: flooded rice, or rainfed rice behind a bund
The comparison the same maize alone (template XDMZ8201.MZX), on the same cells and dates, each season starting from the soil profile at half its plant-available water
Years 32 cycles, rice of 1991-2022 and maize of 1992-2023
Boundaries the Java case’s province and district boundaries (BPS codes; see Data, AOI, variety)
Experiment files configs/cases/java-maize.yml, java-maize-alone.yml

Where

The model runs on the 0.1° weather cells; every average and total on this page weights each cell by the crop area inside it, not by the area of the cell. Which map gives that area is a choice. The switch below sets it for every chart that weights by area: the rice fields of MapSPAM 2020 (the runs’ own crop mask), or the cropland of LGRIP30, all or irrigated only, for comparison. The simulated cells and their yields stay the same.

Two crops, one field

A single season, as DSSAT is usually run, starts from a soil the modeller describes: so much water, so much nitrogen. A crop sequence starts only once. Every later crop inherits the soil the one before it left. DSSAT does not carry the standing water: it sets the flood to zero at the start of every season (Paddy_Mgmt.for, DSSAT-CSM 4.8). What carries is the soil itself.

The switch below picks the rice before the maize, for every chart on the page.

The rice as insurance

What the sequence remembers

Cell by cell

Checked against district statistics

The Ministry of Agriculture’s statistics portal (BDSP) gives every district’s maize harvested area, production and yield each year (Kementerian Pertanian Republik Indonesia 2026), as it does for the rice of the main case study. Every weather cell goes to the district that holds its centre.

What this does not say

  • Simulated, not observed. Why the simulated yields differ from official statistics, in every case study: FAQ.
  • Uncalibrated, and borrowed cultivars. IR 58 comes from the IRRI experiment behind the rice template and McCurdy 84aa from the Florida experiment behind the maize template, with DSSAT’s own coefficients and without pests, diseases or weeds. Neither is an East Javan variety.
  • Fixed dates. The rice is transplanted on 15 November and the maize sown on 15 March in every cell and year, whatever the rain or the rice harvest; farmers decide each season.
  • The comparison’s starting point. “Maize alone” starts at half the soil’s available water, an assumption. Another starting point would move its yield, and so the gain; the sequence needs no such assumption.
  • The soil’s slow change depends on what the template returns to the field after each harvest and on the SoilGrids organic carbon the run starts from; it is the model’s trend, not a measured one.

Run it yourself

python scripts/prepare_weather.py   --config configs/cases/java-maize.yml
python scripts/prepare_crop_mask.py --config configs/cases/java-maize.yml
python scripts/prepare_soils.py     --config configs/cases/java-maize.yml --aoi java_maize_case
python scripts/run_aoi.py --config configs/cases/java-maize.yml --regime irrigated
python scripts/run_aoi.py --config configs/cases/java-maize.yml --regime rainfed
python scripts/run_aoi.py --config configs/cases/java-maize-alone.yml
python scripts/fetch_bdsp.py --komoditas JAGUNG --prov 33 35        # district maize statistics
python docs/scripts/export_cases.py javamaize
python docs/scripts/export_boundaries.py javamaize
Back to top

References

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.
Kementerian Pertanian Republik Indonesia. 2026. Basis Data Statistik Pertanian (BDSP): Lokasi, Jagung, Luas Panen, Produksi, Produktivitas. https://bdsp2.pertanian.go.id/bdsp/id/lokasi.
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.