Python implementation of Tank Hydrological model by Sugawara and Funiyuki (1956)
Project description
TJ_HYD_TANK
Python implementation of the Tank Hydrological model by Sugawara and Funiyuki (1956), based on the original code from tank-model by hckaraman.
Installation
To install the package, run:
pip install tj_hyd_tank
Getting Started
Prepare the Dataset
Dataset Requirements
Your dataset should contain the following columns: Date, Precipitation, Evapotranspiration, and **Discharge **. The column names are customizable.
Example:
Date | Q | P | E |
---|---|---|---|
10/9/2016 | 0.25694 | 0 | 2.79 |
10/10/2016 | 0.25812 | 0 | 3.46 |
10/11/2016 | 0.30983 | 0 | 3.65 |
10/12/2016 | 0.31422 | 0 | 3.46 |
10/13/2016 | 0.30866 | 0 | 5.64 |
10/14/2016 | 0.30868 | 0 | 3.24 |
10/15/2016 | 0.31299 | 0 | 3.41 |
... | ... | ... | ... |
Ensure the time intervals between dates are consistent (e.g., 24 hours) for accurate model performance.
Basin File
Use a HEC-HMS basin file.
Quick Start
import pandas as pd
from tj_hyd_tank import TJHydTANK, TANKColNames, TANKConfig
df = pd.read_csv('assets/data_example.csv')
tank_cols_name = TANKColNames(
date='Date',
precipitation='P',
evapotranspiration='E',
discharge='Q'
)
tank_config = TANKConfig(
start_date=None,
end_date=None,
interval=24.0
)
tank = TJHydTANK(
basin_file='assets/CedarCreek.basin',
df=df,
tank_col_names=tank_cols_name,
tank_config=tank_config
)
Accessing Basin Definitions
from tj_hyd_tank import Subbasin, Reach
for basin_def in tank.basin_defs:
print(basin_def.name, basin_def.type)
print(basin_def.stats)
if isinstance(basin_def, (Subbasin, Reach)):
print(basin_def.params)
Accessing Root Nodes
from tj_hyd_tank import Subbasin, Reach
for root_node in tank.root_node:
print(root_node.name, root_node.type)
print(root_node.stats)
if isinstance(root_node, (Subbasin, Reach)):
print(root_node.params)
Plotting Q_obs vs Q_sim for a Basin Definition
outlet1 = tank.get_basin_def_by_name('Outlet1')
if outlet1 is not None:
tank.show_discharge(outlet1)
Reconfiguring and Displaying Subbasin Properties
from tj_hyd_tank import SubbasinParams
w170 = tank.get_basin_def_by_name('W170')
if w170 is not None:
if isinstance(w170, Subbasin):
tank.reconfig_subbasin_params(
w170,
SubbasinParams(
t0_is=0.02,
t0_soc_uo=80.0
)
)
print('Q_tank_0', w170.Q_tank_0.tolist())
print('Q_tank_1', w170.Q_tank_1.tolist())
print('Q_tank_2', w170.Q_tank_2.tolist())
print('Q_tank_3', w170.Q_tank_3.tolist())
print('bottom_outlet_flow_tank_0', w170.bottom_outlet_flow_tank_0.tolist())
print('bottom_outlet_flow_tank_1', w170.bottom_outlet_flow_tank_1.tolist())
print('bottom_outlet_flow_tank_2', w170.bottom_outlet_flow_tank_2.tolist())
Reconfiguring the TANK Model
tank.reconfig_tank(
TANKConfig(
start_date=pd.to_datetime('09/10/2016', dayfirst=True, utc=True),
end_date=pd.to_datetime('20/10/2016', dayfirst=True, utc=True)
)
)
Exporting Data to DataFrame
outlet1_df = tank.to_dataframe(outlet1)
outlet1_df
Viewing Logs
print(tank.logs)
BasinDef Subclass
Subbasin
- Params:
SubbasinParams
Junction
- Params:
BasinDefParams
Sink
- Params:
BasinDefParams
Reach
- Params:
ReachParams
Exception Classes
InvalidBasinFileException
Raised when a basin file is invalid, possibly due to incorrect format or corrupted data.
FileNotFoundException
Raised when a specified file cannot be located. The missing file's name is included for easy identification.
MissingColumnsException
Raised when required columns are missing from the dataset. The exception specifies which column is absent.
ColumnContainsEmptyDataException
Raised when a specified column contains empty data, ensuring all necessary fields are populated.
InvalidDatetimeException
Raised for invalid datetime entries, such as incorrect formatting or out-of-range values.
InvalidDatetimeIntervalException
Raised when the provided datetime interval is invalid, ensuring consistency in date ranges or intervals.
InvalidStartDateException
Raised for invalid start dates, particularly for time-based events or ranges.
InvalidEndDateException
Raised for invalid end dates, handling errors related to the conclusion of time-based events or ranges.
InvalidDateRangeException
Raised when the date range is invalid, such as when the start date is after the end date. An optional message may provide additional context.
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file tj_hyd_tank-1.2.0.tar.gz
.
File metadata
- Download URL: tj_hyd_tank-1.2.0.tar.gz
- Upload date:
- Size: 10.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.3 CPython/3.12.3 Linux/6.8.0-41-generic
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 84712e2280c892d8bb9819639a8dfa9c142ba400a363bf4ff159c73cdde07ccf |
|
MD5 | 9954ece959339156195d3eb765f4e7a4 |
|
BLAKE2b-256 | c4950ce4dd3e1ba866f0bef2ec683fb71d1d8a7b32cb05e970b64ac18dd5f2cd |
File details
Details for the file tj_hyd_tank-1.2.0-py3-none-any.whl
.
File metadata
- Download URL: tj_hyd_tank-1.2.0-py3-none-any.whl
- Upload date:
- Size: 10.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: poetry/1.8.3 CPython/3.12.3 Linux/6.8.0-41-generic
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 2bed6ddd55b59a68e8f7e2ec6ba29e148bc1b3777ec84f088a4347365f86e462 |
|
MD5 | 8cbdd7211939556b9fa8f09bd287a592 |
|
BLAKE2b-256 | 6e8551d1ee5a4b2f6d3c30bb85b03384dc545b1f43598943a1c7a98d3ccacc49 |