1 Changelog
All notable changes to this project will be documented in this file. The format is based on Keep a Changelog.
1.1 [Unreleased]
1.1.1 Changed
- Allocation: solve every problem from scratch, so that HiGHS uses presolve, which is much faster for large subnetworks. Start values made HiGHS construct a basis and then skip presolve. #3387
- Allocation: flow no longer switches between equally good routes from one timestep to the next. A last objective keeps the flows of allocation controlled nodes close to those of the previous timestep. #3399
1.2 [v2026.2.0-rc1] - 2026-11-11
This is the first release candidate for v2026.2.0, and it is all about simpler models, speed, and robustness. Junctions can now stand in for Basins as a simpler alternative when you don’t need the volume and just want to pass down flow. They can divide flow by fraction with the new Junction / static table and supply UserDemand nodes directly, so a model doesn’t even need a single Basin anymore. Large models initialize and simulate much faster and can now run on multiple threads with --threads, while the CLI starts up quicker. A new default solver (NordsieckBDF), reworked tolerances, and ManningResistance flow capped at critical flow remove many causes of slow convergence and stalled simulations. Results are now written while the simulation runs, so memory use stays bounded and you keep your results when a run fails or you press Ctrl-C. Lossy compression also makes result files about 4 times smaller. Tracers now travel between Basins with an implicit, mass-conserving scheme that is both faster and much more accurate, and allocation gained an explicit intervention_interval, adaptive timestepping driven by optimization success, and many stability fixes. v2026.1.2 remains the latest stable release, but we do not expect further breaking changes before v2026.2.0, so please give this release candidate a try and let us know how it goes.
Breaking changes: Most v2026.1 models will run without changes, though reading and writing your model with Ribasim Python is still recommended to update ribasim_version (see the guide on updating Ribasim). Input validation is stricter: UserDemand return_factor must be in [0, 1], allocation-controlled Pump and Outlet nodes require a finite max_flow_rate (and explicit allocation_controlled = true between primary and secondary networks), and duplicate input rows or varying values for constant parameters in time tables are rejected. Nodes with multiple control states that aren’t controlled by DiscreteControl now need a row without control_state. The UserDemand / concentration table and built-in UserDemand tracer have been removed; use Basin / mass_load or FlowBoundary / concentration to add substances. In Python, model.node.df, model.link.df, NodeTable.filter, and model.<node_type>.node now return empty tables instead of None, and allocation.default_route_priority was renamed to allocation.route_priority.
1.2.1 Added
- Junction: Divide inflows over downstream links by fraction with the new
Junction / statictable (node_id,to_node_id,fraction), and allow UserDemand nodes to abstract from such Junctions before the remainder is divided (not yet supported at primary-subnetwork boundaries). #3323 #3375 #3379 #3384 #3403 #3407 #3420 - Junction: Allow a Junction tree with a single neighboring Basin to connect that Basin in both directions, with support in the QGIS fractional flow plot. #3407
- Junction: Allow control nodes to listen to the
flow_rateof a Junction. #3407 #3420 - Add an optional
interpolationcolumn ("block"or"linear") toFlowBoundary / timeto set the interpolation type per node. #3413 - Add
solver.discrete_control_intervalto evaluate DiscreteControl at a fixed interval, which can make models with many DiscreteControl nodes much faster. #3303 - Warn on rapidly oscillating DiscreteControl states via the configurable
solver.min_discrete_control_interval. #3237 #3317 - Add
results.significant_bitsto control lossy compression of results. #3369 - Report rejected timesteps by cause and the mean solver order in
results/solver_stats.nc. #3269 #3289 - Support models and allocation subnetworks without Basin nodes, as long as at least one connector or UserDemand node is present (for example a LevelBoundary feeding a Pump, or a FlowBoundary feeding UserDemand nodes via Junctions). #3403 #3407 #3421
- Allocation: Add
allocation.intervention_intervalandallocation.dtmaxto configure how often allocation updates the physical layer and bound adaptive allocation timesteps. #3254 #3304 - BMI: Set FlowBoundary flow rates during a simulation and read cumulative flow for online coupling. #3251
- Add node equation and connectivity schematics to the documentation, and document allocation behavior per node. #3380 #3398 #3423
1.2.2 Changed
- Speed up model initialization, simulations, Jacobian evaluation, tracer calculations, and allocation for large models, and support running large models on multiple threads via
--threads. #3180 #3265 #3305 #3338 #3343 #3362 #3368 - Reduce CLI startup and first-run compilation latency across node types, allocation models, and FlowBoundary interpolation settings. #3320 #3326 #3327 #3328 #3412
- Use lossy compression for NetCDF results by default, making them about 4 times smaller (relative error at most
5e-7, exceptbasin_state.ncwhich stays lossless; setresults.significant_bits = 0for lossless compression), with balanced chunks for much faster time series reads. #3369 - Write NetCDF results incrementally during the simulation to keep memory use bounded, and write results up to the last accepted timestep if a run stops early due to an error or
Ctrl-C(including in the CLI). #3392 #3395 - Switch the default solver to
NordsieckBDF, set defaultsolver.dtmaxto 86400 s, and applyabstolandreltol(both1e-4by default) to state changes per timestep. #3236 #3237 #3268 #3304 - In
results/solver_stats.nc, reportdtas the average timestep size over the output interval, count nonlinear solver failures inrejected_timesteps, and log convergence bottlenecks after successful runs too. #3253 #3269 - ManningResistance: Bound flow by critical sill flow so steep drops between Basins or deep downstream profiles no longer cause unrealistic supercritical flows, and forbid
profile_widthandprofile_slopefrom both being zero. #3286 - DiscreteControl: Initialize conditions with hysteresis against the midpoint of
threshold_lowandthreshold_highinstead of always startingfalse, and report state changes as solver discontinuities. #3270 - Nodes with multiple control states not controlled by DiscreteControl now require a row without
control_state, which also provides initial parameter values. #3316 - Tracers: Transport substances between Basins with a mass-conserving implicit scheme, allowing substances to travel multiple Basins per timestep with much higher accuracy. #3340
- Allocation: Pass results to the physical layer at
allocation.intervention_interval(default 86400 s, capping largerdt,dtmin, anddtmaxvalues with a warning), adapt timesteps within that interval by halving on infeasibility and doubling on success, and stop when a problem remains infeasible. #3304 - Allocation: Plan using only information available at the intervention time, holding FlowBoundary rates constant over the interval and reading UserDemand
return_factorat the start of each allocation step. #3394 - Allocation: Allow omitting
demand_priorityon demand nodes (defaulting to 1), require finitemax_flow_rateon allocation-controlled Pumps and Outlets and explicitallocation_controlled = trueon primary-secondary links, and reject links from a subnetwork into the primary network. #3259 #3323 #3379 #3403 - Stricter input validation: reject duplicate rows in input tables, varying values for constant parameters in
timetables, and non-positivesolver.dtmax; UserDemandreturn_factormust be in[0, 1], andreturn_factorandmin_levelmust agree across demand priorities. #3316 #3393 #3401 #3419 - Delwaq:
generatenow writes substance- and process-specific input files to anincludesubfolder (renamingribasim_bndlist.inctoinclude/B5_bndlist.inc) so custom water quality setups can replace them directly. #3321 - Python:
model.link.addnow replaces an existing link between the same nodes (or with the samelink_id) with a warning, matchingnode.add. #3431 - Python:
model.node.df,model.link.df,NodeTable.filter, andmodel.<node_type>.nodenow return empty tables instead ofNone, and assigningNoneto Node or Link tables raises an error. #3347 - Python: Rename
allocation.default_route_prioritytoallocation.route_priorityto match the core configuration. #3206
1.2.3 Fixed
- Keep a small water reserve (1% of
solver.depth_threshold, 1 mm by default) when Basins empty, preventing simulations from aborting with tiny timesteps due to floating-point rounding. #3279 - Pumps and Outlets with
min_flow_rateswitched off by level criteria no longer slow down the solver by orders of magnitude, and their documented equations now reflect that level criteria can reduce flow belowmin_flow_rate. #3288 - Fix solver stalls and errors at jumps in block-interpolated time series, stiff Newton convergence crawls, KLU and
NordsieckBDFstep-rejection bugs, Rosenbrock and explicit solver crashes (for whichsolver.reduced_implicit_solve = trueis now an error), and false water balance errors on very short output intervals. #3277 #3290 #3401 #3406 - Provide actionable error diagnostics for unstable models, identifying affected node IDs and physical flow rates. #3242 #3254 #3267 #3272 #3273
- DiscreteControl: Immediately renew cached time-dependent Pump and Outlet parameters after a control state change. #3345
- Allocation: Fix low-storage factor optimization order and connector-node scaling, route priority ordering, controlled TabulatedRatingCurve flows when allocation is off, physical flow rates at allocation times, non-controlled Pump and Outlet bounds, LevelDemand and FlowDemand scaling, Junction handling, and writing results when FlowDemand is combined with DiscreteControl. #3206 #3218 #3221 #3246 #3250 #3282 #3291 #3304 #3363 #3366 #3367
- Fix missing Basin vertical flows in
allocation_flow.nc, only writesubgrid_level.ncwhenresults.subgrid = true(avoidingNaNoutput when concentrations are off), and save initial Basin states att = 0whensaveat = Inf. #3395 - Allow missing optional columns when reading external NetCDF input tables, such as files exported from Delft-FEWS. #3413
- Report clear parsing errors for invalid Pump, Outlet, and demand input tables instead of failing silently or with misleading messages. #3219 #3254
- Tracers: Base UserDemand return-flow mass on the returned volume instead of the abstracted volume, carry abstracted concentrations in Delwaq UserDemand return flows, stop the solver at concentration time series changes, and fix false negative-mass rounding errors. #3339 #3340 #3419 #3425
- Delwaq: Reduce memory usage when generating inputs and parsing large results, and run Delwaq from the model directory on Linux. #3132 #3248 #3415
- Python: Prevent failed
model.link.addcalls from leaving invalid rows in the link table, allow replacing links bylink_idat the maximum neighbor count, and omit external filepaths from the TOML when a table is removed. #3214 #3431
1.2.4 Deprecated
- Allocation:
allocation.reltol_linearizationis deprecated and ignored with a warning, as adaptive timestepping is now governed by optimization success. #3304
1.2.5 Removed
- Tracers: Remove the built-in
UserDemandtracer and theUserDemand / concentrationtable, since UserDemand return flows carry the concentrations of the abstracted water; useBasin / mass_loadorFlowBoundary / concentrationto add substances instead. #3419
1.3 [v2026.1.2] - 2026-06-16
This release brings several improvements to the QGIS plugin, most notably the ability to compare observed and simulated timeseries using Observation nodes.
1.3.1 Added
- QGIS: Compare observed and simulated timeseries for Observation nodes in the plot widget. #3115
- Python: Add
model.update_used_ids()to refresh node and link ID counters after direct edits. #3099 - Python: Make
NodeDatahashable, so nodes can be used in sets and as dictionary keys. #3094 - QGIS guide: Add sections on spatial results and topology. #3104
1.3.2 Changed
1.3.3 Fixed
- Delwaq: Allow for isolated Basin nodes. #3088
1.3.4 Removed
- The deprecated Ribasim core Windows installation script; use the installer or ZIP archive instead. #3116
1.4 [v2026.1.1] - 2026-05-09
This release makes allocation use adaptive timestepping by default, just like the physical layer. That means users run into infeasible optimization problems less. We also added support for multiple inflow links for UserDemand, so it can tap directly from multiple sources. Besides that the Python package saw some performance improvements, and we squashed several bugs.
1.4.1 Added
1.4.2 Changed
1.4.3 Fixed
- Fix allocation infeasibility reporting for some constraints. #3078
- QGIS: More robust run cancellation. #3077
- Delwaq: Remove boundary-boundary connections. #3063
- Fix
starttime < endtimevalidation. #3059 - Fix wrongly reported intra-Junction flows. #3054
- Fix allocation bug with allocation-controlled and flow demand node IDs. #3044
- Filter missing data out of NetCDF. #3033
1.5 [v2026.1.0] - 2026-03-31
This stable release fixes several issues found during testing of rc2. We do extra validation on node IDs in Python, and added support for mass loads. There are no breaking changes since rc2. See the rc1 and rc2 changelog entries below for all changes since v2025.6.0.
1.5.1 Added
1.5.2 Changed
1.5.3 Fixed
- Delwaq: Don’t count removed Junctions in network generation. #3001
- Don’t load external NetCDF input in QGIS. #2999
- Fix Jacobian state and time dependent cache bug. #2972
- Allocation: Use flow at
tinstead of cumulative flow divided by time. #3000 - Remove dangling listen links. #2978
- QGIS: Fix water balance plot storage. #2975
- QGIS: Fix column order display. #3005
- Add millisecond precision to fake
last_change. #2974 - Exclude UserDemand from default tracer set. #3007
1.6 [v2026.1.0-rc2] - 2026-03-06
This second pre-release for v2026.1.0 adds a QGIS plotting pane with water balance and fractional flow plots, a new Observation node, and allocation control for the TabulatedRatingCurve. We fully switched from Arrow to NetCDF-based I/O, and have a new set of icons for our nodes.
Breaking changes: Arrow support was removed and NetCDF is now the only format for results. model.to_fews was removed. The Ribasim QGIS plugin now requires QGIS 3.40 or newer.
1.6.1 Added
- Add Observation node. #2950
- Add implicit listen edges to Link table on write. #2949 #2969
- Add a Boolean for allocation-controlled behavior. #2912
- Add allocation-controlled TabulatedRatingCurve. #2907
- Add guide for installing other Ribasim versions. #2906
- Add VS Code guide. #2857
- Add allocation technical reference documentation. #2809
- Add section on debugging unexpected flow rates. #2814
- QGIS: Add experimental QGIS 4 support. #2960
- QGIS: Add configurable
RIBASIM_HOME. #2919 - QGIS: Support running Ribasim models. #2881
- QGIS: Load external NetCDF input. #2880
- QGIS: Add Plotly widget and NetCDF results support. #2903
- QGIS: Add water balance plot. #2939
- QGIS: Add fraction plotting. #2968
1.6.2 Changed
- Default to NetCDF for results storage. #2855
- Complete writing remaining results to NetCDF. #2856
- Remove Arrow support. #2937
- Remove
model.to_fews; add CF attributes to NetCDF input. #2938 - Introduce Node table at Model level again. #2886
- Use
RIBASIM_HOMEconsistently in tooling and scripts. #2891 - Set default interpolation behavior to block/constant. #2909 #2896
- Set default basin route priority to
0. #2942 - Rename allocation output terminology from realized to supplied. #2962
- Switch between control state and
ribasim.allocation. #2808 - Require QGIS 3.40 (LTR) or newer. #2862
- Use new icons for
model.plot()and docs. #2917 #2916 - Keep external file paths in Python model handling. #2943
- Add lazy reading and writing in Python. #2878
- Remove migration warnings on model load. #2826
1.6.3 Fixed
1.7 [v2026.1.0-rc1] - 2025-12-23
This is the first pre-release running up to the stable v2026.1.0 release. It is a release candidate, and we recommend most users to stick with v2025.6.0 for now. We expect to make more breaking changes and add features before the final release. This release sees significant performance increases for the core as well as the QGIS plugin, which especially help large models. Route priority in allocation was added to steer the path taken by allocated water.
Breaking changes: In the Node table, source_priority has been renamed to route_priority, and the optional active column was removed. Note that Ribasim Python will migrate existing models automatically, see also the new guide on updating Ribasim. If nodes where set to inactive, they will have to be removed manually first. The ribasim executable was moved to the bin subfolder, so users may need to update their PATH or RIBASIM_EXE environment variables.
1.7.1 Added
- Add Windows installation script. #2682
- Add ResidenceTime tracer. #2701
- Add allocation route priorities. #2731
- Document control by allocation. #2698
- Document installing QGIS plugin from qgis.org. #2687
- Add diagram for physical-allocation interaction. #2712
- Add “getting started” section to documentation. #2734
- Expand saveat documentation for months and years. #2709
- Delwaq: Generate more modular inputs. #2745
- Log full configuration. #2730
- Add indexes to database for QGIS performance. #2763
- Improve database read performance of the core. #2762
- Let
run_ribasimuseRIBASIM_EXEif set. #2783
1.7.2 Changed
- Optimize Jacobian computation for large models. #2624 #2685
- Allow replacing/deleting links. #2733
- Move
ribasimexecutable tobindirectory. #2758 - Remove feature where nodes can be inactive. #2764
- Make database reproducible by fixing timestamp. #2765
- By default, all nodes get a subnetwork ID of 1. #2766
- Deprecate
run_ribasim’scli_pathforribasim_exe. #2783 - Rename
source_prioritytoroute_priority. #2768
1.7.3 Fixed
1.8 [v2025.6.0] - 2025-10-27
This release brings significant improvements to the QGIS plugin, allocation, and CLI latency. The QGIS plugin is now published in the QGIS plugin repository and has a simplified UI; you can drag a TOML to QGIS to open a model. The black screen in the iMOD plugin is fixed in the latest version of the iMOD plugin, and the Arrow errors on loading results are also fixed.
Iteratively working on a model in a Python session has become easier now that model.<node_type>.add can replace existing nodes, and run_ribasim(toml_path) shows you live progress in all editors.
Breaking changes: There are two changes that shouldn’t be breaking but might affect some users nonetheless. The input_dir default has been changed to “input”. Python models now forbid any extra values in schema validation for stricter data integrity.
1.8.1 Added
- Add
run_ribasim(toml_path)convenience function. #2653 - Allow replacing nodes with add API. #2664
- Flow communication between primary and secondary networks. #2556
- Read NetCDF files with demand_priority. #2604
- Make reduction factor thresholds configurable. #2592 #2681
- QGIS: Add menu and dropdown interface. #2634
- Add docs on reloading model in QGIS plugin guide. #2583
- Document
pandasrequirement for QGIS plugin. #2642
1.8.2 Changed
- Set
input_dirdefault to “input”. #2641 - Python: Forbid any extra values in (base)model for stricter validation. #2595
- Support Scientific Python SPEC 0 for broader compatibility. #2630
- QGIS: Always use GDAL instead of pyarrow for better stability. #2591
- Publish QGIS plugin. #2654 #2658
- Improved build performance and compilation. #2652
1.8.3 Fixed
- Finalize progress bar. #2665
- Fix Junctions with subnetwork ID. #2633
- Delwaq: Restore correct water/mass balance with Junctions. #2607
- Delwaq: Limit endtime for partially failed Ribasim runs. #2637
- Delwaq: Improved performance of flow boundary concatenation. #2597
- Fix remaining DelWAQ netCDF warnings. #2621
- Fix DataInterpolations integration bug. #2576
- QGIS: Fix empty Arrow results. #2585
- Log clear error on decreasing area in
S(h). #2600 - QGIS: Faster results drawing. #2618
- QGIS: Fix crash on Reload Ribasim model. #2661
- Reset
ribasim_versioninmodel_post_init. #2578 - Convert Path to str with
.as_posix()for cross-platform compatibility. #2579 - Support pydantic 2.12. #2650
1.9 [v2025.5.0] - 2025-09-09
This release focuses on improving allocation capabilities and performance optimizations. We linearize the optimization problem, and Pump and Outlets can now listen to allocation to set the flow rate. NetCDF output has been added, as well as experimental support for NetCDF input. DiscreteControl now supports an upper and lower threshold to model hysteresis. Editing models in QGIS is no longer supported; the plugin widget has been reduced one button. The Ribasim Python installation section allows you to pick your favorite package manager. Lastly, Ribasim is now multithreaded!
Breaking changes: In the DiscreteControl / condition table, greater_than has been renamed to threshold_high, and the optional threshold_low column was added. The surface_runoff column was added to Basin / static and Basin / time. Note that Ribasim Python will migrate existing models automatically, see also the new guide on updating Ribasim.
1.9.1 Added
- Add
surface_runoffto Basin fluxes. #2402 - Support NetCDF results. #2497
- Support NetCDF input. #2542
- Add multithreading. #2562
- Implement hysteresis on DiscreteControl. #2564
- Add
FlowBoundary / areapolygons. #2537 - Native multi-objective optimization in allocation. #2522
- Add control by allocation functionality. #2401
- FlowDemand supports multiple priorities. #2500
- Report cause of infeasibility in allocation problems. #2398 #2481
- Add
convergenceanddtto results for performance monitoring. #2405 - Warn when reading a new model with an old Ribasim Python version. #2410
- Add instructions to install using Pixi. #2415
- Add guide on updating Ribasim models. #2489
- Support DiscreteControl listening to a Basin’s storage. #2573
1.9.2 Changed
- Allow two incoming control links for Pump and Outlet. #2531
- Use FlowDemand demand as minimum Pump/Outlet flow when allocation is not active. #2506
- Expand and improve LevelDemand functionality with absolute error handling. #2386 #2515
- Allocation optimization with warm start for better performance. #2466
- Scale storage and flow in allocation for numerical stability. #2407
- Switch from UMFPACK to KLU sparse linear solver for performance. #2391
- Use pandera v0.25, and revert using pyarrow dtypes. #2450
- QGIS: remove editing features for simplified workflow. #2472
- Use smooth interpolation of ContinuousControl and TabulatedRatingCurve functions. #2446 #2458
- Use a Reynolds based threshold for the ManningResistance relaxed root 2544
- Demand nodes with timeseries now use block interpolation 2568
1.9.3 Fixed
- Core model initialization speedup. #2548 #2533
- Fix validation error on multiple incoming control links. #2535
- Improve error message for DiscreteControl with no data. #2540
- Make convergence finite to avoid numerical issues. #2534
- Cache FlowDemand lookup to avoid expensive operations in
water_balance!. #2523 - Increase stacksize on Windows to 8 MB to prevent stack overflow. #2546
- Align timestep allocated and realized results in
allocation.arrow. #2554 - Support GeoPandas 1.1. #2547
1.10 [v2025.4.0] - 2025-06-16
This release had a big push on the stability and performance for large models. Users can now also provide a level-storage relation in Basin / profile. This means old models need to be migrated by reading them into Ribasim Python, and writing them out. We are working on reformulating the allocation problem. Until this work is finished, allocation remains an experimental feature of Ribasim.
1.10.1 Added
- Reload Ribasim model in QGIS. #2307
- Support storage column in Basin / profile #2278
- Allow Junction to Terminal links. #2295
- Add model performance debugging guide #2308
- Make FlowBoundary interpolation method configurable #2285
- Output interpolated Basin / profile in debug mode #2344
- Write log file via BMI #2370
1.10.2 Changed
- Reformulate the allocation problem. #2266
- Mark allocation as experimental. #2266
- Low storage threshold based on 10 cm depth #2357
- Stability: decrease relative tolerance over time. #2277
- Use block interpolation for FlowBoundary by default #2285
- Remove backtracking, add more caching #2359
- More realistic smoothing around
Δh = 0in ManningResistance. #2365
1.10.3 Fixed
1.11 [v2025.3.0] - 2025-04-14
The only breaking change in this release is to disallow connecting a single FlowBoundary to multiple Basins. There are large improvements in the ability to visualize results on the map in QGIS. We also welcome the Junction node to the family, which will help laying out networks in a recognizable manner.
1.11.1 Added
- Add spatio-temporal results layers to QGIS. #2208
- Add topological (straight line) link view toggle to QGIS. #2208
- Added Junction node type. #2175
- Write results and log bottlenecks also on an interrupt or crash. #2191 #2200
- Log computation time and save it to
solver_stats.arrow. #2209 - Experimental support for writing the model network and results into files used by Delft-FEWS,
model.to_fews. #2161 - Document
results/concentration.arrow. #2165
1.11.2 Changed
1.12 [v2025.2.0] - 2025-03-10
In this release, time is of the essence. We now support dynamic Pumps and Outlets, as well as DiscreteControl thresholds. For each node, timeseries can be marked as cyclic, such that yearly recurring timeseries can be easily used without repetition. We also developed tools to compare model input in Python.
The most visible change is the renaming of Edge to Link. Like always, existing models are migrated to the new version by reading them with Ribasim Python, and writing out the updated version. For now in Python model.edge will continue to work to ease the transition.
1.12.1 Added
- Check Model equality in Python. #2057
- Compare two models in Python. #2080
- Support cyclic input timeseries. #2081 #2102
- Time dependent
threshold_highthresholds in DiscreteControl. #2079 - Validation error on connector nodes having the same from and to Basin. #2112
- Support time dependent Pump and Outlet tables. #2110
1.12.2 Changed
1.12.3 Fixed
1.13 [v2025.1.0] - 2025-01-17
The first release of 2025 makes the Ribasim core more robust and stable, and speeds up initialization for large models. The biggest new feature is the experimental support for calculating tracers in Ribasim directly, which will hopefully make it easier to track where the water resources are heading.
1.13.1 Added
1.13.2 Removed
- Drop Python 3.10 support. #2012
1.13.3 Changed
1.13.4 Fixed
- ManningResistance is more stable around Δh=0. #1896
- Fixes to Delwaq model generation. #1903 #1917 #1948
- Add step limiter to avoid negative flows or too large flows. #1911 #1912
- Fix README.md in builds. #1935 #1938
- Speed up initialization. #1977
- Automatically name index in Python. #1974
- Table sorting related fixes. #2003
1.14 [v2024.11.0] - 2024-10-08
This major new release contains many improvements. A new formulation allows much smaller water balance errors, which is combined with several performance improvements. Ribasim Python does more validation that was previously only done in the core. The Ribasim QGIS plugin now sets the relations between tables for easier model inspection. Adding min_upstream_level and max_downstream_level to Pump and Outlet means DiscreteControl is often no longer needed. The most significant breaking change is making the node_id and edge_id the index of the Node and Edge table; these need to be globally unique.
Starting from this release Ribasim is labeled as beta software. Since development is currently mainly driven by applications in the Dutch water system, we expect that addition work needs to be done for general use outside the Netherlands.
For coupled simulation with MODFLOW and/or MetaSWAP, this release is part of the iMOD Coupler, specifically release v2024.4.0
1.14.1 Added
- Support discrete control based on an external concentration condition. #1660
- Add
results/solver_stats.arrowwith solver statistics over time. #1677 - Add icon to
ribasim.exeon Windows. #1712 - Save QGIS styling in the model database. #1713
- Add Delwaq coupling guide. #1619
- Solver speedup due to backtracking relaxation. #1761
- Reject adding a duplicate edge in Python. #1719
- Support transient UserDemand return factor. #1727
- Document the interpolation of input data. #1720
- Automate Jacobian sparsity detection. #1606
- Support specifying the
edge_idasmodel.edge.add(a, b, edge_id=5). #1737 - Use https://ribasim.org/ to host our documentation. #1736
- Validate geometry types in Python. #1760
- Add relationships between tables in QGIS. #1755
- Support migrating from older Ribasim versions in Python. #1764
- Add quick start guide to docs. #1787
- Add
min_upstream_levelandmax_downstream_levelto Pump and Outlet. #1792 - Add
max_downstream_levelto TabulatedRatingCurve. #1795 - Validate edge connections in Python. #1765
- Add low storage reduction factor to ManningResistance. #1796
1.14.2 Changed
- Refactor of the core to ensure smaller water balance errors. #1819
- Make
node_idglobally unique. #1717 - Make the Node ID the index of the Node table, and Edge ID for Edge. #1737
- Make more Python functions private. #1702
- Put the contents of the CLI zips in a folder. #1722
- Changed water balance error definition. #1767
- Disallow missing priority parameter when using allocation. #1745
- Rename Outlet’s
min_crest_leveltomin_upstream_level. #1788 - Only allow flow under gravity in TabulatedRatingCurve. #1795
- Use
dtype_backend="pyarrow"for Pandas DataFrames. #1781
1.14.3 Fixed
1.15 [v2024.10.0] - 2024-07-23
For this release we said goodbye to the problematic FractionalFlow node, but welcome the ContinuousControl as a long requested feature.
1.15.1 Added
- Control: Add ContinuousControl node type. #1602
- Control: Support listening to flow through connector nodes. #1594
- Validate that TabulatedRatingCurve levels are above Basin bottom. #1607
- Validate that Outlet minimum upstream levels are above Basin bottom. #1607
- Always show convergence bottlenecks. #1636
- Docstrings for Ribasim Python. #1643
- Allocate to UserDemand from directly connected Basin if possible. #1581
- Add
basin_state.arrowresults. #1626 - Also write stacktraces to
ribasim.log. #1653
1.15.2 Changed
- Require QGIS 3.34 (LTR) or newer for Ribasim QGIS plugin.
1.15.3 Fixed
1.15.4 Removed
1.16 [v2024.9.0] - 2024-06-20
1.16.1 Added
- Support for concentration state and time for Delwaq coupling.
- Show exact commit on
ribasim --versionif it is not a release. #1479