SWIM

An open-source software package for static modeling and prediction of surface water and urban flooding based on analysis of terrain topography.
https://github.com/sintefmath/surfacewaterintegratedmodeling.jl

Category: Hydrosphere
Sub Category: Freshwater and Hydrology

Keywords from Contributors

automatic-differentiation blackoil co2-sequestration compositional finite-volume multiscale porous-media-flow reservoir-simulation

Last synced: about 13 hours ago
JSON representation

Repository metadata

SWIM - Surface Water Integrated Modeling

README.md

Dev
Build Status
DOI

SWIM - Surface Water Integrated Modeling

SWIM is an open-source software package for static modeling and prediction of
surface water and urban flooding based on analysis of terrain topography. It is
developed and maintained by the Applied Computational
Science

research group at SINTEF Digital.

SWIM consists of a collection of algorithms for analysing terrain, identifying
watershed boundaries, and providing a better understanding of how water
accumulates and moves through the landscape. This is valuable for various
purposes, such as water resource management, flood modeling, and environmental
planning.

Our algorithms originate from work on CO2 storage and are based on an assumption
of infinitesimal flow. These so-called spill-point analyses were later modified
to model flooding in urban areas. Spill-point analyses are highly
computationally efficient compared to tools based on numerical simulation. This
makes it easy to work interactively and test out various scenarios and
measures. SWIM offers some unique functionality, such as simplified infiltration
models (both permeable and impermeable surfaces) and the calculation of time
series that models how water accumulates or drains over time, without having to
resort to computationally intensive numerical time-stepping approaches.

Functionality

SWIM is a set of tools that is intended to provide a flexible foundation for
further development. Current functionality includes:

  • Static surface models
    • Calculation of catchment areas, waterways, and hierarchical networks of
      intermittent streams, ponds and lakes
    • Accumulation areas for water, topological network of ponds, and how they
      connect and merge together
    • Permanent water volumes such as rivers, lakes, and seas
  • Dynamic analysis
    • Terrain response to precipitation events and infiltration over time
    • Routing of water as ponds overflow
  • Terrain characteristics and infrastructure
    • Buildings, obstacles, drainage, and measures
    • Simplified infiltration model that supports both permeable and impermeable
      surfaces
  • Basic IO and visualization routines

image

System of lakes and rivers identified in the watershed analysis.

Learn more

The best way to get introduced to SWIM is to have a look at the provided
examples:

  • The Urban landscape
    example provides an introduction to key SWIM functionality applied to a real
    dataset of a district in central Oslo.
  • The Simple synthetic example
    uses an extremely simplified surface to explain and demonstrate some key concepts.
  • The Handling flat areas
    example is a small example to show how large, flat water bodies can be
    identified and kept separate from the analysis.

Installation

The package is registered in the Julia package registry, and can be installed
using:

julia> using Pkg
(@1.11) pkg> add SurfaceWaterIntegratedModeling

Note on running the examples

The scripts found in the example directory have their own Project.toml
file. This environment should be activated before trying to run the
examples. Here is a step-by-step guide to how you can make the examples run:

  1. In your terminal, go to the example directory and start up Julia.
  2. Go to the package mode by typing ] and activate the current directory by
    running activate .
  3. If you want to run the example using the lastest SWIM package, run instantiate
    to ensure it is installed. On the other hand, if you rather want to use the
    currently checked out code, run dev .. (while still in package mode).
  4. Exit package mode. Now you should be able to run the examples.

Note: It is recommended that you run the examples block-by-block in an IDE,
rather than having them run through in one go by includeing them, in order
to properly see all generated figures before they are updated/changed.

For inquiries, you can get in touch with the contact person listed at
https://www.sintef.no/en/software/swim/.

Contributing

Please refer to CONTRIBUTING.md for instructions on how to report problems or
suggest changes.

License information

Copyright (c) 2024 SINTEF Digital

Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.

Citation (CITATION.cff)

cff-version: "1.2.0"
authors:
- family-names: Andersen
  given-names: Odd A.
  orcid: "https://orcid.org/0000-0002-2245-9512"
doi: 10.5281/zenodo.15306692
message: If you use this software, please cite our article in the
  Journal of Open Source Software.
preferred-citation:
  authors:
  - family-names: Andersen
    given-names: Odd A.
    orcid: "https://orcid.org/0000-0002-2245-9512"
  date-published: 2025-05-01
  doi: 10.21105/joss.07785
  issn: 2475-9066
  issue: 109
  journal: Journal of Open Source Software
  publisher:
    name: Open Journals
  start: 7785
  title: Topography-based surface water modeling in Julia, with support
    for infiltration and temporal developments
  type: article
  url: "https://joss.theoj.org/papers/10.21105/joss.07785"
  volume: 10
title: Topography-based surface water modeling in Julia, with support
  for infiltration and temporal developments
  

Owner metadata


GitHub Events

Total
Last Year

Committers metadata

Last synced: 3 months ago

Total Commits: 58
Total Committers: 5
Avg Commits per committer: 11.6
Development Distribution Score (DDS): 0.121

Commits in past year: 37
Committers in past year: 3
Avg Commits per committer in past year: 12.333
Development Distribution Score (DDS) in past year: 0.135

Name Email Commits
Odd o****n@s****o 51
Mark Kittisopikul k****m@j****g 4
ellingsvee e****e@g****m 1
Olav Møyner o****r@g****m 1
Odd Andersen o****n@g****m 1

Committer domains:


Issue and Pull Request metadata

Last synced: about 1 month ago

Total issues: 1
Total pull requests: 10
Average time to close issues: less than a minute
Average time to close pull requests: about 20 hours
Total issue authors: 1
Total pull request authors: 2
Average comments per issue: 1.0
Average comments per pull request: 0.2
Merged pull request: 10
Bot issues: 0
Bot pull requests: 0

Past year issues: 0
Past year pull requests: 10
Past year average time to close issues: N/A
Past year average time to close pull requests: about 20 hours
Past year issue authors: 0
Past year pull request authors: 2
Past year average comments per issue: 0
Past year average comments per pull request: 0.2
Past year merged pull request: 10
Past year bot issues: 0
Past year bot pull requests: 0

More stats: https://issues.ecosyste.ms/repositories/lookup?url=https://github.com/sintefmath/surfacewaterintegratedmodeling.jl

Top Issue Authors

  • JuliaTagBot (1)

Top Pull Request Authors

  • mkitti (8)
  • jbytecode (2)

Top Issue Labels

Top Pull Request Labels


Package metadata

juliahub.com: SurfaceWaterIntegratedModeling

SWIM - Surface Water Integrated Modeling

  • Homepage:
  • Documentation: https://docs.juliahub.com/General/SurfaceWaterIntegratedModeling/stable/
  • Licenses: Apache-2.0
  • Latest release: 1.0.3 (published 11 months ago)
  • Last Synced: 2026-01-26T18:19:46.332Z (18 days ago)
  • Versions: 3
  • Dependent Packages: 0
  • Dependent Repositories: 0
  • Rankings:
    • Dependent repos count: 3.227%
    • Average: 9.767%
    • Dependent packages count: 16.308%

Dependencies

examples/Project.toml julia
  • ArchGDAL *
  • ColorSchemes *
  • GLMakie *
  • GeometryBasics *
  • Graphs *
  • Images *
  • Makie *
  • SurfaceWaterIntegratedModeling *
.github/workflows/CI.yml actions
  • actions/checkout v2 composite
  • codecov/codecov-action v2 composite
  • julia-actions/cache v1 composite
  • julia-actions/julia-buildpkg v1 composite
  • julia-actions/julia-docdeploy v1 composite
  • julia-actions/julia-processcoverage v1 composite
  • julia-actions/julia-runtest v1 composite
  • julia-actions/setup-julia v1 composite
.github/workflows/TagBot.yml actions
  • JuliaRegistries/TagBot v1 composite
Project.toml julia
  • ColorSchemes *
  • Colors *
  • DelimitedFiles *
  • DifferentialEquations *
  • GeometryBasics *
  • Graphs *
  • Interpolations *
  • LazyArtifacts *
  • Makie *
  • OffsetArrays *
  • Roots *
  • SparseArrays *
docs/Project.toml julia
  • ArchGDAL *
  • CairoMakie *
  • ColorSchemes *
  • Documenter *
  • GeometryBasics *
  • Graphs *
  • Images *
  • LazyArtifacts *
  • Literate *
  • NonlinearSolve *
  • SurfaceWaterIntegratedModeling *

Score: -Infinity