CSHS-CWRA / RavenPy

A Python wrapper to setup and run the hydrologic modelling framework Raven
https://ravenpy.readthedocs.io
MIT License
25 stars 5 forks source link

Add Lake HRU handling logic to all emulators #352

Open huard opened 6 months ago

huard commented 6 months ago

Description

One of RavenPy's objectives is to simplify the setup of semi-distributed model configurations. Those configuration will typically include lakes, but not all emulators are designed to handle them.

We propose to add basic lake-related processes in each emulator that doesn't have something built-in already. This would change nothing to outputs when models are run in "global" mode.

TODO: Find the minimal configuration change that can be applied to emulators missing lake HRU handling.

lou-a commented 6 months ago

There are multiple different ways to represent lakes in Raven model emulators, and configurations are model-dependent. I have run several tests with HBV-EC, which is a unique model in that "HBV treats all landscapes as if they have some presence of lakes, but does not explicitly treat LAKE HRUs" (Raven manual v3.7).

(a) To implicitly handle the presence of lake HRUs in HBV-EC (the bottom soil layer stores excess water and acts as a delay to mimic the presence of lakes), all we need to do is adding this to the emulator:

class LakeHRU(HRU): land_use_class: str = "WATER" veg_class: str = "WATER" soil_profile: str = "LAKE" aquifer_profile: str = "[NONE]" terrain_class: str = "[NONE]" hru_type: str = "lake"

The land use and vegetation classes may be slightly different and depend on the user's HRU shapefile: "All Lake HRUs should be assigned (1) a LAKE soil profile (except wetlands), (2) a WATER/LAKE land use type and (3) an OPEN/BARREN (or similar) vegetation type with zero LAI" (Raven manual v3.7).

For other models (which do not treat all landscapes as if they have some presence of lakes), hydrological processes may additionally need to be altered to handle lake evaporation and baseflow from the lake storage to the river network properly.

(b) To explicitly handle the presence of lake HRUs and treat them as natural lakes or managed reservoirs with their own storage, more changes are needed.

As this is very model-dependent and to not diverge from the original emulators, my suggestion would be to keep the emulators as they are. For the model emulators that do not handle lake HRUs, we could add a more detailed error message when the model fails. Example error message: "This model does not explicitly treat lake HRUs. Different options exist to represent lakes and are discussed in the Raven manual (see section 4.5 for manual v3.7). You can find examples of the HBV-EC emulator that has been altered to handle lake HRUs here: ". I would be happy to share my examples in a public folder somewhere (they are now on PAVICS).