This project explores the application of soil moisture signature (Branger et al., 2019; Araki et al., 2020) to enhance streamflow and soil moisture prediction within a rainfall-runoff model.
This code is currently in development and does not guarantee to run yet.
Use conda to create your own env based on our environment.yml
file
conda env create -f environment.yml
conda activate CFE
Each directory houses a package designed to run each experiment step. These packages utilize the __main__.py
functions, and they come with configuration files (typically named config.ini
) along with some additional configuration files (typically named config_xxx.csv
).
The primary branch is set up to run the Mahurangi test case. If you wish to use a different case, adjust the configuration files accordingly.
Formats dataset for the three watersheds (Mahurangi, Coweeta WS02, and Little Washita). Formatted datasets are saved in the data
folder. If you only plan to run experiments #1 through #4, this step isn't required.
Conducts a DDS optimization. This step helps you find the best parameter values and ranges for a watershed, that can be used for subsequent analysis.
To run:
python .\1_pre_calibration\__main__.py
config.ini
- The main config file. Copy
example_config.ini
and change it to your desired setting
- The main config file. Copy
config_spotpy.csv
- The configuration file that defines the calibrated parameters and their bounds
Conducts a Morris sensitivity analysis. This step helps you screen parameters to be used in the GLUE analysis. This step is not dependent on the 1_pre_calibration
; If you are only interested in the sensitivity analysis, start from this step.
To run:
python .\2_sensitivity_analysis\__main__.py
config.ini
- The main config file. Copy
example_config.ini
and change it to your desired setting
- The main config file. Copy
config_SALib.csv
- The configuration file that defines the calibrated parameters and their bounds
Runs the rainfall-runoff model with various randomly-generated parameters in preparation for the next step. This step is not dependent on the 1_pre_calibration
nor 2_sensitivity_analysis
; If you are only interested in the GLUE experiments, start from this step.
To run:
python .\3_GLUE_prerun\__main__.py
config.ini
- The main config file. Copy
example_config_xxx.ini
and change it to your desired setting
- The main config file. Copy
config_GLUE.csv
- The configuration file that defines the calibrated parameters and their bounds
Analyzes the output from 3_GLUE_prerun
using GLUE.
To run:
python .\4_GLUE_postrun\__main__.py
config.ini
- The main config file. Copy
example_config_xxx.ini
and change it to your desired setting
- The main config file. Copy
.4_GLUE_postrun\config_criteria\GLUE_criteria_{criteria_id}.json
- The configuration file that defines the criteria of GLUE behavioral threshold. The
criteria_id
in the filename corresponding toconfig["GLUE"]["criteria_id"]
- The configuration file that defines the criteria of GLUE behavioral threshold. The
Executes post-analysis and visualizes the results from 4_GLUE_postrun. Follow the Jupyter Notebooks in numerical order for this step.
- Input data requirements
time
: hourly time intervalprecip_rate
: preipictation in [m/hr]PET
: potential evapotranspiration in [m/hr]
- Observation data requirements
Time
: hourly time intervalRainfall
: preipictation in [m/hr]Flow
: streamflow discharge in [m/hr]Soil Moisture Content
: volumetrics soil water content in [m3/m3]Direct runoff
GIUH Runoff
Lateral Flow
Base Flow
: not used in analysis but BMI_CFE requires it. All values set0
as default.Total Discharge
: streamflow discharge in [m3/s] (Flow
multiplied by area and time conversion)
Spotpy documentation: https://spotpy.readthedocs.io/en/latest/
Houska, T., Kraft, P., Chamorro-Chavez, A. and Breuer, L.: SPOTting Model Parameters Using a Ready-Made Python Package, PLoS ONE, 10(12), e0145180, doi:10.1371/journal.pone.0145180, 2015
SALib documentation: https://salib.readthedocs.io/en/latest/
Iwanaga, T., Usher, W., & Herman, J. (2022). Toward SALib 2.0: Advancing the accessibility and interpretability of global sensitivity analyses. Socio-Environmental Systems Modelling, 4, 18155. doi:10.18174/sesmo.18155
Herman, J. and Usher, W. (2017) SALib: An open-source Python library for sensitivity analysis. Journal of Open Source Software, 2(9). doi:10.21105/joss.00097
Beven KJ, Binley AM. 1992. The future of distributed models: model calibration and uncertainty prediction. Hydrological Processes 6: 279–298.
The CFE model is designed to be a simplified and functionaly equivalent model of the National Water Model. The model code was originally written by Dr. Fred Ogden and converted to BMI-compliant format in the Next-Gen framework by NOAA-OWP. The official CFE code by Dr. Fred Oden and NOAA-OWP lives here. The Python version of the code is developed for the prototyping, research, and development. This code is developed upon the Python version and for research purpose.
MIT Project Template provided by: https://github.com/moemen95/Pytorch-Project-Template
Pull requests are welcome. For major changes, please open an issue first to discuss what you would like to change.
Please make sure to update tests as appropriate.
To cite this code, email the author raraki8159 at sdsu dot edu