Source code for ravenpy.config.emulators.routing

from typing import Dict, Literal, Sequence, Union

from pydantic import Field, field_validator

import ravenpy.config.processes as p
from ravenpy.config import commands as rc
from ravenpy.config import options as o
from ravenpy.config.commands import HRU, Process, SoilModel
from ravenpy.config.defaults import nc_attrs
from ravenpy.config.rvs import Config


[docs] class LandHRU(HRU): land_use_class: str = "Landuse_Land_HRU" veg_class: str = "Veg_Land_HRU" soil_profile: str = "Soil_Land_HRU" aquifer_profile: str = "[NONE]" terrain_class: str = "[NONE]" hru_type: Literal["land"] = "land"
[docs] class LakeHRU(HRU): land_use_class: str = "Landuse_Lake_HRU" veg_class: str = "Veg_Lake_HRU" soil_profile: str = "Soil_Lake_HRU" aquifer_profile: str = "[NONE]" terrain_class: str = "[NONE]" hru_type: Literal["lake"] = "lake"
[docs] class HRUs(rc.HRUs): """HRUs command for GR4J. Pydantic is able to automatically detect if an HRU is Land or Lake if `hru_type` is provided. """ root: Sequence[Union[LandHRU, LakeHRU]]
[docs] class BasicRoute(Config): """Raven configuration performing routing only.""" hrus: HRUs = Field([LandHRU()], alias="HRUs") netcdf_attribute: Dict[str, str] = {"model_id": "BasicRoute"} sub_basins: rc.SubBasins = Field([rc.SubBasin()], alias="SubBasins") write_netcdf_format: bool = Field(True, alias="WriteNetcdfFormat") time_step: Union[float, str] = Field(1.0, alias="TimeStep") calendar: o.Calendar = Field("PROLEPTIC_GREGORIAN", alias="Calendar") catchment_route: o.CatchmentRoute = Field( "ROUTE_DUMP", alias="CatchmentRoute", description="Catchment routing method, " "used to convey water from the catchment tributaries and rivulets to the subbasin outlets.", ) routing: o.Routing = Field( "ROUTE_DIFFUSIVE_WAVE", alias="Routing", description="Channel routing method which is used to " "transport water from upstream to downstream within the main subbasin channels.", ) precip_icept_frac: o.PrecipIceptFract = Field( "PRECIP_ICEPT_NONE", alias="PrecipIcepFract", description="Estimation of the precipitation interception fraction. In this routing " "model, stream input(s) are pretending to be precipitation going into " "Raven.", ) potential_melt_method: o.PotentialMeltMethod = Field( "POTMELT_NONE", alias="PotentialMeltMethod", description="Estimation of the potential snow melt. In this routing model, snow melt processes are not " "relevant, thus using DEFAULT POTMELT_NONE method.", ) soil_model: SoilModel = Field( 1, alias="SoilModel", description="Single soil layer structure" ) hydrologic_processes: Sequence[Process] = Field( [ p.Precipitation( algo="PRECIP_RAVEN", source="ATMOS_PRECIP", to="PONDED_WATER" ), p.Flush(source="PONDED_WATER", to="SURFACE_WATER"), ], alias="HydrologicProcesses", ) _nc_attrs = field_validator("netcdf_attribute")(nc_attrs)