2D inundation,
solved on the GPU.

Deceris Inundation is an open-source 2D shallow-water solver for polygonal meshes, implemented with Vulkan.

Model flood depth, momentum and propagation through time — then inspect exactly how the result was produced.

Full SWEfinite volumeHLLCSSP-RK2Vulkan / Kompute
benchmark output
Vulkan · GPU
EA Test 3 · momentum obstruction simulation output
Explore the model
01Hydrodynamics through time

Flooding is not an extent.

An inundation map tells you where water ended up. A hydraulic model describes how it got there.

Deceris Inundation evolves water depth and momentum over terrain through time using the two-dimensional shallow-water equations.

t 0.02 sinitial state
t 0.49 swave release
t 0.96 sradial front
t 1.50 spropagated field
hwater depth
|u|velocity
tₐarrival time
Ωinundation extent
02How it works

A finite-volume solver on polygonal meshes.

Geometry is prepared in Python. The numerical state is advanced on the GPU through HLLC fluxes, SSP-RK2 integration and CFL-controlled timesteps.

computational fieldcell view · 12.5 m
point source2.0 m³/shhuhvqLqRF HLLCGPU workgroups · edge dispatch
geometryMesh the terrainstage 1 / 4
Mesh inputs
GPKGSHPGeoParquetParquetOBJ
polygonal cells · optional bed elevation
03 Architecture

Why Vulkan?

GPU compute is part of the solver architecture, not an optimisation added after the numerical model.

Deceris Inundation uses Vulkan through Kompute to keep the computational core separate from a vendor-specific compute API.

MoltenVK supports development and correctness work on macOS.
workflowPython API
dispatchKompute
computeVulkan
LinuxNVIDIA GPU
macOSMoltenVK
04Validation

Evidence before claims.

Numerical software should be judged against problems with known or independently published behaviour.

Deceris Inundation is tested against analytical solutions and published Environment Agency / Heriot-Watt 2D hydraulic benchmark cases.

6validation suites
Analytical dam-break animated solver result
solver output
Analytical dam-break

Can the scheme reproduce a known solution?

The one-dimensional wet-bed dam-break compares numerical depth directly with the closed-form Stoker solution.

L1 error 0.0077acceptance gate 0.05
Animated longitudinal profile of EA Test 3 showing the flood wave crossing the obstruction into the second basin
solver output
EA Test 3 · longitudinal side view

Watch momentum carry the surge across the crest.

The profile exposes the mechanism hidden in plan view: a fast bore descends the 1:200 slope, nearly fills the first depression, crosses the obstruction through conserved momentum, and leaves a disconnected pond in the second basin.

Bed elevation and water-surface profile along the domain centreline.

point 2 rise 0.047 mstill-water control 0.000 m
EA Test 3 · momentum obstruction animated solver result
solver output
EA Test 3 · momentum obstruction

Does momentum carry water over the crest?

The incoming wave nearly fills the first depression. Conserved momentum carries part of the flow across the obstruction and into the second basin.

point 2 rise 0.047 mcontrol point 0.000 m
EA Test 2 · floodplain depressions animated solver result
solver output
EA Test 2 · floodplain depressions

Can wet and dry regions remain physically distinct?

Water fills a sequence of depressions over complex topography while published far-field gauges remain dry.

storage ratio 0.99916 published gauges
EA Test 4 · flood propagation animated solver result
solver output
EA Test 4 · flood propagation

Does the flood front arrive at the right time?

Six gauges track the advancing front against an axisymmetric reference over an extended flat floodplain.

worst arrival error 6.3%6 gauge locations
benchmark / momentum_obstruction
$ just benchmark-obstruction --backend gpu_resident_batch

[mesh] obstruction-dem2010-150x50.parquet

[solver] Vulkan · gpu_resident_batch

[run] t = 900.0 s · snapshots saved

[gate] point_2_rise = 0.047 m

[artifact] summary.json · gauges.csv · manifest.json

[result] PASS

05 Reproducibility

Results with receipts.

Benchmark outputs are not screenshots assembled for the website. The harness produces the underlying data, plots, artifacts and provenance used to publish each result.

  • benchmark configuration
  • raw output and gauge series
  • artifact hashes and manifest
  • reproduction command
Browse benchmarks on GitHub
06 Existing workflows

Bring your mesh.

Deceris Inundation operates on polygonal computational cells. The initial release is for researchers and engineers who want to experiment with, inspect and extend a GPU-based 2D hydraulic solver.

GeoPackage GIS Shapefile GIS GeoParquet GIS Parquet GIS OBJ MESH
mesh preprocessingedges · CSR adjacency · cache
simulationdepth · momentum · time
07 Open source

The solver should be inspectable.

The numerical implementation, GPU shaders, benchmark harnesses and workflow API are being released under a permissive open-source licence.

Read the equations in code. Change them. Run the benchmarks again.

Open the source Licence · Apache-2.0
flux.pysolver.pyworkflow.py
inundation/vulkan/shaders/flux.pyGLSL · HLLC
42float cL = sqrt(pc.g * max(hL, 0.0));
43float cR = sqrt(pc.g * max(hR, 0.0));
44 
45float SL = min(unL - cL, u_roe - c_roe);
46float SR = max(unR + cR, u_roe + c_roe);
47 
48if (SL >= 0.0)      F = FL;
49else if (SM >= 0.0) F = FsL;
50else if (SR >= 0.0) F = FsR;
51else                 F = FR;
The solver answers

Where does the water go?

Deceris asks

What does that mean?

decerisInundationdepth · velocity · timing
buildingsinfrastructurepopulation
impact modelConsequencesexposure · disruption · loss
compareWhat-if scenariosevents · interventions · assumptions

follow the wateroutput → exposure → consequence → comparison

Deceris is a platform for exploring scenarios instead of stopping at a single model run. Change the event, intervention or assumption; then compare how the consequences move.

Try Deceris