Irrigation performance
SI, CU, RI per tertiary block for a Daerah Irigasi
π English Β· Bahasa Indonesia β
The idea
The final step turns the satellite maps into operational irrigation indicators for a Daerah Irigasi (DI), computed per tertiary block (petak tersier). Three standard indices (FAO / Bos 1985) summarise how well the network delivers water:
| Index | Meaning | Question it answers |
|---|---|---|
| SI β Satisfaction Index | adequacy | Is each block getting enough water? |
| CU β Christiansen Uniformity | uniformity | Is water spread evenly across the DI? |
| RI β Reliability Index | dependability | Does each block stay adequate over time? |
We demonstrate on DI Klambu (Grobogan, Central Java; 653 tertiary blocks), whose block boundaries and reference results ship with the repository.
To stay laptop-runnable, the steps below build the water balance from Sentinel-1 (crop coefficient / Kc) plus CHIRPS rainfall and reference ET. The full operational method also fuses Sentinel-2 and Landsat optical imagery to estimate ET / Kc more accurately β that multi-sensor fusion is the production upgrade, kept out of this hands-on chapter so it remains reproducible on a laptop.
Step 1 β Crop water demand: the Kc map
Growth phase β crop coefficient (Kc) links what the satellite sees to how much water the crop needs. produce_kc_map.py estimates days-after-transplant from the VH flooding trough and maps it onto the FAO-56 rice 110-day curve (Kc 1.05 β 1.20 β 0.95 β 0).
Pass your VH stack and paddy mask with --stack / --paddy-mask. --period-band is the band index to target (it uses that band plus the 9 before it, so it needs β₯10 bands of history β with the 18-band sample, use 10β18):
python produce_kc_map.py --period-band 14 --out kc_sample \
--stack data/sample/klambu_vh_2024.tif \
--paddy-mask consensus_sample/consensus_paddy_map.tif
# β kc_sample/kc_band14.tif (Kc per active-paddy pixel)
Because the sample paddy mask is small (and built from just a few periods), the Kc map β and the indices downstream β may cover very few pixels. The steps below demonstrate the mechanics, not a representative result; use a fuller multi-year stack and more periods for meaningful output.
Step 2 β Water balance (rainfall vs demand)
The Satisfaction Index compares supply (rainfall β and, where available, gate/staff-gauge flows) against demand (Kc Γ reference evapotranspiration). The project uses CHIRPS rainfall and ET; the shipped daily series for Klambu live in 2026/irrigation_performance/ and 2026/irrigation_performance_2024_s1kc/.
Without gate-sensor data, SI is computed from active-paddy detection (a satellite proxy for adequacy). Referencing SI to actual water (gate openings) is the field-validation step planned for a later campaign β see the reports. Be explicit about which you report.
Step 3 β Compute SI / CU / RI per block
calculate_irrigation_indices.py ties it together β it reads your per-period paddy predictions and the tertiary-block boundaries (klambu.gpkg, block-id field norec), zonally aggregates the active- paddy signal, and writes the three indices per block.
python calculate_irrigation_indices.py \
--predictions-dir predictions_sample/2024 \
--periods 13 15 17 19 21 23 \
--di-boundary 2026/irrigation_performance/klambu.gpkg \
--output-dir irrigation_results/klambu_2024 \
--confidence-threshold 0.7Outputs include per-block index CSVs, a DI-level summary, and time-series/histogram quick-looks in irrigation_results/klambu_2024/.
The repository already ships reference results you can inspect immediately:
head 2026/irrigation_performance/reliability_block_results.csv
cat 2026/irrigation_performance/performance_summary.txtStep 4 β Map the indices per block
make_irrigation_maps.py renders the three choropleth panels. It reads the per-block CSVs from ./results_csv/ (a fixed location) and joins them to klambu.gpkg. The quickest way to see it is with the shipped reference results:
mkdir -p results_csv
cp 2026/irrigation_performance/uniformity_block_results.csv results_csv/
cp 2026/irrigation_performance/reliability_block_results.csv results_csv/
python make_irrigation_maps.py
# β writes 2026/figures/fig_irrigation_klambu_maps.png(To map your run instead, copy the CSVs produced in Step 3 into results_csv/ before running.)

Reading the result
For DI Klambu the full study finds:
| Index | Value | Category (FAO/Bos 1985) |
|---|---|---|
| SI | 0.83 | Very good |
| CU | 0.93 | Very good |
| RI | 0.98 | Very good |
But the operationally useful output is the spatial diagnostic: the system flags 10 problematic blocks (RI < 0.75), 7 of them at the tail-end of the tertiary network β the classic headβtail inequity. Instead of inspecting all 653 blocks, the BBWS can target those 10 β the core value proposition of a satellite approach.
A tiered scheme lets adoption start conservative and tighten over time. Tier 1: SI β₯ 0.75, CU β₯ 0.80, RI β₯ 0.70, plus cropping index β₯ 1.5.
Where to go next
You have reproduced the full chain on a sample DI. To scale up you would: process more Sentinel-1 periods and years, extend to more DIs, and β the key upgrade β add field validation to water-reference SI and calibrate the phase algorithm.
For the more accurate growth-phase product that underpins Kc, continue to Going further: S1+S2 fusion.