跳转到主要内容

运行和验证水文模型的Python包

项目描述

ewatercycle

image

一个用于运行水文模型的 Python 软件包。

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

ewatercycle 软件包使得使用水文模型变得更加容易,无需深入了解如何安装和运行模型。

  • 使用容器以隔离和便携的方式运行模型,通过 grpc4bmi
  • 使用 ESMValTool 生成模型所需的降雨和阳光数据
  • 支持来自 GRDC 或 USGS 的观测数据
  • 提供简单的接口,快速上手

安装

ewatercycle 软件包需要一些地理空间非 Python 软件包来生成强迫数据。建议创建一个 Conda 环境,以安装这些依赖项

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

使用以下命令安装 ewatercycle 软件包:

pip install ewatercycle

ewatercycle 软件包不包含任何模型。模型打包在 插件 中。要安装所有推荐插件,请使用以下命令:

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

除了安装软件外,您还需要创建一个配置文件,下载几个数据集,并获取容器镜像。有关说明,请参阅 系统设置章节

使用方法

以下示例使用 Marrmot M14 (TOPMODEL) 水文模型在莱茵河流域生成强迫数据、运行它并生成洪水过程线。

在压缩代码中
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(...)

(点击查看真实代码)

在真实代码中
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()

更多示例可以在 文档 中列出的插件中找到。

贡献

如果您想为 ewatercycle 软件包的开发做出贡献,请查看 贡献指南

许可证

版权(c)2018 - 2024,荷兰 eScience 中心 & 代尔夫特理工大学

Apache 软件许可证 2.0

项目详情


下载文件

下载适用于您平台的项目文件。如果您不确定要选择哪个,请了解更多关于 安装软件包 的信息。

源分布

ewatercycle-2.3.1.tar.gz (227.6 kB 查看散列值)

上传于 源码

构建分发版

ewatercycle-2.3.1-py3-none-any.whl (121.1 kB 查看哈希值)

上传于 Python 3

由以下支持