{"id":350823,"name":"hydromodel","description":"A Python implementation of conceptual hydrological models, with a focus on the XinAnJiang (XAJ) model, one of the most widely-used rainfall-runoff models, especially in China and Asian regions.","url":"https://github.com/ouyangwenyu/hydromodel","last_synced_at":"2026-05-12T13:30:18.130Z","repository":{"id":38305445,"uuid":"182603604","full_name":"OuyangWenyu/hydromodel","owner":"OuyangWenyu","description":"新安江等水文模型","archived":false,"fork":false,"pushed_at":"2025-12-05T09:43:28.000Z","size":40730,"stargazers_count":242,"open_issues_count":7,"forks_count":124,"subscribers_count":5,"default_branch":"master","last_synced_at":"2026-05-03T09:06:10.486Z","etag":null,"topics":["gr4j","hydrological-modelling","hymod","xinanjiang"],"latest_commit_sha":null,"homepage":"","language":"Jupyter Notebook","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/OuyangWenyu.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"docs/contributing.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":"AUTHORS.rst","dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2019-04-22T01:41:35.000Z","updated_at":"2026-04-21T03:07:52.000Z","dependencies_parsed_at":"2025-01-12T12:24:01.402Z","dependency_job_id":"3c20a060-0657-4cde-91a8-e2c4ca5219c1","html_url":"https://github.com/OuyangWenyu/hydromodel","commit_stats":null,"previous_names":["ouyangwenyu/hydromodel","ouyangwenyu/hydro-model-xaj"],"tags_count":17,"template":false,"template_full_name":null,"purl":"pkg:github/OuyangWenyu/hydromodel","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OuyangWenyu%2Fhydromodel","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OuyangWenyu%2Fhydromodel/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OuyangWenyu%2Fhydromodel/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OuyangWenyu%2Fhydromodel/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/OuyangWenyu","download_url":"https://codeload.github.com/OuyangWenyu/hydromodel/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/OuyangWenyu%2Fhydromodel/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32734391,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-07T02:14:30.463Z","status":"ssl_error","status_checked_at":"2026-05-07T02:14:29.405Z","response_time":62,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"owner":{"login":"OuyangWenyu","name":"OuyangWenyu","uuid":"10172837","kind":"user","description":"","email":"","website":null,"location":"Dalian, China","twitter":null,"company":"Dalian University of Technology","icon_url":"https://avatars.githubusercontent.com/u/10172837?u=b4a66b7f9e3e9680dccc8c3a9998a74758390501\u0026v=4","repositories_count":6,"last_synced_at":"2023-03-06T14:39:34.411Z","metadata":{"has_sponsors_listing":false},"html_url":"https://github.com/OuyangWenyu","funding_links":[],"total_stars":null,"followers":null,"following":null,"created_at":"2022-11-16T16:54:34.689Z","updated_at":"2023-03-06T14:39:34.443Z","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/OuyangWenyu","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/OuyangWenyu/repositories"},"packages":[],"commits":{"id":11171150,"full_name":"OuyangWenyu/hydromodel","default_branch":"master","total_commits":187,"total_committers":6,"total_bot_commits":0,"total_bot_committers":0,"mean_commits":31.166666666666668,"dds":0.2887700534759359,"past_year_total_commits":16,"past_year_total_committers":2,"past_year_total_bot_commits":0,"past_year_total_bot_committers":0,"past_year_mean_commits":8.0,"past_year_dds":0.0625,"last_synced_at":"2026-05-09T12:02:07.138Z","last_synced_commit":"674c5c61efbe9778932bfa076a6baeb5d721ad71","created_at":"2025-09-15T10:41:36.454Z","updated_at":"2026-05-09T12:02:04.730Z","committers":[{"name":"ouyangwenyu","email":"wenyuouyang@outlook.com","login":"OuyangWenyu","count":133},{"name":"owenyy","email":"ouyangwenyu@mail.dlut.edu.cn","login":null,"count":26},{"name":"zhuanglaihong","email":"zhuanglaihong@gmail.com","login":"zhuanglaihong","count":15},{"name":"wangjingyi1999","email":"115329855+wangjingyi1999","login":"wangjingyi1999","count":10},{"name":"wangmengyun","email":"wmyun1998@163.com","login":"wangmengyun1998","count":2},{"name":"xiaoning","email":"qliuxiaoning@outlook.com","login":"xiaonig","count":1}],"past_year_committers":[{"name":"zhuanglaihong","email":"zhuanglaihong@gmail.com","login":"zhuanglaihong","count":15},{"name":"OuyangWenyu","email":"wenyuouyang@outlook.com","login":"OuyangWenyu","count":1}],"commits_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories/OuyangWenyu%2Fhydromodel/commits","host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-05-11T00:00:23.725Z","repositories_count":6232597,"commits_count":895080561,"contributors_count":34896445,"owners_count":1151531,"icon_url":"https://github.com/github.png","host_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://commits.ecosyste.ms/api/v1/hosts/GitHub/repositories"}},"issues_stats":{"full_name":"OuyangWenyu/hydromodel","html_url":"https://github.com/OuyangWenyu/hydromodel","last_synced_at":"2026-04-19T02:00:49.395Z","status":"error","issues_count":2,"pull_requests_count":0,"avg_time_to_close_issue":11350.0,"avg_time_to_close_pull_request":null,"issues_closed_count":1,"pull_requests_closed_count":0,"pull_request_authors_count":0,"issue_authors_count":2,"avg_comments_per_issue":0.0,"avg_comments_per_pull_request":null,"merged_pull_requests_count":0,"bot_issues_count":0,"bot_pull_requests_count":0,"past_year_issues_count":2,"past_year_pull_requests_count":0,"past_year_avg_time_to_close_issue":11350.0,"past_year_avg_time_to_close_pull_request":null,"past_year_issues_closed_count":1,"past_year_pull_requests_closed_count":0,"past_year_pull_request_authors_count":0,"past_year_issue_authors_count":2,"past_year_avg_comments_per_issue":0.0,"past_year_avg_comments_per_pull_request":null,"past_year_bot_issues_count":0,"past_year_bot_pull_requests_count":0,"past_year_merged_pull_requests_count":0,"created_at":"2025-08-30T17:49:25.441Z","updated_at":"2026-04-19T02:00:49.395Z","repository_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/OuyangWenyu%2Fhydromodel","issues_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories/OuyangWenyu%2Fhydromodel/issues","issue_labels_count":{"bug":5},"pull_request_labels_count":{},"issue_author_associations_count":{"NONE":27,"CONTRIBUTOR":1},"pull_request_author_associations_count":{},"issue_authors":{"KiltAB":5,"HarryYuGuangzhou":2,"iFence":2,"Myfootnotsmelly":2,"Wushaox":2,"zhaoliyang1":2,"Smile-L-up":2,"chqbb":1,"xyh-994-star":1,"KmBase":1,"yizhih":1,"Billcui123":1,"Jealours":1,"shituxingzhehhl":1,"wangjingyi1999":1,"funny000":1,"nnuxdw":1,"xuzifann":1},"pull_request_authors":{},"host":{"name":"GitHub","url":"https://github.com","kind":"github","last_synced_at":"2026-04-21T00:00:07.919Z","repositories_count":14343933,"issues_count":34464231,"pull_requests_count":112834145,"authors_count":11241391,"icon_url":"https://github.com/github.png","host_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/repositories","owners_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/owners","authors_url":"https://issues.ecosyste.ms/api/v1/hosts/GitHub/authors"},"past_year_issue_labels_count":{},"past_year_pull_request_labels_count":{},"past_year_issue_author_associations_count":{},"past_year_pull_request_author_associations_count":{},"past_year_issue_authors":{},"past_year_pull_request_authors":{},"maintainers":[],"active_maintainers":[]},"events":{"total":{"ReleaseEvent":6,"DeleteEvent":2,"MemberEvent":2,"ForkEvent":19,"IssuesEvent":3,"WatchEvent":47,"IssueCommentEvent":2,"PushEvent":24,"CreateEvent":2},"last_year":{"ReleaseEvent":5,"DeleteEvent":2,"MemberEvent":2,"ForkEvent":8,"WatchEvent":23,"PushEvent":20}},"keywords":["gr4j","hydrological-modelling","hymod","xinanjiang"],"dependencies":[{"ecosystem":"pypi","filepath":"setup.py","sha":null,"kind":"manifest","created_at":"2023-12-18T01:37:57.251Z","updated_at":"2023-12-18T01:37:57.251Z","repository_link":"https://github.com/OuyangWenyu/hydromodel/blob/master/setup.py","dependencies":[]},{"ecosystem":"actions","filepath":".github/workflows/docs-build.yml","sha":null,"kind":"manifest","created_at":"2024-05-23T03:47:48.644Z","updated_at":"2024-05-23T03:47:48.644Z","repository_link":"https://github.com/OuyangWenyu/hydromodel/blob/master/.github/workflows/docs-build.yml","dependencies":[{"id":18235464912,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v3","direct":true,"kind":"composite","optional":false},{"id":18235464913,"package_name":"actions/setup-python","ecosystem":"actions","requirements":"v4","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/docs.yml","sha":null,"kind":"manifest","created_at":"2024-05-23T03:47:48.651Z","updated_at":"2024-05-23T03:47:48.651Z","repository_link":"https://github.com/OuyangWenyu/hydromodel/blob/master/.github/workflows/docs.yml","dependencies":[{"id":18235464914,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v3","direct":true,"kind":"composite","optional":false},{"id":18235464915,"package_name":"actions/setup-python","ecosystem":"actions","requirements":"v4","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/macos.yml","sha":null,"kind":"manifest","created_at":"2024-05-23T03:47:48.656Z","updated_at":"2024-05-23T03:47:48.656Z","repository_link":"https://github.com/OuyangWenyu/hydromodel/blob/master/.github/workflows/macos.yml","dependencies":[{"id":18235464923,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v3","direct":true,"kind":"composite","optional":false},{"id":18235464924,"package_name":"actions/setup-python","ecosystem":"actions","requirements":"v4","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/pypi.yml","sha":null,"kind":"manifest","created_at":"2024-05-23T03:47:48.663Z","updated_at":"2024-05-23T03:47:48.663Z","repository_link":"https://github.com/OuyangWenyu/hydromodel/blob/master/.github/workflows/pypi.yml","dependencies":[{"id":18235464925,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v3","direct":true,"kind":"composite","optional":false},{"id":18235464926,"package_name":"actions/setup-python","ecosystem":"actions","requirements":"v4","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/ubuntu.yml","sha":null,"kind":"manifest","created_at":"2024-05-23T03:47:48.672Z","updated_at":"2024-05-23T03:47:48.672Z","repository_link":"https://github.com/OuyangWenyu/hydromodel/blob/master/.github/workflows/ubuntu.yml","dependencies":[{"id":18235464927,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v3","direct":true,"kind":"composite","optional":false},{"id":18235464928,"package_name":"actions/setup-python","ecosystem":"actions","requirements":"v4","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"actions","filepath":".github/workflows/windows.yml","sha":null,"kind":"manifest","created_at":"2024-05-23T03:47:48.686Z","updated_at":"2024-05-23T03:47:48.686Z","repository_link":"https://github.com/OuyangWenyu/hydromodel/blob/master/.github/workflows/windows.yml","dependencies":[{"id":18235464929,"package_name":"actions/checkout","ecosystem":"actions","requirements":"v3","direct":true,"kind":"composite","optional":false},{"id":18235464930,"package_name":"conda-incubator/setup-miniconda","ecosystem":"actions","requirements":"v2","direct":true,"kind":"composite","optional":false}]},{"ecosystem":"pypi","filepath":"requirements.txt","sha":null,"kind":"manifest","created_at":"2024-05-23T03:47:48.753Z","updated_at":"2024-05-23T03:47:48.753Z","repository_link":"https://github.com/OuyangWenyu/hydromodel/blob/master/requirements.txt","dependencies":[{"id":18235464931,"package_name":"ipykernel","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":18235464932,"package_name":"numba","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":18235464933,"package_name":"scikit-learn","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":18235464934,"package_name":"deap","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":18235464935,"package_name":"spotpy","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":18235464936,"package_name":"pytest","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":18235464937,"package_name":"bmipy","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":18235464938,"package_name":"pyyaml","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":18235464939,"package_name":"requests","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":18235464940,"package_name":"muskingumcunge","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":18235465062,"package_name":"hydrodatasource","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false}]},{"ecosystem":"pypi","filepath":"requirements_dev.txt","sha":null,"kind":"manifest","created_at":"2024-05-23T03:47:58.113Z","updated_at":"2024-05-23T03:47:58.113Z","repository_link":"https://github.com/OuyangWenyu/hydromodel/blob/master/requirements_dev.txt","dependencies":[{"id":18235466110,"package_name":"black","ecosystem":"pypi","requirements":"*","direct":true,"kind":"development","optional":false},{"id":18235466111,"package_name":"pip","ecosystem":"pypi","requirements":"*","direct":true,"kind":"development","optional":false},{"id":18235466112,"package_name":"bump2version","ecosystem":"pypi","requirements":"*","direct":true,"kind":"development","optional":false},{"id":18235466113,"package_name":"wheel","ecosystem":"pypi","requirements":"*","direct":true,"kind":"development","optional":false},{"id":18235466114,"package_name":"watchdog","ecosystem":"pypi","requirements":"*","direct":true,"kind":"development","optional":false},{"id":18235466115,"package_name":"flake8","ecosystem":"pypi","requirements":"*","direct":true,"kind":"development","optional":false},{"id":18235466116,"package_name":"tox","ecosystem":"pypi","requirements":"*","direct":true,"kind":"development","optional":false},{"id":18235466117,"package_name":"coverage","ecosystem":"pypi","requirements":"*","direct":true,"kind":"development","optional":false},{"id":18235466118,"package_name":"Sphinx","ecosystem":"pypi","requirements":"*","direct":true,"kind":"development","optional":false},{"id":18235466119,"package_name":"twine","ecosystem":"pypi","requirements":"*","direct":true,"kind":"development","optional":false},{"id":18235466120,"package_name":"pytest","ecosystem":"pypi","requirements":"*","direct":true,"kind":"development","optional":false},{"id":18235466121,"package_name":"pytest-runner","ecosystem":"pypi","requirements":"*","direct":true,"kind":"development","optional":false},{"id":18235466122,"package_name":"ipykernel","ecosystem":"pypi","requirements":"*","direct":true,"kind":"development","optional":false},{"id":18235466123,"package_name":"numba","ecosystem":"pypi","requirements":"*","direct":true,"kind":"development","optional":false},{"id":18235466124,"package_name":"scikit-learn","ecosystem":"pypi","requirements":"*","direct":true,"kind":"development","optional":false},{"id":18235466125,"package_name":"deap","ecosystem":"pypi","requirements":"*","direct":true,"kind":"development","optional":false},{"id":18235466126,"package_name":"spotpy","ecosystem":"pypi","requirements":"*","direct":true,"kind":"development","optional":false},{"id":18235466127,"package_name":"bmipy","ecosystem":"pypi","requirements":"*","direct":true,"kind":"development","optional":false},{"id":18235466128,"package_name":"pyyaml","ecosystem":"pypi","requirements":"*","direct":true,"kind":"development","optional":false},{"id":18235466129,"package_name":"requests","ecosystem":"pypi","requirements":"*","direct":true,"kind":"development","optional":false},{"id":18235466130,"package_name":"muskingumcunge","ecosystem":"pypi","requirements":"*","direct":true,"kind":"development","optional":false},{"id":18235466131,"package_name":"hydrodatasource","ecosystem":"pypi","requirements":"*","direct":true,"kind":"development","optional":false}]},{"ecosystem":"pypi","filepath":"requirements_docs.txt","sha":null,"kind":"manifest","created_at":"2024-05-23T03:47:58.129Z","updated_at":"2024-05-23T03:47:58.129Z","repository_link":"https://github.com/OuyangWenyu/hydromodel/blob/master/requirements_docs.txt","dependencies":[{"id":18235466132,"package_name":"bump2version","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":18235466133,"package_name":"coverage","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":18235466134,"package_name":"flake8","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":18235466135,"package_name":"ipykernel","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":18235466136,"package_name":"livereload","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":18235466137,"package_name":"nbconvert","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":18235466138,"package_name":"nbformat","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":18235466139,"package_name":"pip","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":18235466140,"package_name":"sphinx","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":18235466141,"package_name":"tox","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":18235466142,"package_name":"twine","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":18235466143,"package_name":"watchdog","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":18235466144,"package_name":"wheel","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":18235466145,"package_name":"mkdocs","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":18235466146,"package_name":"mkdocs-git-revision-date-plugin","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":18235466441,"package_name":"mkdocs-git-revision-date-localized-plugin","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":18235466442,"package_name":"mkdocs-jupyter","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":18235466445,"package_name":"mkdocs-material","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":18235466446,"package_name":"mkdocs-pdf-export-plugin","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":18235470210,"package_name":"mkdocstrings","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":18235470211,"package_name":"mkdocstrings-crystal","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":18235470303,"package_name":"mkdocstrings-python-legacy","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":18235470489,"package_name":"mkdocstrings-python","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":18235470490,"package_name":"pygments","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false},{"id":18235470491,"package_name":"pymdown-extensions","ecosystem":"pypi","requirements":"*","direct":true,"kind":"runtime","optional":false}]}],"score":7.309212365692762,"created_at":"2026-04-06T08:34:19.121Z","updated_at":"2026-05-12T13:30:18.147Z","avatar_url":"https://github.com/OuyangWenyu.png","language":"Jupyter Notebook","category":"Hydrosphere","sub_category":"Freshwater and Hydrology","monthly_downloads":0,"total_dependent_repos":0,"total_dependent_packages":0,"readme":"# hydromodel\n\n[![image](https://img.shields.io/pypi/v/hydromodel.svg)](https://pypi.python.org/pypi/hydromodel)\n[![image](https://img.shields.io/conda/vn/conda-forge/hydromodel.svg)](https://anaconda.org/conda-forge/hydromodel)\n[![image](https://pyup.io/repos/github/OuyangWenyu/hydromodel/shield.svg)](https://pyup.io/repos/github/OuyangWenyu/hydromodel)\n\n**A lightweight Python package for hydrological model calibration and evaluation, featuring the XinAnJiang (XAJ) model.**\n\n- Free software: GNU General Public License v3\n- Documentation: https://OuyangWenyu.github.io/hydromodel\n\n## What is hydromodel\n\n`hydromodel` is a Python implementation of conceptual hydrological models, with a focus on the **XinAnJiang (XAJ) model** - one of the most widely-used rainfall-runoff models, especially in China and Asian regions.\n\n**Key Features:**\n- **XAJ Model Variants**: Standard XAJ and optimized versions (xaj_mz with MizuRoute)\n- **Multiple Calibration Algorithms**:\n  - **SCE-UA**: Shuffled Complex Evolution with spotpy\n  - **GA**: Genetic Algorithm with DEAP\n  - **scipy**: L-BFGS-B, SLSQP, and other gradient-based methods\n- **Multi-Basin Support**: Efficient calibration and evaluation for multiple basins simultaneously\n- **Unified Results Format**: All algorithms save results in standardized JSON + CSV format\n- **Comprehensive Evaluation Metrics**: NSE, KGE, RMSE, PBIAS, and more\n- **Unified API**: Consistent interfaces for calibration, evaluation, and simulation\n- **Flexible Data Integration**: Seamless support for CAMELS datasets via [hydrodataset](https://github.com/OuyangWenyu/hydrodataset) and custom data via [hydrodatasource](https://github.com/OuyangWenyu/hydrodatasource)\n- **Configuration-Based Workflow**: YAML configuration for reproducibility\n- **Progress Tracking**: Real-time progress display and intermediate results saving\n\n## Why hydromodel?\n\n**For Researchers:**\n- Battle-tested XAJ implementations used in published research\n- Configuration-based workflow ensures reproducibility\n- Easy to extend with new models or calibration algorithms\n\n**For Practitioners:**\n- Simple YAML configuration, minimal coding required\n- Handles multi-basin calibration efficiently\n- Integration with global CAMELS series datasets (20+ variants)\n- Clear documentation and examples\n\n## Installation\n\n### For Users\n\n```bash\npip install hydromodel hydrodataset hydrodatasource\n```\n\nOr using `uv` (faster):\n\n```bash\nuv pip install hydromodel hydrodataset hydrodatasource\n```\n\n### Development Setup\n\nFor developers, it is recommended to use `uv` to manage the environment, as this project has local dependencies (e.g., `hydroutils`, `hydrodataset`, `hydrodatasource`).\n\n1. **Clone the repository:**\n   ```bash\n   git clone https://github.com/OuyangWenyu/hydromodel.git\n   cd hydromodel\n   ```\n\n2. **Sync the environment with `uv`:**\n   This command will install all dependencies, including the local editable packages.\n   ```bash\n   uv sync --all-extras\n   ```\n\n### Configuration\n\n#### Option 1: Use Default Paths (Recommended for Quick Start)\n\nNo configuration needed! `hydromodel` automatically uses default paths:\n\n**Default data directory:**\n- **Windows:** `C:\\Users\\YourUsername\\hydromodel_data\\`\n- **macOS/Linux:** `~/hydromodel_data/`\n\nThe default structure (aqua_fetch automatically creates uppercase dataset directories):\n```\n~/hydromodel_data/\n├── datasets-origin/\n│   ├── CAMELS_US/        # CAMELS US dataset (created by aqua_fetch)\n│   ├── CAMELS_AUS/       # CAMELS Australia dataset (if used)\n│   └── ...               # Other datasets\n├── datasets-interim/        # Your custom basin data\n└── ...\n```\n\n#### Option 2: Custom Paths (For Advanced Users)\n\nCreate `~/hydro_setting.yml` to specify custom paths:\n\n```yaml\nlocal_data_path:\n  root: 'D:/data'\n  datasets-origin: 'D:/data'             # For CAMELS datasets (aqua_fetch adds CAMELS_US automatically)\n  datasets-interim: 'D:/data/my_basins'     # For custom data\n```\n\n**Important**: For CAMELS datasets, provide only the `datasets-origin` directory. The system automatically appends the uppercase dataset directory name (e.g., `CAMELS_US`, `CAMELS_AUS`). **If your data is in `D:/data/CAMELS_US/`, set `datasets-origin: 'D:/data'`**.\n\n## How to Use\n\n### 1. Data Preparation\n\n**Using CAMELS Datasets (hydrodataset):**\n\nGetting public datasets using hydrodataset\n\n```bash\npip install hydrodataset\n```\nRun the following code to download data to your directory\n```python\nfrom hydrodataset.camels_us import CamelsUs\n\n# Auto-downloads if not found. Provide datasets-origin directory (e.g., \"D:/data\")\n# aqua_fetch automatically appends dataset name, creating \"D:/data/CAMELS_US/\"\nds = CamelsUs(data_path)\nbasin_ids = ds.read_object_ids()  # Get basin IDs\n```\n\n**Note:** First-time download may take some time. The complete CAMELS dataset is approximately 70GB (including zipped and unzipped files).\n\n**Available datasets:** please see [README.md in hydrodataset](https://github.com/OuyangWenyu/hydrodataset?tab=readme-ov-file#supported-datasets)\n\n**Using Custom Data (hydrodatasource):**\n\nFor your own data to be read using hydrodatasource, it needs to be prepared in the format of  `selfmadehydrodataset` :\n\n```bash\npip install hydrodatasource\n```\n\n**Data structure:**\n```\n/path/to/your_data_root/\n    └── my_custom_dataset/              # your dataset name\n        ├── attributes/\n        │   └── attributes.csv\n        ├── shapes/\n        │   └── basins.shp\n        └── timeseries/\n            ├── 1D/                     # One sub folder per time resolution (e.g. 1D/3h/1h)\n            │   ├── basin_01.csv\n            │   ├── basin_02.csv\n            │   └── ...\n            └── 1D_units_info.json      # JSON file containing unit information\n```\n\n**Required files and formats:**\n\n1. **attributes/attributes.csv**: Basin metadata with required columns\n   - `basin_id`: Unique basin identifier (e.g., \"basin_001\")\n   - `area`: Basin area in km² (mapped to `basin_area` internally)\n   - Additional columns: Any basin attributes (e.g., elevation, slope)\n\n2. **shapes/basins.shp**: Basin boundary shapefiles (all 4 files required: .shp, .shx, .dbf, .prj)\n   - Must contain `BASIN_ID` column (uppercase) matching basin IDs in attributes.csv\n   - Geometries: Polygon features defining basin boundaries\n   - Coordinate system: Any valid CRS (e.g., EPSG:4326 for WGS84)\n\n3. **timeseries/{time_scale}/{basin_id}.csv**: Time series data for each basin\n   - `time`: Datetime column (e.g., \"2010-01-01\")\n   - Variable columns: `prcp`, `PET`, `streamflow` (or your chosen variable names)\n   - Format: CSV with header row\n\n4. **timeseries/{time_scale}_units_info.json**: Variable units metadata\n   - JSON format: `{\"variable_name\": \"unit\"}` (e.g., `{\"prcp\": \"mm/day\"}`)\n   - Must match variable names in time series files\n\n\nFor detailed format specifications and examples, see:\n- [Data Guide](docs/data_guide.md) - Complete guide for both CAMELS and custom data\n- [hydrodatasource documentation](https://github.com/OuyangWenyu/hydrodatasource) - Source package\n- `configs/example_config_selfmade.yaml` - Complete configuration example for custom datasets\n\n### 2. Quick Start: Calibration, Evaluation, Simulation, and Visualization\n\n**Option 1: Use Command-Line Scripts (Recommended for Beginners)**\n\nWe provide ready-to-use scripts for model calibration, evaluation, simulation, and visualization:\n\n```bash\n# 1. Calibration (saves config files by default)\npython scripts/run_xaj_calibration.py --config configs/example_config.yaml\n\n# 2. Evaluation on test period\npython scripts/run_xaj_evaluate.py --calibration-dir results/xaj_mz_SCE_UA \n\n# 3. Simulation with custom parameters (no calibration required!)\npython scripts/run_xaj_simulate.py --config configs/example_simulate_config.yaml --param-file configs/example_xaj_params.yaml --plot\n\n# 4. Visualization (time series plots with precipitation and streamflow)\npython scripts/visualize.py --eval-dir results/xaj_mz_SCE_UA/evaluation_test\n\n# Visualize specific basins\npython scripts/visualize.py --eval-dir results/xaj_mz_SCE_UA/evaluation_test --basins 01013500\n\n```\n\n**Configuration Files:**\n\nEdit the appropriate configuration file for your data type:\n- `configs/example_config.yaml` - For continuous time series data (e.g., CAMELS datasets)\n- `configs/example_config_selfmade.yaml` - For custom data and flood event datasets\n\nAll configuration options work with the same unified API. For detailed flood event data usage, see [Usage Guide - Flood Event Data](docs/usage.md#flood-event-data).\n\n**Option 2: Use Python API (For Advanced Users)**\n\n```python\nfrom hydromodel.trainers.unified_calibrate import calibrate\nfrom hydromodel.trainers.unified_evaluate import evaluate\n\nconfig = {\n    \"data_cfgs\": {\n        \"data_source_type\": \"camels_us\",\n        \"basin_ids\": [\"01013500\"],\n        \"train_period\": [\"1985-10-01\", \"1995-09-30\"],\n        \"test_period\": [\"2005-10-01\", \"2014-09-30\"],\n        \"warmup_length\": 365,\n        \"variables\": [\"precipitation\", \"potential_evapotranspiration\", \"streamflow\"]\n    },\n    \"model_cfgs\": {\n        \"model_name\": \"xaj_mz\",\n    },\n    \"training_cfgs\": {\n        \"algorithm_name\": \"SCE_UA\",\n        \"algorithm_params\": {\"rep\": 5000, \"ngs\": 1000},\n        \"loss_config\": {\"type\": \"time_series\", \"obj_func\": \"RMSE\"},\n        \"output_dir\": \"results\",\n        \"experiment_name\": \"my_experiment\",\n    },\n    \"evaluation_cfgs\": {\n        \"metrics\": [\"NSE\", \"KGE\", \"RMSE\"],\n    },\n}\n\nresults = calibrate(config)  # Calibrate\nevaluate(config, param_dir=\"results/my_experiment\", eval_period=\"test\")  # Evaluate\n```\n\nResults are saved in the `results/` directory.\n\n## Core API\n\n### Configuration Structure\n\nThe unified API uses a configuration dictionary with four main sections:\n\n```python\nconfig = {\n    \"data_cfgs\": {\n        \"data_source_type\": \"camels_us\",       # Dataset type\n        \"basin_ids\": [\"01013500\"],             # Basin IDs to calibrate\n        \"train_period\": [\"1990-10-01\", \"2000-09-30\"],\n        \"test_period\": [\"2000-10-01\", \"2010-09-30\"],\n        \"warmup_length\": 365,                  # Warmup days\n        \"variables\": [\"precipitation\", \"potential_evapotranspiration\", \"streamflow\"],\n    },\n    \"model_cfgs\": {\n        \"model_name\": \"xaj_mz\",                # Model variant\n        \"model_params\": {\n            \"source_type\": \"sources\",\n            \"source_book\": \"HF\",\n            \"kernel_size\": 15,                 # Muskingum routing kernel\n        },\n    },\n    \"training_cfgs\": {\n        \"algorithm_name\": \"GA\",                # Algorithm: SCE_UA, GA, or scipy\n\n        # Algorithm-specific parameters (choose one based on algorithm_name)\n\n        # For SCE-UA (Shuffled Complex Evolution):\n        \"SCE_UA\": {\n            \"rep\": 1000,                       # Iterations (5000+ recommended)\n            \"ngs\": 1000,                       # Number of complexes\n            \"kstop\": 500,                      # Stop if no improvement\n            \"peps\": 0.1,                       # Parameter convergence\n            \"pcento\": 0.1,                     # Percentage change allowed\n            \"random_seed\": 1234,\n        },\n\n        # For GA (Genetic Algorithm):\n        \"GA\": {\n            \"pop_size\": 80,                    # Population size\n            \"n_generations\": 50,               # Generations (100+ recommended)\n            \"cx_prob\": 0.7,                    # Crossover probability\n            \"mut_prob\": 0.2,                   # Mutation probability\n            \"random_seed\": 1234,\n        },\n\n        # For scipy (gradient-based optimization):\n        \"scipy\": {\n            \"method\": \"SLSQP\",                 # L-BFGS-B, SLSQP, TNC, etc.\n            \"max_iterations\": 500,             # Maximum iterations\n        },\n\n        \"loss_config\": {\n            \"type\": \"time_series\",\n            \"obj_func\": \"RMSE\",                # RMSE, NSE, or KGE\n        },\n        \"output_dir\": \"results\",\n        \"experiment_name\": \"my_exp\",\n        \"save_config\": True,                   # Save config files to output directory (default: True)\n    },\n    \"evaluation_cfgs\": {\n        \"metrics\": [\"NSE\", \"KGE\", \"RMSE\", \"PBIAS\"],\n    },\n}\n```\n**Configuration for custom datasets:**\n\nSee `configs/example_config_selfmade.yaml` for a complete example. Custom datasets require additional parameters:\n\n```python\n\"data_cfgs\": {\n  \"dataset\": \"selfmadehydrodataset\"     # or \"floodevent\" for flood event data\n  \"dataset_name\": \"my_basin_data\"       # Your dataset folder name (REQUIRED)\n  \"time_unit\": [\"1D\"]                  # Time resolution (e.g., [\"1h\"], [\"3h\"], [\"1D\"])\n  \"datasource_kwargs\":{                # Optional additional parameters\n    \"offset_to_utc\": False             # Whether to convert local time to UTC\n    }              \n  \"is_event_data\": True                # Whether floodevent data\n  # ... other standard parameters (basin_ids, variables, periods, etc.)\n```\n\n**Key differences from CAMELS datasets:**\n- `dataset_name`: Specifies your custom dataset folder name (required)\n- `time_unit`: Must match the subdirectory names in `timeseries/` folder\n- `datasource_kwargs`: Optional parameters for data preprocessing\n\n### Calibration API\n\n```python\nfrom hydromodel.trainers.unified_calibrate import calibrate\n\nresults = calibrate(config)\n```\n\n**Output:** Calibration results saved to `{output_dir}/{experiment_name}/`\n\n**Saved files:**\n```\nresults/my_exp/\n├── calibration_results.json          # Best parameters for all basins (unified format)\n├── {basin_id}_sceua.csv              # SCE-UA detailed iteration history\n├── {basin_id}_ga.csv                 # GA generation history with parameters\n├── {basin_id}_scipy.csv              # scipy iteration history with parameters\n├── calibration_config.yaml           # Configuration used (saved if save_config=True)\n└── param_range.yaml                  # Parameter ranges for current model only (saved if save_config=True)\n```\n\n**Notes:**\n- `calibration_results.json`: Always saved, contains best parameters\n- `calibration_config.yaml` and `param_range.yaml`: Only saved if `save_config=True` (default)\n- `param_range.yaml`: Contains parameter ranges for the current model only (e.g., only `xaj_mz`, not all models)\n- In `calibration_config.yaml`, `param_range_file` is set to the actual saved path\n\n**Available algorithms:**\n- `SCE_UA` / `sceua`: Shuffled Complex Evolution (recommended for global optimization)\n- `GA` / `genetic_algorithm`: Genetic Algorithm with DEAP (flexible, handles complex landscapes)\n- `scipy` / `scipy_minimize`: scipy.optimize methods (fast for smooth objectives)\n\n### Evaluation API\n\n```python\nfrom hydromodel.trainers.unified_evaluate import evaluate\n\n# Evaluate on test period\ntest_results = evaluate(config, param_dir=\"results/my_exp\", eval_period=\"test\")\n\n# Evaluate on training period\ntrain_results = evaluate(config, param_dir=\"results/my_exp\", eval_period=\"train\")\n\n# Evaluate on custom period\ncustom_results = evaluate(\n    config,\n    param_dir=\"results/my_exp\",\n    eval_period=\"custom\",\n    custom_period=[\"2010-10-01\", \"2015-09-30\"]\n)\n```\n\n**Output:** Evaluation results in `{param_dir}/evaluation_{period}/`\n- `basins_metrics.csv` - Performance metrics\n- `basins_norm_params.csv` - Calibrated parameters (normalized [0,1])\n- `basins_denorm_params.csv` - Denormalized parameters (physical values)\n- `xaj_mz_evaluation_results.nc` - Full simulation results (NetCDF)\n\n**Parameter Loading Priority:**\n1. `calibration_results.json` (⭐ Recommended, works for all algorithms)\n2. `{basin_id}_ga.csv` (GA algorithm CSV)\n3. `{basin_id}_scipy.csv` (scipy algorithm CSV)\n4. `{basin_id}_sceua.csv` (SCE-UA algorithm CSV)\n5. `{basin_id}_calibrate_params.txt` (Legacy format)\n\n**Available metrics:** NSE, KGE, RMSE, PBIAS, FHV, FLV, FMS\n\n### Understanding Results Format\n\n**calibration_results.json structure:**\n```json\n{\n  \"01013500\": {\n    \"convergence\": \"success\",\n    \"objective_value\": 1.234567,\n    \"best_params\": {\n      \"xaj\": {\n        \"K\": 0.567890,\n        \"B\": 0.234567,\n        \"IM\": 0.045678,\n        ...\n      }\n    },\n    \"algorithm_info\": {\n      \"generations\": 50,\n      \"population_size\": 80,\n      ...\n    }\n  }\n}\n```\n\n**CSV files (GA/scipy) structure:**\n```csv\ngeneration,objective_value,param_K,param_B,param_IM,...\n0,3.456,0.567,0.234,0.045,...\n1,2.345,0.589,0.256,0.047,...\n```\n\n**Why two formats?**\n- **JSON**: Best parameters only, works with all algorithms, used by evaluation\n- **CSV**: Full iteration/generation history, useful for convergence analysis\n\n### Simulation API\n\n**Important:** Simulation does NOT require prior calibration!\n\n`UnifiedSimulator` provides a flexible interface for running model simulations with any parameter values:\n\n```python\nfrom hydromodel.trainers.unified_simulate import UnifiedSimulator\nfrom hydromodel.datasets.unified_data_loader import UnifiedDataLoader\n\n# Load data\ndata_loader = UnifiedDataLoader(config[\"data_cfgs\"])\np_and_e, qobs = data_loader.load_data()\n\n# Define parameters (from calibration, literature, or custom values)\nparameters = {\n    \"K\": 0.75, \"B\": 0.25, \"IM\": 0.06,\n    \"UM\": 18.0, \"LM\": 80.0, \"DM\": 95.0,\n    # ... other parameters\n}\n\n# Create simulator\nmodel_config = {\n    \"model_name\": \"xaj_mz\",\n    \"parameters\": parameters\n}\nsimulator = UnifiedSimulator(model_config, basin_config)\n\n# Run simulation\nresults = simulator.simulate(\n    inputs=p_and_e,\n    qobs=qobs,\n    warmup_length=365\n)\n\n# Extract results\nqsim = results[\"qsim\"]  # Simulated streamflow\n```\n\n**Command-line usage:**\n\n```bash\n# Using custom parameters (works with any parameter values)\npython scripts/run_xaj_simulate.py \\\n    --config configs/example_simulate_config.yaml \\\n    --param-file configs/example_xaj_params.yaml \\\n    --output simulation_results.csv \\\n    --plot\n\n# Using calibrated parameters from SCE-UA (CSV format)\npython scripts/run_xaj_simulate.py \\\n    --param-file results/xaj_mz_SCE_UA/01013500_sceua.csv \\\n    --plot\n```\n\n**Use cases:**\n- Parameter sensitivity analysis\n- Model comparison\n- Scenario testing with custom parameters\n- Literature parameter validation\n\nFor detailed API documentation and advanced usage, see [Usage Guide - Model Simulation](docs/usage.md#model-simulation).\n\n## Project Structure\n\n```\nhydromodel/\n├── hydromodel/\n│   ├── models/                      # Model implementations\n│   │   ├── xaj.py                   # Standard XAJ model\n│   │   ├── gr4j.py                  # GR4J model\n│   │   └── ...\n│   ├── trainers/                    # Calibration, evaluation, and simulation\n│   │   ├── unified_calibrate.py     # Calibration API\n│   │   ├── unified_evaluate.py      # Evaluation API\n│   │   └── unified_simulate.py      # Simulation API\n│   └── datasets/                    # Data preprocessing and visualization\n│       ├── unified_data_loader.py   # Data loader\n│       ├── data_visualize.py        # Visualization functions\n│       └── ...\n├── scripts/                         # Command-line interface scripts\n│   ├── run_xaj_calibration.py       # Calibration script\n│   ├── run_xaj_evaluate.py          # Evaluation script\n│   ├── run_xaj_simulate.py          # Simulation script\n│   └── visualize.py                 # Visualization CLI\n├── configs/                         # Configuration files\n└── docs/                            # Documentation\n```\n\n## Documentation\n\n- **Quick Start**: [docs/quickstart.md](docs/quickstart.md)\n- **Usage Guide**: [docs/usage.md](docs/usage.md)\n- **API Reference**: https://OuyangWenyu.github.io/hydromodel\n\n## References\n\n- Allen, R.G., L. Pereira, D. Raes, and M. Smith, 1998. Crop Evapotranspiration, Food and Agriculture Organization of\n  the United Nations, Rome, Italy. FAO publication 56. ISBN 92-5-104219-5. 290p.\n- Duan, Q., Sorooshian, S., and Gupta, V. (1992), Effective and efficient global optimization for conceptual\n  rainfall-runoff models, Water Resour. Res., 28( 4), 1015– 1031, doi:10.1029/91WR02985.\n- François-Michel De Rainville, Félix-Antoine Fortin, Marc-André Gardner, Marc Parizeau, and Christian Gagné. 2012.\n  DEAP: a python framework for evolutionary algorithms. In Proceedings of the 14th annual conference companion on\n  Genetic and evolutionary computation (GECCO '12). Association for Computing Machinery, New York, NY, USA, 85–92.\n  DOI:https://doi.org/10.1145/2330784.2330799\n- Houska T, Kraft P, Chamorro-Chavez A, Breuer L (2015) SPOTting Model Parameters Using a Ready-Made Python Package.\n  PLoS ONE 10(12): e0145180. https://doi.org/10.1371/journal.pone.0145180\n- Mizukami, N., Clark, M. P., Sampson, K., Nijssen, B., Mao, Y., McMillan, H., Viger, R. J., Markstrom, S. L., Hay, L.\n  E., Woods, R., Arnold, J. R., and Brekke, L. D.: mizuRoute version 1: a river network routing tool for a continental\n  domain water resources applications, Geosci. Model Dev., 9, 2223–2238, https://doi.org/10.5194/gmd-9-2223-2016, 2016.\n- Zhao, R.J., Zhuang, Y. L., Fang, L. R., Liu, X. R., Zhang, Q. S. (ed) (1980) The Xinanjiang model, Hydrological\n  Forecasting Proc., Oxford Symp., IAHS Publication, Wallingford, U.K.\n- Zhao, R.J., 1992. The xinanjiang model applied in China. J Hydrol 135 (1–4), 371–381.\n\n**Related Projects:**\n- [hydrodataset](https://github.com/OuyangWenyu/hydrodataset) - CAMELS and other datasets\n- [hydrodatasource](https://github.com/OuyangWenyu/hydrodatasource) - Data preparation utilities\n- [torchhydro](https://github.com/OuyangWenyu/torchhydro) - PyTorch-based hydrological models\n\n## Citation\n\nIf you use hydromodel in your research, please cite:\n\n```bibtex\n@software{hydromodel,\n  author = {Ouyang, Wenyu},\n  title = {hydromodel: A Python Package for Hydrological Model Calibration},\n  year = {2025},\n  url = {https://github.com/OuyangWenyu/hydromodel}\n}\n```\n\n## Contributing\n\nContributions are welcome! For major changes, please open an issue first.\n\n```bash\ngit clone https://github.com/OuyangWenyu/hydromodel.git\ncd hydromodel\nuv sync --all-extras\npytest tests/\n```\n\n## License\n\nGNU General Public License v3.0 - see [LICENSE](LICENSE) file.\n\n## Contact\n\n- **Author**: Wenyu Ouyang\n- **Email**: wenyuouyang@outlook.com\n- **GitHub**: https://github.com/OuyangWenyu/hydromodel\n- **Issues**: https://github.com/OuyangWenyu/hydromodel/issues\n","funding_links":[],"readme_doi_urls":["https://doi.org/10.1145/2330784.2330799","https://doi.org/10.1371/journal.pone.0145180","https://doi.org/10.5194/gmd-9-2223-2016"],"works":{},"citation_counts":{},"total_citations":0,"keywords_from_contributors":["hydrology","water-resources"],"project_url":"https://ost.ecosyste.ms/api/v1/projects/350823","html_url":"https://ost.ecosyste.ms/projects/350823"}