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:
integrator.pymengontrol error denganabs()terhadap error term RKF45, padahal Fortran RRI memakai signedmaxval(RRI.f90:718).engine.pytidak meneruskanon_floor_recompute=Trueke river integrator, sehingga langkah RRI-specific flux-recompute terlewat.Perbaikan keduanya menurunkan error
qrjam 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
dhsangat kecil ~0.00001–0.0002 pada spacing 460–650m pada reach paling terdampak). Karenaqrbergantung padasqrt(dh), beda kedalaman air simulasi yang sangat kecil di reach datar memunculkan swing relatif besar padaqr.Kesimpulan praktis: Output
hs/hrdapat dipercaya untuk seluruh event;qrpada 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):
| Modul | Status | Tervalidasi terhadap |
|---|---|---|
| Slope + routing diffusive/kinematic-wave, integrator RKF45 | ⚠️ Terverifikasi sebagian | Depth 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 sebagian | hs/hr cocok presisi di seluruh 264 jam; catatan dasar datar untuk qr tetap berlaku |
| Groundwater tank, evapotranspiration | ✅ Selesai | Belum terverifikasi — tidak ada proyek lokal yang menggunakan |
| Multi-class land-use, file geometri sungai eksplisit | ✅ Selesai | Jaringan aliran RRI + parameter sintetik |
| Rating-curve cross-sections | ✅ Selesai | Belum terverifikasi — hanya uji sintetik |
| Boundary conditions (water-level / discharge) | ✅ Selesai | Belum terverifikasi — hanya uji sintetik |
| Dam operation, diversion channels | ✅ Selesai | Belum terverifikasi — hanya uji sintetik |
Ekspor GeoTIFF / PNG / KML (vflood-export) | ✅ Selesai | Kemampuan baru — RRI asli tidak memproduksi GeoTIFF; dicek langsung |
Import GeoTIFF dari GEE/HEC-GeoHMS (vflood-import), termasuk multi-band stack rainfall | ✅ Selesai | Round-trip + pengecekan konvensi format rain.dat |
Generate skrip GEE (vflood-gee) termasuk pilihan sumber DEM + multi-band IMERG | ✅ Selesai | Dataset IDs/band names tervalidasi via Earth Engine public catalog |
VFloodPrep desktop GUI (vflood-prep) | ✅ Selesai | Kemampuan baru — diuji end-to-end pada DEM sintetik + stack GeoTIFF hujan |
Validasi pra-run (validate.py) | ✅ Selesai | Diuji dengan proyek nyata yang disengajakan rusak |
cli.run_project | ✅ Selesai | Output byte-for-byte (sesuai format .out yang punya presisi 5-desimal) |
VFloodControl desktop GUI (vflood-control) | ✅ Selesai | Diuji end-to-end di proyek nyata |
| Orkestrasi pipeline VFloodControl | ✅ Selesai | Uji end-to-end: embedded VFloodPrep callback + Export/NetCDF/Analyze chaining |
Picker DAS Indonesia (basin_atlas.py) | ✅ Selesai | Load dan filter data catchment nyata + uji sorting |
Picker event banjir (disaster_events.py) | ✅ Selesai | Read dataset disasterLab nyata + filter casualty-only + uji window tanggal |
| NetCDF export + plot basin-atlas | ✅ Selesai | Dimensi/ordering/masking dicek |
Turunan terrain lokal (vflood-import terrain, pysheds) | ✅ Selesai | Uji konservasi pada DEM sintetis saja |
Import curah hujan NetCDF satelit (vflood-import rain-netcdf) | ✅ Selesai | Uji round-trip sintetis |
| Import VRain CSV/manifest + Thiessen weighting | ✅ Selesai | Uji terhadap schema demo VRain |
| KLHK land-cover scheme | ✅ Selesai | Belum terverifikasi terhadap tabel atribut KLHK nyata |
Post-processing (vflood-analyze) | ✅ Selesai | Moran'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) | ✅ Selesai | basin_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 | ✅ Selesai | Dicek bahwa PNG tidak kosong dan plot berjalan |
Masking DAS + penempatan checkpoint otomatis (watershed.py, Tab 2 VFloodPrep) | ✅ Selesai | Delineasi 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 | ✅ Selesai | Round-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) | ✅ Selesai | Dicek 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) | ✅ Selesai | Dicek 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) | ✅ Selesai | Dicek langsung; keduanya wrapper tipis di atas pemanggilan library/subprocess yang sudah teruji |
| Pemilih outlet interaktif ("Pick Outlet(s)..." di Tab 2 VFloodPrep) | ✅ Selesai | Dicek 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) | ✅ Selesai | Dicek 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) | ✅ Selesai | domain_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) | ✅ Selesai | Bug 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 | ✅ Selesai | Uji render nyata dan inspeksi visual |
| Output flux directional (qu/qv/gu/gv) | ✅ Selesai | Dicek terhadap rumus port |
| Velocity derived + vector map | ✅ Selesai | Uji angka kecil + inspeksi render |
| Numba JIT acceleration | ❌ Belum dimulai | Saat ini masih NumPy |
| Resume berbasis file initial conditions | ✅ Selesai | Port clamp+masking RRI.f90, dicek against reference |
DEM-anchored grid alignment (grid_align.py) | ✅ Selesai | Dicek resample nearest/bilinear |
One-call DEM-anchored project scaffolding (vflood-import init), termasuk --dem-aggregate-factor untuk resolusi running/output | ✅ Selesai | Diuji 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.