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.
Added
- Add
surface_runoff
to Basin fluxes. #2402 - Support NetCDF results. #2497
- Support NetCDF input. #2542
- Add multithreading. #2562
- Implement hysteresis on DiscreteControl. #2564
- Add
FlowBoundary / area
polygons. #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
convergence
anddt
to 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
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
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
All changes
What's Changed
- Generate a Ribasim-python SBOM by @deltamarnix in #2342
- Allocation renewal by @SouthEndMusic in #2266
- [TC] Implement custom Teamcity logging for reporting tests. by @evetion in #2348
- Use mirrors-typos to avoid tag warnings by @visr in #2387
- Explicit imports, complete the root project by @visr in #2392
- Use PrecompileTools and Preferences to compile specialized basic model on build. by @evetion in #2114
- Switch from UMFPACK to KLU sparse linear solver by @visr in #2391
- Pixi: initialize julia before SBOM and Quarto render by @visr in #2394
- better initial value of programming goal value by @simulutions in #2397
- Avoid running allocation models in regression and integration tests by @SouthEndMusic in #2396
- Go to DataInterpolations release by @visr in #2404
- allocation_init: Unique flow conservation constraint names based on node type by @jarsarasty in #2406
- Add convergence and dt to output. by @evetion in #2405
- Improve Pixi dev doc by @visr in #2409
- Add custom Copilot instructions by @visr in #2411
- Fix remove_link method call to remove_edge in delwaq generate.py by @Copilot in #2413
- Add surface_runoff to Basin by @evetion in #2402
- Scale storage and flow in allocation by @SouthEndMusic in #2407
- Migrate surface_runoff in Ribasim Python. by @evetion in #2416
- make_user_demand_allocated_bound by @SouthEndMusic in #2419
- Report cause of infeasibility by @simulutions in #2398
- Update pre-commit hooks by @evetion in #2428
- [docs] Some fixes by Sonnet. by @evetion in #2430
- Update Julia manifest by @evetion in #2423
- Fix Python test warnings by @visr in #2422
- Update pixi lockfile by @evetion in #2429
- Warn Python users of version incompatibilities (adds
packaging
dep) by @visr in #2410 - Documenting phased approach for model building with associated data n… by @gijsber in #2427
- Remove CairoMakie from root project by @visr in #2441
- [Delwaq] Limit graph cycle detection to length 2. by @evetion in #2442
- control by allocation by @simulutions in #2401
- Add concentration interpolation objects by @SouthEndMusic in #2426
- Use averaged normalized convergence error by @evetion in #2448
- Improve fraction plot recipe. by @evetion in #2453
- Use pandera v0.25, and revert using pyarrow dtypes by @visr in #2450
- Fix s3_download.py to error when remote path does not exist by @Copilot in #2454
- Improve continuous control performance by @SouthEndMusic in #2446
- Update Julia manifest by @evetion in #2455
- Bump prefix-dev/setup-pixi from 0.8.10 to 0.8.11 by @dependabot[bot] in #2456
- Add instructions to install using Pixi by @visr in #2415
- Smoother rating curve by @SouthEndMusic in #2458
- Support giving
model_dir
torun_delwaq
by @visr in #2465 - Test piecewise linear basin profile by @SouthEndMusic in #2395
- QGIS: remove editing features by @visr in #2472
- Use
engine: julia
andjuliacall
in docs by @visr in #2474 - Use patched PackageCompiler to reduce artifacts folder by @visr in #2475
- Bump prefix-dev/setup-pixi from 0.8.11 to 0.8.12 by @dependabot[bot] in #2476
- Allocation optimization with warm start by @SouthEndMusic in #2466
- Use
MathOptAnalyzer
to analyze allocation problems by @SouthEndMusic in #2459 - Fix broken tests by @SouthEndMusic in #2478
- Write infeasible LP problem to file by @SouthEndMusic in #2481
- Remove Legolas, take 2 by @visr in #2487
- Update pre-commit hooks by @evetion in #2491
- Update pixi lockfile by @evetion in #2492
- Update Julia manifest by @evetion in #2493
- Bump prefix-dev/setup-pixi from 0.8.12 to 0.8.14 by @dependabot[bot] in #2494
- Synchronize schemas with docs and QGIS by @visr in #2495
- Add a guide on updating Ribasim models by @visr in #2489
- Expand and test
LevelDemand
functionality by @SouthEndMusic in #2386 - Recreate CI env locally: add devcontainer by @simulutions in #2486
- Use FlowDemand demand as minimum Pump/Outlet flow when allocation is not active by @SouthEndMusic in #2506
- CompatHelper: bump compat for DataStructures to 0.19 for package core, (keep existing compat) by @github-actions[bot] in #2511
- Update pre-commit hooks by @evetion in #2513
- Update pixi lockfile by @evetion in #2514
- Update Julia manifest by @evetion in #2512
- Add NetCDF output by @visr in #2497
- Test allocation problem construction consistency by @SouthEndMusic in #2516
- LevelDemand in terms of absolute error by @SouthEndMusic in #2515
- Cache whether pumps and outlets have a flow demand to avoid expensive lookup in
water_balance!
by @SouthEndMusic in #2523 - Flow demand with multiple priorities by @SouthEndMusic in #2500
- Report allocation bounds when hit by @simulutions in #2490
- Allocation: linearize Basin profiles and connector nodes further by @simulutions in #2462
- Bump prefix-dev/setup-pixi from 0.8.14 to 0.9.0 by @dependabot[bot] in #2529
- Bump actions/checkout from 4 to 5 by @dependabot[bot] in #2530
- Allow two incoming control links for Pump and Outlet by @visr in #2531
- Avoid
Tables.columntable
onSQLite.Query
by @visr in #2533 - Fix validation error on multiple incoming control links by @visr in #2535
- Make convergence finite. by @evetion in #2534
- Update Julia manifest by @evetion in #2536
- Add FlowBoundary / Area. by @evetion in #2537
- Update pre-commit hooks by @evetion in #2538
- Update pixi lockfile by @evetion in #2539
- double the upper bound by @simulutions in #2541
- Set juliacall env vars for quarto-preview as well by @visr in #2543
- Increase stacksize on Windows to 8 MB by @visr in #2546
- Support GeoPandas 1.1 by @evetion in #2547
- Improve error message for DiscreteControl with no data by @visr in #2540
- Speed up loading Arrow tables in core by @visr in #2548
- Add
pixi run filter-model
by @visr in #2551 - Native multi objective optimization by @SouthEndMusic in #2522
- Test source priorities by @SouthEndMusic in #2553
- Update Julia manifest by @evetion in #2555
- Update pre-commit hooks by @evetion in #2557
- Update pixi lockfile by @evetion in #2558
- Bump actions/setup-python from 5 to 6 by @dependabot[bot] in #2561
- Align timestep allocated and realized results in
allocation.arrow
by @SouthEndMusic in #2554 - Parallelize rhs by @simulutions in #2562
- Make all allocation interpolations forward fill by @SouthEndMusic in #2568
- Update changelog by @visr in #2566
- Fix CLI panic for threads arg by @visr in #2567
- Implement hysteresis on DiscreteControl. by @evetion in #2564
- Add laminar flow to manning by @simulutions in #2544
- Support NetCDF input tables as Arrow alternative by @visr in #2542
- DiscreteControl based on storage by @SouthEndMusic in #2573
- Bump version number by @visr in #2572
New Contributors
- @jarsarasty made their first contribution in #2406
- @Copilot made their first contribution in #2413
Full Changelog: v2025.4.0...v2025.5.0