Skip to main content

ewatercycle

image

A Python package for running hydrological models.

Test CI Lint CI Build CI codecov Documentation Status PyPI image image Research Software Directory Badge SQAaaS badge shields.io Open in Dev Containers

The eWaterCycle package makes it easier to use hydrological models without having intimate knowledge about how to install and run the models.

Install

The ewatercycle package needs some geospatial non-python packages to generate forcing data. It is preferred to create a Conda environment to install those dependencies:

curl -o conda-lock.yml https://raw.githubusercontent.com/eWaterCycle/ewatercycle/main/conda-lock.yml
conda install mamba conda-lock -n base -c conda-forge -y
conda-lock install --no-dev -n ewatercycle
conda activate ewatercycle

The ewatercycle package is installed with

pip install ewatercycle

The ewatercycle package ships without any models. Models are packaged in plugins. To install all endorsed plugins use

pip install ewatercycle-hype ewatercycle-lisflood ewatercycle-marrmot ewatercycle-pcrglobwb ewatercycle-wflow ewatercycle-leakybucket

Besides installing software you will need to create a configuration file, download several data sets and get container images. See the system setup chapter for instructions.

Usage

Example using the Marrmot M14 (TOPMODEL) hydrological model on Rhine catchment to generate forcing, run it and produce a hydrograph.

In condensed code:
forcing = ewatercycle.forcing.sources["MarrmotForcing"].generate(...)
model = ewatercycle.models.sources["MarrmotM14"](forcing)
model.setup(...)
model.initialize()
while model.time < model.end_time:
    model.update()
    value = model.get_value_as_xarray("flux_out_Q")
model.finalize()
ewatercycle.analysis.hydrograph(...)

(Click to see real code)

In real code:
import ewatercycle.analysis
import ewatercycle.forcing
import ewatercycle.models
import ewatercycle.observation.grdc
from ewatercycle.testing.fixtures import rhine_shape
import shapefile
import xarray as xr

forcing = ewatercycle.forcing.sources["MarrmotForcing"].generate(
    dataset="ERA5",
    start_time="2010-01-01T00:00:00Z",
    end_time="2010-12-31T00:00:00Z",
    shape=rhine_shape(),
)

model = ewatercycle.models.sources["MarrmotM14"](version="2020.11", forcing=forcing)

cfg_file, cfg_dir = model.setup(
    threshold_flow_generation_evap_change=0.1,
)

model.initialize(cfg_file)

# flux_out_Q unit conversion factor from mm/day to m3/s
sf = shapefile.Reader(rhine_shape())
area = sf.record(0)["SUB_AREA"] * 1e6  # from shapefile in m2
conversion_mmday2m3s = 1 / (1000 * 24 * 60 * 60)
conversion = conversion_mmday2m3s * area

simulated_discharge = []
while model.time < model.end_time:
    model.update()
    simulated_discharge.append(model.get_value_as_xarray("flux_out_Q"))

observations_ds = ewatercycle.observation.grdc.get_grdc_data(
    station_id=6335020,  # Rees, Germany
    start_time=model.start_time_as_isostr,
    end_time=model.end_time_as_isostr,
    column="observation",
)

# Combine the simulated discharge with the observations
sim_da = xr.concat(simulated_discharge, dim="time") * conversion
sim_da.name = "simulated"
discharge = xr.merge([sim_da, observations_ds["observation"]]).to_dataframe()
discharge = discharge[["observation", "simulated"]].dropna()

ewatercycle.analysis.hydrograph(discharge, reference="observation")

model.finalize()

More examples can be found in the plugins listed in the documentation.

Contributing

If you want to contribute to the development of ewatercycle package, have a look at the contribution guidelines.

License

Copyright (c) 2018 - 2024, Netherlands eScience Center & Delft University of Technology

Apache Software License 2.0

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ewatercycle-2.5.0.tar.gz (249.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ewatercycle-2.5.0-py3-none-any.whl (131.7 kB view details)

Uploaded Python 3

File details

Details for the file ewatercycle-2.5.0.tar.gz.

File metadata

  • Download URL: ewatercycle-2.5.0.tar.gz
  • Upload date:
  • Size: 249.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.0

File hashes

Hashes for ewatercycle-2.5.0.tar.gz
Algorithm Hash digest
SHA256 16fd4daf0835553f0607c69aec1b8f8dd8fe13383ccbc1999e09e710f77fb60b
MD5 73b746b6c14f7329359662457d9b6130
BLAKE2b-256 5c44bbec82380345ee716a6ade03b28957ff1ffc5f01c85b2c242f79f303b0bc

See more details on using hashes here.

File details

Details for the file ewatercycle-2.5.0-py3-none-any.whl.

File metadata

  • Download URL: ewatercycle-2.5.0-py3-none-any.whl
  • Upload date:
  • Size: 131.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/7.0.0 CPython/3.14.0

File hashes

Hashes for ewatercycle-2.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 5917bade5560fcba40acf85bb895a9dd996ab597d7269674d78c59bfae8c8ff5
MD5 3aca1aee7c88777e4128a6534a1c6084
BLAKE2b-256 cc53eb14f2b201d7f371d040e976f4f24f0b134eb049a3343c013dc8ba776777

See more details on using hashes here.

Release history Release notifications | RSS feed

This release

2.5.0 This release

2 files

2.4.0

2 files

2.3.1

2 files

2.3.0

2 files

2.2.0

2 files

2.1.1

2 files

2.1.0

2 files

2.0.0

2 files

1.4.1

2 files

1.4.0

2 files

1.3.0

2 files

1.2.0

2 files

1.1.4

2 files

1.1.3

2 files

1.1.2

2 files

1.1.1

2 files

1.1.0

2 files

1.0.0

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page