VFlood
Status Implementasi

10. Yang sudah diimplementasikan (dan yang belum)

⚠ Keterbatasan yang diketahui saat tulisan ini dibuat: regresi 264 jam terhadap run Fortran asli (VFLOOD_RRI_RUN_SLOW_TESTS=1 pytest tests/test_phase2_rokan.py::test_matches_reference_full_264_hours) awalnya menunjukkan bahwa debit (qr) divergen cukup besar saat puncak storm tiba.

Ada dua bug nyata yang terkonfirmasi pada adaptive integrator dan sudah diperbaiki:

  1. integrator.py mengontrol error dengan abs() terhadap error term RKF45, padahal Fortran RRI memakai signed maxval (RRI.f90:718).
  2. engine.py tidak meneruskan on_floor_recompute=True ke river integrator, sehingga langkah RRI-specific flux-recompute terlewat.

Perbaikan keduanya menurunkan error qr jam 51–53 dari 4–8% menjadi ~0%.

Mulai jam sekitar 54, divergensi yang tersisa sekarang sudah ditetapkan penyebabnya, bukan sekadar diamati: ini terkait river reaches dengan dasar yang hampir datar (bed slope-driven dh sangat kecil ~0.00001–0.0002 pada spacing 460–650m pada reach paling terdampak). Karena qr bergantung pada sqrt(dh), beda kedalaman air simulasi yang sangat kecil di reach datar memunculkan swing relatif besar pada qr.

Kesimpulan praktis: Output hs/hr dapat dipercaya untuk seluruh event; qr pada cell/cell reach yang dasar hampir datar terutama downstream/deltaic sebaiknya dianggap kurang andal untuk perbandingan titik tertentu.

Tabel status per modul (port setia dari Fortran RRI):

ModulStatusTervalidasi terhadap
Slope + routing diffusive/kinematic-wave, integrator RKF45⚠️ Terverifikasi sebagianDepth fields (hs/hr) cocok baik di seluruh 264 jam; qr divergen di reach dasar datar untuk event penuh — penyebab sudah dijelaskan di catatan peringatan
River-slope exchange, Green-Ampt infiltration⚠️ Terverifikasi sebagianhs/hr cocok presisi di seluruh 264 jam; catatan dasar datar untuk qr tetap berlaku
Groundwater tank, evapotranspiration✅ SelesaiBelum terverifikasi — tidak ada proyek lokal yang menggunakan
Multi-class land-use, file geometri sungai eksplisit✅ SelesaiJaringan aliran RRI + parameter sintetik
Rating-curve cross-sections✅ SelesaiBelum terverifikasi — hanya uji sintetik
Boundary conditions (water-level / discharge)✅ SelesaiBelum terverifikasi — hanya uji sintetik
Dam operation, diversion channels✅ SelesaiBelum terverifikasi — hanya uji sintetik
Ekspor GeoTIFF / PNG / KML (vflood-export)✅ SelesaiKemampuan baru — RRI asli tidak memproduksi GeoTIFF; dicek langsung
Import GeoTIFF dari GEE/HEC-GeoHMS (vflood-import), termasuk multi-band stack rainfall✅ SelesaiRound-trip + pengecekan konvensi format rain.dat
Generate skrip GEE (vflood-gee) termasuk pilihan sumber DEM + multi-band IMERG✅ SelesaiDataset IDs/band names tervalidasi via Earth Engine public catalog
VFloodPrep desktop GUI (vflood-prep)✅ SelesaiKemampuan baru — diuji end-to-end pada DEM sintetik + stack GeoTIFF hujan
Validasi pra-run (validate.py)✅ SelesaiDiuji dengan proyek nyata yang disengajakan rusak
cli.run_project✅ SelesaiOutput byte-for-byte (sesuai format .out yang punya presisi 5-desimal)
VFloodControl desktop GUI (vflood-control)✅ SelesaiDiuji end-to-end di proyek nyata
Orkestrasi pipeline VFloodControl✅ SelesaiUji end-to-end: embedded VFloodPrep callback + Export/NetCDF/Analyze chaining
Picker DAS Indonesia (basin_atlas.py)✅ SelesaiLoad dan filter data catchment nyata + uji sorting
Picker event banjir (disaster_events.py)✅ SelesaiRead dataset disasterLab nyata + filter casualty-only + uji window tanggal
NetCDF export + plot basin-atlas✅ SelesaiDimensi/ordering/masking dicek
Turunan terrain lokal (vflood-import terrain, pysheds)✅ SelesaiUji konservasi pada DEM sintetis saja
Import curah hujan NetCDF satelit (vflood-import rain-netcdf)✅ SelesaiUji round-trip sintetis
Import VRain CSV/manifest + Thiessen weighting✅ SelesaiUji terhadap schema demo VRain
KLHK land-cover scheme✅ SelesaiBelum terverifikasi terhadap tabel atribut KLHK nyata
Post-processing (vflood-analyze)✅ SelesaiMoran's I dan zonal stats dicek terhadap nilai textbook/
"known"
Grafik presentasi gabungan hujan/Q/kedalaman sungai/kedalaman slope, statis + animasi, 2 layout (vflood-analyze combined)✅ Selesaibasin_average_rainfall dicek terhadap mean spasial tangan per blok rain.dat; remap_rainfall_to_grid_series dicek terhadap identity remap grid identik dan pemilihan blok multi-waktu; keempat fungsi chart dicek menghasilkan PNG/GIF nyata, termasuk jumlah frame GIF persis sama dengan jumlah timestep output; didemokan end-to-end (kedua layout) pada output proyek Sesayap nyata yang masih berjalan
Hydrograph chart rendering✅ SelesaiDicek bahwa PNG tidak kosong dan plot berjalan
Masking DAS + penempatan checkpoint otomatis (watershed.py, Tab 2 VFloodPrep)✅ SelesaiDelineasi catchment dicek terhadap DEM sintetis yang seluruh gridnya provably mengalir ke satu outlet; keterbatasan nyata pysheds.grid.Grid.catchment() ditemukan dan diatasi dengan flood-fill upstream independen; deteksi outlet otomatis, penelusuran main channel (dicek mengikuti cabang yang lebih besar di confluence buatan tangan), dan penempatan checkpoint fraksional semua dicek langsung; didemokan end-to-end pada DEM Sesayap nyata — masking ke outlet dominan tunggal memangkas 124.834 sel menjadi 41.711 sel aktif
Tanggal kalender nyata (file pendamping start_date.txt) di log run, koordinat waktu NetCDF, --start KML otomatis, sumbu chart hidrograf/combined✅ SelesaiRound-trip dicek; unit time NetCDF pakai CF asli "seconds since <tanggal>" jika diketahui, fallback relatif jika tidak; tidak pernah jadi bagian RRI_Input.txt itu sendiri
Grafik preview curah hujan areal tanpa download (00_rainfall_preview.js)✅ SelesaiDicek langsung: memperlebar window, koreksi rate setengah-jam dan fix Map.setCenter sama seperti export asli, tanpa Export.image.toDrive sama sekali
Spin-up curah hujan antecedent (vflood-import init-with-spinup, Tab 2 VFloodPrep)✅ SelesaiDicek end-to-end pada run spin-up nyata: lasth/outnum spin-up pas di spinup_days*24, output-nya ada setelah dijalankan, switch init proyek event merujuk file itu persis, dan lasth proyek event hanya mencerminkan jumlah band event, tidak diperpanjang
Grafik awareness curah hujan rata-rata + tombol Combined Chart (VFloodPrep "View Rainfall Chart", VFloodControl)✅ SelesaiDicek langsung; keduanya wrapper tipis di atas pemanggilan library/subprocess yang sudah teruji
Pemilih outlet interaktif ("Pick Outlet(s)..." di Tab 2 VFloodPrep)✅ SelesaiDicek end-to-end dengan mainloop() nyata terhadap DEM sintetis: menurunkan flow network, menampilkan kandidat auto-detect nyata, mengonfirmasi lon/lat baris terpilih kembali benar
Fallback "belum ada lokasi gauge" di VFloodControl (Analyze Hydrograph/Combined Chart)✅ SelesaiDicek end-to-end pada project nyata: sudah dikonfigurasi (tidak prompt), ditolak (tidak berubah), diterima (location.txt nyata ditulis, hydro_switch berubah di memori dan disk); menemukan dan memperbaiki inkonsistensi nyata — project yang location.txt-nya sudah ada tapi hydro_switch masih 0
vflood-netcdf --plot-max/--geotiff-max (PNG/GeoTIFF frame puncak + laporan step/tanggal)✅ Selesaidomain_max_series dicek terhadap max spasial per-frame hitung tangan pada NetCDF sintetis; didemokan end-to-end pada project Sesayap nyata — berhasil mengidentifikasi qr_max=405.42 pada step 120 (2023-09-22 00:00), cocok dengan hari puncak badai yang teridentifikasi independen dari data curah hujan mentah. --geotiff-max dicek terhadap run nyata project referensi rokan15s_ — max di dalam GeoTIFF cocok persis, CRS asli dikonfirmasi, independen dari --plot-max
Pengecekan kelengkapan NetCDF VFloodControl (_netcdf_missing_variables, Analyze Hydrograph/Combined Chart)✅ SelesaiBug nyata ditemukan dan diperbaiki: write_simulation_netcdf membuka file dalam mode "w" (truncate, bukan merge), sehingga bundling dengan daftar --variables yang lebih sempit secara diam-diam menghapus variabel yang sebelumnya sudah ada di simulation.nc — file yang basi tapi masih ada lalu memicu KeyError mentah alih-alih memicu re-bundle. Kedua tombol sekarang mengecek variabel apa saja yang benar-benar ada di file, bukan sekadar apakah file itu ada, dan otomatis re-bundle set lengkap hs,hr,qr kalau ada yang hilang. Dicek dengan kasus pytest termasuk reproduksi langsung dari bug tersebut, plus diverifikasi live end-to-end pada project Sesayap nyata dengan sengaja merusak simulation.nc dan mengonfirmasi kedua tombol memperbaikinya otomatis
DEM+hillshade animasi GIF banjir✅ SelesaiUji render nyata dan inspeksi visual
Output flux directional (qu/qv/gu/gv)✅ SelesaiDicek terhadap rumus port
Velocity derived + vector map✅ SelesaiUji angka kecil + inspeksi render
Numba JIT acceleration❌ Belum dimulaiSaat ini masih NumPy
Resume berbasis file initial conditions✅ SelesaiPort clamp+masking RRI.f90, dicek against reference
DEM-anchored grid alignment (grid_align.py)✅ SelesaiDicek resample nearest/bilinear
One-call DEM-anchored project scaffolding (vflood-import init), termasuk --dem-aggregate-factor untuk resolusi running/output✅ SelesaiDiuji end-to-end: scaffold project loads dan run completion. --dem-aggregate-factor diuji terhadap DEM nyata 2154×2088 (basin Sesayap): faktor 6 memangkas 4,49 juta sel aktif menjadi 124.834

Catatan: modul yang bertanda “not verified against real RRI output” berarti fiturnya belum diuji turn-on memakai proyek nyata selama development; kebenarannya bertumpu pada bacaan source dan uji matematika secara terisolasi.