Skip to main content

Python implementation of NedborAfstromnings Model (NAM) lumped rainfall–runoff model

Project description

HydNAM

PyPI - Version

HydNAM is a Python implementation of the NedborAfstromnings Model (NAM), a lumped rainfall–runoff model.

This project is based on the NAM_Model created by hckaraman.

Installation

pip install hydnam

Getting Started

1. Prepare the Dataset

The dataset must contain the following properties: Date, Temperature, Precipitation, Evapotranspiration, and Discharge.

Date Temperature Discharge Precipitation Evapotranspiration
10/9/2016 15.4 0.25694 0 2.79
10/10/2016 14.4 0.25812 0 3.46
10/11/2016 14.9 0.30983 0 3.65
10/12/2016 16.1 0.31422 0 3.46
10/13/2016 20.1 0.30866 0 5.64
10/14/2016 13.9 0.30868 0 3.24
10/15/2016 11.1 0.31299 0 3.41
... ... ... ... ...

Ensure that the time intervals between dates are consistent (e.g., 24 hours) for accurate model performance.

2. Initialize the NAM Model

from datetime import datetime

from hydnam.dataset import Dataset
from hydnam.hydnam import HydNAM
from hydnam.parameters import Parameters

dataset = Dataset(
    timestamp=[
        datetime(2016, 10, 9),
        datetime(2016, 10, 10),
        datetime(2016, 10, 11),
    ],
    temperature=[15.4, 14.4, 14.9],
    precipitation=[0.0, 0.0, 0.0],
    evapotranspiration=[2.79, 3.46, 3.65],
    discharge=[0.25694, 0.25812, 0.30983]
)

params = Parameters(
    umax=0.01,
    lmax=0.01,
    cqof=0.01,
    ckif=200.0,
    ck12=10.0,
    tof=0.0,
    tif=0.0,
    tg=0.0,
    ckbf=500.0,
    csnow=0.0,
    snowtemp=0.0,
    qofmin=0.4,
    pmm=10.0,
    carea=0.9
)

nam = HydNAM(
    dataset=dataset,
    parameters=Parameters(),
    area=58.8,
    interval=24.0,
    start=None,
    end=None,
    spin_off=0.0,
    name="NAM"
)

print(f'Parameters: {nam.get_parameters().__dict__}')
print(f'Statistics: {nam.get_statistical_metrics().__dict__}')
print(nam.model_is_broken())

nam.plot_q(only_obs_and_sim=False).show()
nam.get_model_output().to_dataframe().to_csv("result.csv")

3. Optimize the Model

for m in ['SLSQP', 'L-BFGS-B']:
    nam.optimize(method=m)
    print(nam.get_parameters().__dict__)
    print(nam.get_statistical_metrics().__dict__)
    nam.plot_q(only_obs_and_sim=True).show()

The model will calculate and check which Parameters are optimal for the model and use it as the main Parameters for the model.

4. Customize Properties

nam.update_dataset(dataset, interval=24.0)
nam.update_parameters(Parameters())
nam.update_area(59.0)
nam.update_name("New NAM")
nam.update_spin_off(0.0)
nam.update_time_range(datetime(2016, 10, 9), datetime(2016, 10, 10))

5. Show Discharge

nam.plot_q(only_obs_and_sim=True).show()

6. Reload Model

When the model performs calculations incorrectly and throws an error, you should reset the properties to more reasonable ones and recalculate.

nam.reload()

License

This library is released under the MIT License.

Contact

If you have any questions or issues, please open an issue on GitHub or email us at duynguyen02.dev@gmail.com.

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

hydnam-2.0.0.tar.gz (8.4 kB view details)

Uploaded Source

Built Distribution

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

hydnam-2.0.0-py3-none-any.whl (8.6 kB view details)

Uploaded Python 3

File details

Details for the file hydnam-2.0.0.tar.gz.

File metadata

  • Download URL: hydnam-2.0.0.tar.gz
  • Upload date:
  • Size: 8.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.4 CPython/3.12.3 Linux/6.8.0-51-generic

File hashes

Hashes for hydnam-2.0.0.tar.gz
Algorithm Hash digest
SHA256 e1be16e1546e08b880d30019212a9875a6d92b15833307af0e9817d930faf0d5
MD5 4c3046e2100ed3b56003fa45e1e9b1fe
BLAKE2b-256 47da408ec1fec14c51a32a022ec33286e4c8fbc9760590815259bf050380fd81

See more details on using hashes here.

File details

Details for the file hydnam-2.0.0-py3-none-any.whl.

File metadata

  • Download URL: hydnam-2.0.0-py3-none-any.whl
  • Upload date:
  • Size: 8.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.8.4 CPython/3.12.3 Linux/6.8.0-51-generic

File hashes

Hashes for hydnam-2.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e87366a8a2857bcb6917a87453b70bab339117dd805f84d179a3f4719a486664
MD5 168df6321339944cea9b9f5b88b9f22b
BLAKE2b-256 b98872f66336c1ab6de1c102708cf9ab597e907d036ebd62ca3b6987b3b18eb5

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page