- Repository name:
wflow_sbm_BD - Main outlet: BWDB SW273 at Bhairab Bazar, Bangladesh
- Current status: Research model under development; not an operational forecasting system
This repository contains the reproducible workflow, configuration, and documentation for building a daily, approximately 1 km Wflow Soil Bucket Model (SBM) of the Sylhet–Upper Meghna basin. The modeled contributing area includes northeastern Bangladesh and upstream catchments in India. It is delineated from the SW273 outlet using MERIT Hydro flow directions.
The current model uses Wflow's kinematic-wave routing for land and river flow. It does not explicitly simulate two-dimensional floodplain hydraulics or individual haor, lake, and pond storage. Twenty-eight internal BWDB gauges and the SW273 outlet are configured as discharge reporting locations.
TECHNICAL_MANUAL.md: installation, data sources, preparation, model setup, execution, outputs, and troubleshooting.RUN_ORDER.md: concise command sequence for rebuilding and running the model.data_raw/README.md: required source-data inventory, filenames, variables, units, and provenance.data_processed/README.md: generated dataset inventory and validation details.
| Item | Current configuration |
|---|---|
| Hydrological model | Wflow SBM 1.0.3 |
| Model builder | HydroMT 1.4.0 with HydroMT-Wflow 1.0.2 |
| Spatial grid | 30 arc-seconds (approximately 1 km) |
| Hydrography input | MERIT Hydro v1.0.1 at 3 arc-seconds, upscaled 10x |
| Routing | Kinematic wave on land and in rivers |
| Main outlet | BWDB SW273, Bhairab Bazar |
| Reporting locations | SW273 plus 28 internal BWDB gauges |
| Current run period | 2020-01-01 through 2024-12-31 |
| Forcing time step | Daily |
| Primary discharge output | model/run_default/output/discharge_gauges.csv |
All commands are run in WSL. The Windows project root
E:\wflow\sylhet_model is /mnt/e/wflow/sylhet_model in Python, YAML, and
shell commands.
E:\wflow\sylhet_model\
├── README.md
├── LICENSE
├── RUN_ORDER.md
├── TECHNICAL_MANUAL.md
├── environment.yml
├── prepare_forcing.py
├── prepare_hydrography.py
├── prepare_sylhet_static_data.py
├── validate_sylhet_inputs.py
├── build_sylhet_model.py
├── hydromt_data_sylhet.yml
├── wflow_build_sylhet.yml
├── data_raw\
│ ├── README.md
│ ├── boundary\
│ ├── hydrography\merit_hydro_3sec\
│ ├── rivers\lin2019\
│ ├── landcover\
│ ├── lai\
│ ├── soil\soilgrids_2020\
│ ├── soil\soilgrids_2017\
│ ├── forcing\
│ └── observations\
├── data_processed\
│ ├── README.md
│ ├── boundary\
│ ├── hydrography\
│ ├── rivers\
│ ├── landcover\
│ ├── lai\
│ ├── soil\
│ ├── observations\
│ └── forcing\
├── model\
│ ├── wflow_sbm.toml
│ ├── staticmaps.nc
│ ├── forcing.nc
│ ├── gauge_output_mapping.csv
│ ├── staticgeoms\
│ ├── instate\
│ └── output\
├── backup\
└── logs\
The scripts create the data_processed subdirectories. Raw files are never
overwritten. build_sylhet_model.py --overwrite moves an existing model to a
timestamped folder under backup before rebuilding it.
The configuration was prepared for:
- HydroMT 1.4.0
- HydroMT-Wflow 1.0.2
- Wflow.jl 1.0.3
- Python packages: xarray, rioxarray, rasterio, geopandas, pandas, numpy, netCDF4, pyflwdir, PyYAML and dask
Activate the existing environment before running Python:
conda activate hydromt
cd /mnt/e/wflow/sylhet_modelFor a new installation, create the pinned Conda environment from the repository file:
mamba env create -f environment.yml
conda activate hydromt- Hydrography source: native MERIT Hydro 3 arc-seconds (nominal 92.77 m),
upscaled 10x with IHU to a
0.008333333333333333degree model grid (30 arc-seconds, about 1 km). The Wflow simulation is not run at 3 seconds. - The model domain is delineated upstream from BWDB station SW273 at Bhairab
Bazar (
90.9911 E, 24.0455 N). The buffered basin polygon is retained for preparation and comparison, but is not used as ageommodel region. - Gauge definitions come from
data_raw/observations/discharge_stations.csv. The current file contains SW273 plus 28 internal gauges. HydroMT snaps all 29 points to unique modeled river cells and stores the snapped locations inmodel/staticgeoms/gauges_bwdb.geojsonandstaticmaps.ncvariablegauges_bwdb. - Wflow writes one station-named discharge column per gauge to
model/run_default/output/discharge_gauges.csv. The correspondence between raw and snapped coordinates is recorded inmodel/gauge_output_mapping.csv. - Flow direction, elevation, upstream area and source river width come from
GEE
MERIT/Hydro/v1_0_1. Land slope, stream order and basin IDs are derived on the unchanged native grid; HydroMT derives model river slope duringsetup_rivers. The oldmeghna_dem_90m.tifis not used. - River threshold:
160 km2. Review this against mapped rivers and observed gauges; lower it if important headwater channels disappear. - River widths and bankfull discharges come from the clipped Lin et al. river
geometry. No deprecated
setup_riverwidthstep is used. - The land-cover raster is the Esri / Impact Observatory Sentinel-2 10 m Land
Use/Land Cover Time Series. Its 1--11 classes use the custom
esri_sentinel2_lulc_mapping.csv; it is not ESA WorldCover. The existing TIFF filename is retained only for compatibility. - Snow, glaciers, reservoirs and water demand are disabled for the initial Meghna setup.
- Temperature forcing is mean daily temperature named
tempin degrees C.tmaxandtminare not used because PET is already supplied. - The supplied build file runs 2020-01-01 through 2024-12-31. After the model passes a short verification run, change the start date to 2000-01-01 to use the complete 2000--2024 forcing record.
HydroMT writes /mnt/e/wflow/sylhet_model/model/wflow_sbm.toml during the
build. That generated file is authoritative because its static-map variable
mappings match the actual build. The TOML supplied with this package is a
complete reference/fallback. If HydroMT has generated a TOML successfully, do
not replace it with the fallback.
The embedded metadata identifies precipitation as MSWEP V2.8. Mean temperature identifies ECMWF as the institution, but the exact product and version are not recorded. The ET0 file retains CPC Global Temperature metadata, but its derivation method is not recorded. Resolve the temperature product/version and ET0 method before publication.
The Git repository tracks source code, configuration, documentation, and the
project-authored land-cover lookup tables. Raw source datasets, processed
rasters and NetCDF files, built model files, simulation outputs, backups, and
logs are intentionally excluded by .gitignore.
This separation keeps the repository small and avoids redistributing datasets
whose licenses and access conditions differ. Users must obtain the required
datasets from the sources documented in data_raw/README.md and then recreate
the processed data and model locally. Do not force-add ignored data until its
license, attribution, privacy, and GitHub file-size implications have been
reviewed.
The project source code and accompanying documentation are licensed under the
MIT License; see LICENSE. The license does not grant redistribution rights
for third-party source datasets. Each dataset remains subject to its original
provider's license and access conditions.