Draw or upload an area
Use the polygon tool on the map (top-left), or upload a shapefile (.zip) / GeoJSON below. No size limit — larger areas simply take longer to solve.
Off by default — areas outside Pakistan won't fetch external elevation data unless you check this.
National rainfall hotspots (discovery)
Don't know where to look yet? Real, per-grid-cell (never averaged) extreme-rainfall records nationwide (ERA5-Land/IMERG, 1980-2026) -- the highest individually-recorded cells for a chosen metric, each with its real tehsil. No AOI needed to browse this.
River basins (HydroSHEDS discovery)
Don't know exactly where to draw yet? Real HydroSHEDS Level 08 basin polygons (1,131 nationwide) -- browse by region, ranked by real drainage area, and use any one directly as your AOI. No hand-tracing needed. No real human-readable basin names exist in this dataset (unlike tehsils) -- basins are identified by their real HYBAS_ID and area only.
Rainfall
Draw or upload an area above first.
Live Monitoring
Watches a saved area's real Open-Meteo forecast on a schedule and automatically runs the real Tier 3 physics model when forecasted rain crosses your threshold -- the same real logic as "Run flood model on the real forecast" above, just checked periodically instead of on a click. Only runs while this server process is alive (no persistent OS-level cron on this shared machine) -- resumes automatically from its own saved state after a restart, doesn't lose watched areas, but has a real gap in coverage during any restart. A webhook alert includes a clickable report link only if the server has a real public URL configured (PUBLIC_BASE_URL in .env, e.g. an ngrok forwarding URL) -- otherwise just the run id, since a localhost link would be broken for anyone else reading the alert.
No areas currently watched.
Tier 2 · Instant flood preview (HAND)
HAND (Height Above Nearest Drainage) + a synthetic rating curve give a near-instant, approximate flood extent for a given discharge -- see global-flood-prediction-research.md's Tier 2. This is a fast approximation, not a replacement for the real physics run in Tier 3.
Drag the slider for an instant estimate (interpolated from a precomputed discharge library, no server call) -- click Preview below to fetch the real map overlay for the exact value.
Storm
Auto-fill from a real return-period design storm (CMIP6, local data)
Real Gumbel fit to real CMIP6-historical (bias-corrected) annual-max daily rainfall at this AOI, ensemble across several models -- see climate_utils.py. Fills in a 24-hour design storm; edit Duration above afterward if you want it compressed into a shorter storm (same real total depth, just spread faster).
Or use a real recorded IDF curve instead (ERA5-Land/IMERG, local data)
Real recorded intensity-duration curve at this AOI's own nearest grid cell -- ERA5-Land (1980-2026, ~9km) for 6-24h, real GPM IMERG V07 (2000-2026, ~11km) for 30min-3h (IMERG resolves short-duration convective intensity better). These are the real recorded maxima at this location, not a statistical fit like the CMIP6 option above.
Or upload real rainfall data instead (CSV, e.g. a rain-gauge network export)
Upload a real observed/forecast rainfall time series instead of entering Peak rainfall/Duration manually. Expects one row per time interval, with a timestamp column, a per-interval rainfall (mm) column, and either a station/location text column or real lat/lon columns. If the file has multiple stations, the one nearest this AOI's own centroid is used automatically -- station location text is geocoded (Mapbox), so real lat/lon columns are more precise when you have them.
Advanced solver parameters (optional -- sensible defaults used if left as-is)
Per-cell friction is determined automatically from real land cover as the model runs (forest, cropland, built-up, water, etc. each get their own roughness) -- this is only the fallback value for cells with no land-cover data.
Uses a real area-weighted average from real soil texture data, not per-cell (see tooltip).
More physically complete than the option above: uses this run's own real AMC value as a genuine moisture deficit, not just soil texture (see tooltip).
Boundary conditions: inflows & outflows
Real rivers/streams/GLOFs can enter or leave the domain from ANY point around its full boundary (not just one of 4 cardinal edges) -- each is resolved to its nearest real edge+position automatically. Multiple inflows and outflows are supported at once. "Detect automatically" finds every real waterway crossing your drawn AOI (via OSM), classifies each as inflow/outflow from its own real digitized flow direction, and auto-fills a real discharge estimate (Open-Meteo Flood API / GloFAS) for each inflow -- used automatically unless you edit or remove it below.
GLOF scenario (Gilgit-Baltistan glacial lakes)
A GLOF (Glacial Lake Outburst Flood) is just a sharply-peaked version of the fluvial inflow above -- this fills in Peak inflow / Duration from a real lake volume via a published breach-discharge formula, and shapes the hydrograph to rise fast and recede slowly like a real GLOF (not the symmetric shape used for an ordinary river flood).
Froehlich (1995) needs a real breach height as well as volume -- estimates the peak BREACH discharge once a breach forms; it does not separately model the landslide's own impulse wave/run-up into the lake.
Real HydroLAKES (Messager et al. 2016) lakes near this AOI's own centroid, with a real reported volume -- broader real coverage than the curated preset above, but not individually validated against a documented GLOF event. Newly-formed lakes (e.g. Shishper, formed 2018) won't appear here -- HydroLAKES is a static, older snapshot; use the curated preset for those.
The 2024 PMD inventory (3,378 lakes, northern Pakistan) with each lake's dam type, glacier relation and nearest village. It has no volume, so volume comes from the Huggel et al. (2002) area relation (order-of-magnitude uncertain). Very new lakes (Shishper formed 2018) are not in it — use the curated preset for those.
Real recorded events (HMAGLOFDB) within 100 km of the drawn area. Use one as a scenario where it reports a discharge or volume.
Dam spillway release (real historical event)
Real, documented dam spillway opening/release events (Mangla, Tarbela -- real cited news sources: Dawn, Express Tribune, Business Recorder, ProPakistani). Adds the real historical outflow as an inflow sited at that dam's own real location -- a genuine recorded discharge, not a formula estimate.
Dam failure scenario (what if a real dam breached)
Pick any real dam from the supplied Global Dam Watch data -- its real stored volume and real height (or, where the dataset has none, a height estimated from reservoir depth and shown as a low/central/high RANGE) feed the Froehlich (1995) breach formula. Adds the failure flood as an inflow at the dam. Dams with no usable capacity data are not offered.
Snowmelt contribution (SRM, real temperature + elevation)
Real Snowmelt Runoff Model (SRM)-style degree-day melt: real current temperature (Open-Meteo) at this AOI, lapse-rate-adjusted colder at higher real elevation (from this AOI's own DEM), melting any real elevation band at or above the snow line you set below. A real, stated simplification: no per-cell snow-covered-area product is used -- the snow line is a simple cutoff, not a true seasonal depletion curve.
Snow & glacier melt model (distributed, ERA5 reanalysis, whole basin)
Treats the drawn area as ONE basin (draw or pick a whole basin, outlet at its lowest point). Daily model of snow, glacier ice, soil and lake storage driven by local hourly ERA5; start the period in the previous autumn so the snowpack builds up. Seasonal flow, not an outburst peak. Takes 1-3 minutes, cached after.
The defaults are generic and these factors do not carry over between basins. Use “Calibrate” to fit them to GloFAS for this basin and check them on a different year.
Geomorphology (bedrock lithology & landslide susceptibility)
Real bedrock rock-type data (GLiM, Hartmann & Moosdorf 2012) for this AOI -- some rock types break apart/erode far more easily than others, which matters for landslide-dam formation and the "landslide / rock-ice avalanche" GLOF trigger above. Combines this AOI's own real rock-type erodibility with its own real DEM slope into a simple, real susceptibility rating -- a deliberately simplified two-factor estimate, not a full field-surveyed landslide hazard assessment.
Glacier monitoring (SAR, Pakistan only)
Real SAR-based glacier boundary + surface-displacement monitoring (GLIMS baseline + Sentinel-1 offset-tracking via Google Earth Engine) -- direct context for whether a glacier above a lake is actively moving/growing, informing whether a GLOF scenario above is worth running. Scoped to Pakistan only. Draw your AOI around the glacier itself (not just the downstream village). Real ascending+descending-combined, stable-ground-bias-corrected offset-tracking (see glacier_monitoring_utils.py) -- roughly double the wall-clock time of a single-orbit run.
Recent glacier speed — NASA ITS_LIVE (no login). Compares the last 45 days of Sentinel-2/Landsat feature-tracking pairs with the same weeks of the previous two years over the glaciers inside your AOI. Needs no Earth Engine account; downloads a few granules on first use (one to three minutes). A speed-up is a possible warning sign, not proof an outburst is coming.
Storm centering & Areal Reduction Factor
Converts the peak rainfall above from a POINT design depth to the correct AREA-AVERAGE depth for this AOI's own real area -- point rainfall applied uniformly over an area otherwise overstates the true areal total.
Rain is concentrated near a chosen center point and decays exponentially outward (real total storm volume unchanged) -- uses LISFLOOD-FP's own per-cell, per-timestep NetCDF rainfall mechanism, GPU-consumed. Needs a real, separately-built NetCDF-enabled solver binary; falls back to uniform rainfall if that's unavailable.
A small LSTM trained on real NASA IMERG-derived Pakistan monsoon storm-centroid tracks (2021-2023) predicts how fast and which direction this storm center is likely moving, from real recent precipitation near it -- the rain field then moves over the course of the run instead of staying fixed. Falls back to a static (non-moving) center if no real recent rain is detected nearby. Honest limitation: held-out test-day accuracy is real but modest (~41 km/30min mean error vs. a ~44 km zero-motion baseline) -- see storm_motion_lstm.py.
Only meaningful with at least one real inflow above -- see tooltip.
Flood model status
Draw/upload an area and run the model above first.
Batch return-period runs
Runs the real physics model once per selected return period (real CMIP6/Gumbel design storm each time, same as "Fetch real design storm" above), sequentially -- producing a real flood-risk comparison across return periods instead of one at a time. Reuses this panel's other settings (friction, buildings, etc.) for every run.
Average Annual Loss (AAL)
The standard catastrophe-risk summary metric -- a real trapezoidal integration of estimated building loss (PKR) against annual exceedance probability across the return periods checked above. A SEPARATE, explicit action from the batch panel above: it re-runs the real physics once per checked return period (with buildings enabled, needed for a real loss figure), which takes real time -- nothing here runs automatically.
Compare two runs
Real cell-by-cell comparison of two finished runs (e.g. two different storm/friction/AMC values on the same drawn area, or two return periods from the batch above) -- only valid for two runs sharing the exact same AOI/grid, not two different AOIs.
Buildings & infrastructure risk
Run the flood model first.
Damage & hotspots
Real depth-damage curves (Huizinga et al. 2017, JRC, Asia region) by real ESA WorldCover land use, plus real Getis-Ord Gi* statistical hotspot clustering on the resulting damage surface.
Run the flood model first.
Sediment transport risk
Real bedload transport-capacity (Meyer-Peter & Muller 1948) computed from the solver's own per-timestep depth+velocity output -- where flow was strong enough to actively move bed material. LISFLOOD-FP itself has no sediment capability, and CAESAR-Lisflood (the real published model that adds one) is a separate CPU-only model built for multi-storm/geomorphic timescales, not this app's single-event runs -- so this is a real erosion/deposition RISK indicator only, not full morphodynamics (terrain doesn't actually change).
Area-weighted mean grain size derived from real SoilGrids sand/clay texture for this AOI (floodplain texture, used as a real proxy for channel bed material -- see the panel note above).
Run the flood model first.
Nature-based solution scenario
Tests a real land-cover change across the whole AOI (e.g. "what if this area were reforested?") -- real per-cell Manning's friction change + a real area-weighted mean infiltration change, re-run through the exact same physics as the baseline run above, then compared cell-by-cell. Requires the flood model to have finished running above first.
Or let the app find the best real option automatically -- evaluates ALL 6 real (intervention, pathway) combinations with a real re-run each (a small, discrete option space, no search algorithm needed), ranked by the same real reduction/displacement trade-off.
Protection scenario (grey infrastructure)
Draw a dam/embankment, barrage, diversion canal, drainage pipe, or rainwater catchment/retention basin as a line on the map (line-draw tool, top-left) -- each is buffered into a real corridor and burned into the baseline run's own conditioned DEM (raised for a dam/barrage, lowered for a canal/drainage trench or catchment basin), then re-run through the exact same real physics as the baseline. A catchment basin is a real dug depression: the physics genuinely fills it first and only spills over once full, the same way a real detention pond behaves -- this models flood-reduction/storage, not water harvested for later reuse (irrigation, supply), which this app has no way to represent. Requires the flood model to have finished running above first. Protection is not free: displacement (water routed elsewhere) is reported, not hidden.
Draw a line on the map (line tool, top-left) to add a structure.
Or search for the best placement automatically -- a real mystic (differential evolution) search, each candidate scored by a REAL LISFLOOD-FP re-run (no surrogate), not a guess.
Coastal / tidal flood (static inundation)
Real published Karachi tide-gauge return-period total water levels (Khan et al. 2020, Entropy) applied as a static, connectivity-based inundation over this AOI's real terrain -- not a dynamic storm-surge model (see coastal_utils.py). Only meaningful for AOIs on Pakistan's Sindh/Balochistan coast.
Adds real near-term significant wave height/period run-up on top of the still-water level, using this AOI's own DEM-estimated foreshore slope where possible (falls back to a documented typical tidal-flat slope otherwise). Uses TODAY's real wave forecast, not necessarily the sea state of the specific historical/return-period event above.
Water-level explorer (instant)
Drag to see flooded area and depth at any still-water level from 0 to 8 m with no server round-trip (precomputed every 0.25 m for this AOI). Reference return levels of both sources are listed so you can see where each one lands.
Set an area on the coast to load this.
Coastal susceptibility map
A screening index (not a flood simulation): lower, flatter ground close to the sea with little mangrove buffer scores higher. Five classes with areas, shown on the map and as a downloadable static map.
Fast animated preview (approximate)
Sits between the static snapshot above and the real physics run below: builds the same real GTSR episode-shaped water-level time series the dynamic run uses, but applies the fast static bathtub method independently at each frame instead of running the real solver -- no flow routing/momentum between frames, but instant instead of real minutes. Look at this first; run the real dynamic surge below for genuine physics.
Real dynamic surge (GTSR, experimental)
Additive to the static method above -- a genuine LISFLOOD-FP physics run driven by a real time-varying water-level (HVAR) boundary, built from a real GTSR (Global Tide and Surge Reanalysis) historical storm episode's own rise/peak/recede shape at the nearest real station to this AOI, magnitude-anchored to either that station's own recorded peak or the static method's published return-period level above. Runs on CPU (a real, directly-verified LISFLOOD-FP CUDA bug silently zeroes this kind of boundary on the GPU build) with a conservative small timestep needed for boundary-driven stability -- real minutes for a short window, real HOURS for a longer one, not seconds. This is a real (async, backgrounded) physics run, not an instant preview.
Adds the tide predicted hour by hour from the real Karachi Port tide-gauge record (2007-2016, harmonic fit; checked on two unseen years, error 0.12 m) to the real surge episode, instead of a flat tidal range. Karachi's tide is used for the whole coast, an approximation: the range is smaller toward Gwadar. With the static anchor the highest total level still equals the return-period level; the tide only changes when it happens.
Only applies to the GTSR anchor mode above (which excludes tide) -- added as a conservative surge-at-high-tide assumption, not a true tide-surge interaction. The static total-water-level anchor already includes tide.
Same real run-up calculation as the static method above, added on top of the anchor peak before the real GTSR episode shape is built -- riding atop the peak surge moment, not modeled as time-varying with the tide/surge curve itself.
Off by default -- a coastal-only run (unchanged). When on, real rainfall is applied THROUGH THE SAME physics run while this HVAR boundary holds the outlet at the real elevated ocean level, so any real backwater (rain/runoff held back and re-flooding upstream because the sea is already high) shows up because the actual shallow-water physics produces it, not a separate approximation. Otherwise (this box unchecked, or a plain Tier 3 run near the coast), the domain's outlet is a plain free-draining boundary with no real ocean-level awareness at all.