from roger import runtime_settings
[docs]
class Variable:
def __init__(
self,
name,
dims,
units="",
long_description="",
dtype=None,
time_dependent=True,
scale=1.0,
write_to_restart=False,
extra_attributes=None,
mask=None,
active=True,
initial=None,
):
self.name = name
self.dims = dims
self.units = units
self.long_description = long_description
self.dtype = dtype
self.time_dependent = time_dependent
self.scale = scale
self.write_to_restart = write_to_restart
self.active = active
self.initial = initial
self.get_mask = lambda settings, vs: None
if mask is not None:
if not callable(mask):
raise TypeError("mask argument has to be callable")
self.get_mask = mask
elif dims is not None:
if dims[:3] in DEFAULT_MASKS:
self.get_mask = DEFAULT_MASKS[dims[:3]]
elif dims[:2] in DEFAULT_MASKS:
self.get_mask = DEFAULT_MASKS[dims[:2]]
#: Additional attributes to be written in netCDF output
self.extra_attributes = extra_attributes or {}
def __repr__(self):
attr_str = []
for v in vars(self):
attr_str.append(f"{v}={getattr(self, v)}")
attr_str = ", ".join(attr_str)
return f"{self.__class__.__qualname__}({attr_str})"
# fill value for netCDF output (invalid floating data is replaced by this value)
FLOAT_FILL_VALUE = -9999
#
X = ("x",)
Y = ("y",)
Z = ("z",)
CATCH_GRID = ("x", "y")
RIVER_GRID = ("x", "y")
LAKE_GRID = ("x", "y")
URBAN_GRID = ("x", "y")
BOUNDGW_GRID = ("x", "y")
LUT_ILU_GRID = ("n_lu", "n_params13")
LUT_GC_GRID = ("n_lu", "n_params13")
LUT_IS_GRID = ("n_sealing", "n_params2")
LUT_MLMS_GRID = ("n_slope", "n_params9")
LUT_RDLU_GRID = ("n_lu", "n_params7")
LUT_CROPS_GRID = ("n_crop_types", "n_crop_params")
LUT_FERT_GRID = ("n_crop_types", "n_params13")
LUT_NUP_GRID = ("n_crop_types", "n_params3")
LUT_GCM_GRID = ("n_lu", "n_params2")
TIMESTEPS = ("timesteps",)
TIMESTEPS_DAY = ("timesteps_day",)
TIMESTEPS_EVENT_FF = ("timesteps_event_ff",)
TIMESTEPS_EVENT_FF_P1 = ("timesteps_event_ff_p1",)
TIME = ("t",)
TIME_FORCING = ("t_forc",)
AGES = ("ages",)
NAGES = ("nages",)
NEVENTS_FF = ("events_ff",)
CROPS = ("crops",)
CR = ("cr",)
N_SAS_PARAMS = ("n_sas_params",)
N_CROP_TYPES = ("n_crop_types",)
FLOWDIRS = ("n_flowdir",)
# those are written to netCDF output by default
BASE_DIMENSIONS = X + Y
GHOST_DIMENSIONS = ("x", "y")
# these are the settings that are getting used to determine shapes
DIM_TO_SHAPE_VAR = {
"x": "nx",
"y": "ny",
"z": "nz",
"t": "nitt",
"t_forc": "nitt_forc",
"timesteps": 2,
"timesteps_day": 6 * 24,
"timesteps_event_ff": "nittevent_ff",
"timesteps_event_ff_p1": "nittevent_ff_p1",
"ages": "ages",
"nages": "nages",
"crops": "ncrops",
"cr": "ncr",
"events_ff": "nevent_ff",
"n_sas_params": "nsas",
"n_crop_types": 92,
"n_crop_params": 24,
"n_lu": 25,
"n_sealing": 101,
"n_slope": 10000,
"n_params2": 2,
"n_params3": 3,
"n_params7": 7,
"n_params9": 9,
"n_params13": 13,
"n_flowdir": "nflowdirs",
}
DEFAULT_MASKS = {
CATCH_GRID: lambda settings, vs: vs.maskCatch,
}
# custom mask for routing
def _get_z0_mask(vs):
return vs.maskCatch[:, :, -1]
def get_fill_value(dtype):
import numpy as onp
if onp.issubdtype(dtype, onp.floating):
return FLOAT_FILL_VALUE
return onp.iinfo(dtype).max
def get_shape(dimensions, grid, include_ghosts=True, local=True):
from roger.routines import CURRENT_CONTEXT
from roger.distributed import SCATTERED_DIMENSIONS
if grid is None:
return ()
px, py = runtime_settings.num_proc
grid_shapes = dict(dimensions)
if local and CURRENT_CONTEXT.is_dist_safe:
for pxi, dims in zip((px, py), SCATTERED_DIMENSIONS):
for dim in dims:
if dim not in grid_shapes:
continue
grid_shapes[dim] = grid_shapes[dim] // pxi
if include_ghosts:
for d in GHOST_DIMENSIONS:
if d in grid_shapes:
grid_shapes[d] += 4
shape = []
for grid_dim in grid:
if isinstance(grid_dim, int):
shape.append(grid_dim)
continue
if grid_dim not in grid_shapes:
raise ValueError(f"unrecognized dimension {grid_dim}")
shape.append(grid_shapes[grid_dim])
return tuple(shape)
def remove_ghosts(array, dims):
if dims is None:
# scalar
return array
ghost_mask = tuple(slice(2, -2) if dim in GHOST_DIMENSIONS else slice(None) for dim in dims)
return array[ghost_mask]
VARIABLES = {
# scalars
"tau": Variable(
"Index of current time step",
None,
"",
"Index of current time step",
dtype="int32",
initial=1,
write_to_restart=True,
),
"taup1": Variable(
"Index of next time step", None, "", "Index of next time step", dtype="int32", initial=2, write_to_restart=True
),
"taum1": Variable(
"Index of last time step", None, "", "Index of last time step", dtype="int32", initial=0, write_to_restart=True
),
"tau_event": Variable(
"Index of current time step within event",
None,
"",
"Index of current time step within event",
dtype="int32",
initial=0,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"time": Variable(
"Current time",
None,
"seconds",
"Current time",
dtype="int32",
write_to_restart=True,
),
"time_event0": Variable(
"time since last rainfall/snow melt",
None,
"seconds",
"time since last rainfall/snow melt",
dtype="int32",
initial=0,
write_to_restart=True,
),
"ages": Variable(
"water ages",
AGES,
"days",
"water ages",
time_dependent=False,
active=lambda settings: settings.enable_offline_transport,
),
"nages": Variable(
"water ages",
NAGES,
"days",
"water ages",
time_dependent=False,
active=lambda settings: settings.enable_offline_transport,
),
"itt": Variable(
"Current iteration", None, "", "Current iteration", dtype="int32", initial=0, write_to_restart=True
),
"itt_substep": Variable(
"Current iteration", None, "", "Current iteration of substep", dtype="int32", initial=0, write_to_restart=True
),
"itt_day": Variable(
"Current iteration wthin day",
None,
"",
"Current iteration within day",
dtype="int32",
initial=0,
write_to_restart=True,
),
"itt_event": Variable(
"Current iteration wthin event",
None,
"",
"Current iteration within event",
dtype="int32",
initial=0,
write_to_restart=True,
active=lambda settings: settings.enable_film_flow,
),
"itt_forc": Variable(
"Current iteration of forcing",
None,
"",
"Current iteration of forcing",
dtype="int32",
initial=0,
write_to_restart=True,
),
"itt_cr": Variable(
"Current iteration of crop rotation",
None,
"",
"Current iteration of crop rotation",
dtype="int32",
initial=2,
write_to_restart=True,
),
"year": Variable(
"Year at current iteration",
TIMESTEPS,
"",
"Year at Current iteration",
dtype="int32",
initial=1900,
write_to_restart=True,
),
"YEAR": Variable(
"Year",
TIME_FORCING,
"",
"Year",
dtype="int32",
write_to_restart=True,
),
"month": Variable(
"Month at current iteration",
TIMESTEPS,
"",
"Month at Current iteration",
dtype="int32",
initial=1,
write_to_restart=True,
),
"MONTH": Variable(
"Month",
TIME_FORCING,
"",
"Month",
dtype="int32",
write_to_restart=True,
),
"doy": Variable(
"Day of year at current iteration",
TIMESTEPS,
"",
"Day of year at Current iteration",
dtype="int32",
initial=1,
write_to_restart=True,
),
"doy_dist": Variable(
"Day of year at current iteration",
CATCH_GRID,
"",
"Day of year at Current iteration",
dtype="int32",
initial=1,
active=lambda settings: settings.enable_nitrate,
),
"doy_fert1": Variable(
"Day of year of first mineral fertilizer application",
CATCH_GRID,
"",
"Day of year of first mineral fertilizer application",
dtype="int32",
initial=0,
active=lambda settings: settings.enable_nitrate,
),
"doy_fert2": Variable(
"Day of year of second mineral fertilizer application",
CATCH_GRID,
"",
"Day of year of second mineral fertilizer application",
dtype="int32",
initial=0,
active=lambda settings: settings.enable_nitrate,
),
"doy_fert3": Variable(
"Day of year of third mineral fertilizer application",
CATCH_GRID,
"",
"Day of year of third mineral fertilizer application",
dtype="int32",
initial=0,
active=lambda settings: settings.enable_nitrate,
),
"doy_fert1_org": Variable(
"Day of year of first organic fertilizer application",
CATCH_GRID,
"",
"Day of year of first organic fertilizer application",
dtype="int32",
initial=0,
active=lambda settings: settings.enable_nitrate,
),
"doy_fert2_org": Variable(
"Day of year of second organic fertilizer application",
CATCH_GRID,
"",
"Day of year of second organic fertilizer application",
dtype="int32",
initial=0,
active=lambda settings: settings.enable_nitrate,
),
"doy_fert3_org": Variable(
"Day of year of third organic fertilizer application",
CATCH_GRID,
"",
"Day of year of third organic fertilizer application",
dtype="int32",
initial=0,
active=lambda settings: settings.enable_nitrate,
),
"DOY": Variable(
"Day of year",
TIME_FORCING,
"",
"Day of year",
dtype="int32",
write_to_restart=True,
),
"dt": Variable(
"time step",
None,
"hours",
"time step",
dtype="float32",
initial=1,
write_to_restart=True,
),
"dt_secs": Variable(
"time step",
None,
"seconds",
"time step",
dtype="int32",
initial=3600,
write_to_restart=True,
),
"time_for_diag": Variable(
"cumulated time step within diagnostic period",
None,
"seconds",
"cumulated time step within diagnostic period",
dtype="int32",
initial=0,
write_to_restart=True,
),
"event_id": Variable(
"Event number",
TIMESTEPS,
"",
"Event number",
dtype="int32",
initial=0,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"event_id_counter": Variable(
"Counter of event number",
None,
"",
"Counter of event number",
dtype="int32",
initial=1,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
# base variables
"maskCatch": Variable(
"Mask for catchment",
CATCH_GRID,
"",
"Mask in physical space for catchment",
initial=True,
write_to_restart=True,
time_dependent=False,
dtype="bool",
),
"maskRiver": Variable(
"Mask for river",
RIVER_GRID,
"",
"Mask in physical space for river",
write_to_restart=True,
time_dependent=False,
dtype="bool",
),
"maskLake": Variable(
"Mask for lake",
LAKE_GRID,
"",
"Mask in physical space for lake",
time_dependent=False,
write_to_restart=True,
dtype="bool",
),
"maskUrban": Variable(
"Mask for urban",
URBAN_GRID,
"",
"Mask in physical space for urban",
time_dependent=False,
write_to_restart=True,
dtype="bool",
),
"maskBoundGw": Variable(
"Mask for boundaries",
BOUNDGW_GRID,
"",
"Mask in physical space for boundaries",
time_dependent=False,
write_to_restart=True,
dtype="bool",
active=lambda settings: settings.enable_groundwater,
),
"x": Variable(
"Zonal coordinate",
X,
lambda settings: "degrees_east" if settings.coord_degree else "m",
"Zonal (x) coordinate of grid center point",
time_dependent=False,
write_to_restart=True,
),
"y": Variable(
"Meridional coordinate",
Y,
lambda settings: "degrees_north" if settings.coord_degree else "m",
"Meridional (y) coordinate of grid center point",
time_dependent=False,
write_to_restart=True,
),
"z": Variable(
"Vertical coordinate of grid center point",
Z,
"mm",
"Vertical coordinate of grid center point",
time_dependent=False,
write_to_restart=True,
),
# surface parameters
"lu_id": Variable(
"Land_use",
CATCH_GRID,
"m",
"Land use",
dtype="int32",
time_dependent=False,
write_to_restart=True,
),
"LU_ID": Variable(
"Land_use",
CATCH_GRID + TIME,
"m",
"Land use",
dtype="int32",
time_dependent=False,
write_to_restart=True,
active=lambda settings: settings.enable_nitrate,
),
"sealing": Variable(
"degree of surface sealing",
CATCH_GRID,
"-",
"degree of surface sealing",
time_dependent=False,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"z0": Variable(
"depth of the surface ponding",
CATCH_GRID + TIMESTEPS,
"mm",
"depth of the surface ponding",
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"inner_boundary": Variable(
"catchment boundary",
CATCH_GRID,
"-",
"catchment boundary",
dtype="int32",
active=lambda settings: settings.enable_routing_1D,
write_to_restart=True,
),
"outer_boundary": Variable(
"catchment boundary",
CATCH_GRID,
"-",
"catchment boundary",
dtype="int32",
active=lambda settings: settings.enable_routing_1D,
write_to_restart=True,
),
"elev": Variable(
"surface elevation",
CATCH_GRID,
"m a.s.l.",
"surface elevation",
active=lambda settings: settings.enable_routing_1D,
write_to_restart=True,
),
"q0_out": Variable(
"surface runoff",
CATCH_GRID + FLOWDIRS,
"mm/s",
"surface runoff leaving a grid cell",
active=lambda settings: settings.enable_routing_1D,
write_to_restart=False,
),
"dz0": Variable(
"tendency of depth of the surface ponding",
CATCH_GRID + FLOWDIRS,
"m/m",
"tendency of depth of the surface ponding",
active=lambda settings: settings.enable_routing_1D,
write_to_restart=False,
),
"dz_sub": Variable(
"tendency of depth of the saturation water table",
CATCH_GRID + FLOWDIRS,
"m/m",
"tendency of depth of the saturation water table",
active=lambda settings: settings.enable_routing_1D,
write_to_restart=False,
),
"v0": Variable(
"flow velocity of surface runoff",
CATCH_GRID + FLOWDIRS,
"mm/s",
"flow velocity of surface runoff",
active=lambda settings: settings.enable_routing_1D,
write_to_restart=False,
),
"v_sub": Variable(
"flow velocity of subsurface runoff",
CATCH_GRID + FLOWDIRS,
"mm/s",
"flow velocity of subsurface runoff",
active=lambda settings: settings.enable_routing_1D,
write_to_restart=False,
),
"q_mat_out": Variable(
"matrix subsurface runoff",
CATCH_GRID + FLOWDIRS,
"mm/s",
"matrix subsurface runoff leaving a grid cell",
active=lambda settings: settings.enable_routing_1D,
write_to_restart=False,
),
"q_mp_out": Variable(
"macropore subsurface runoff",
CATCH_GRID + FLOWDIRS,
"mm/s",
"macropore subsurface runoff leaving a grid cell",
active=lambda settings: settings.enable_routing_1D,
write_to_restart=False,
),
"slope": Variable(
"surface slope",
CATCH_GRID,
"m/m",
"surface slope",
time_dependent=False,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"slope_per": Variable(
"surface slope",
CATCH_GRID,
"%",
"surface slope",
dtype="int32",
time_dependent=False,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"S_dep_tot": Variable(
"total surface depression storage",
CATCH_GRID,
"mm",
"total surface depression storage",
time_dependent=False,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"ground_cover": Variable(
"fraction of ground cover",
CATCH_GRID + TIMESTEPS,
"-",
"fraction of ground cover",
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"lai": Variable(
"leaf area index",
CATCH_GRID,
"-",
"leaf area index",
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"throughfall_coeff_top": Variable(
"throughfall coefficient of upper surface layer",
CATCH_GRID,
"-",
"throughfall coefficient of upper surface layer",
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"throughfall_coeff_ground": Variable(
"throughfall coefficient of lower surface layer",
CATCH_GRID,
"-",
"throughfall coefficient of lower surface layer",
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"basal_evap_coeff": Variable(
"basal soil evaporation coefficient",
CATCH_GRID,
"-",
"basal soil evaporation coefficient",
write_to_restart=True,
),
"k_stress_evap": Variable(
"water stress coefficient of soil evaporation",
CATCH_GRID,
"-",
"water stress coefficient of soil evaporation",
write_to_restart=True,
),
"evap_coeff": Variable(
"soil evaporation coefficient",
CATCH_GRID,
"-",
"soil evaporation coefficient",
write_to_restart=True,
),
"basal_transp_coeff": Variable(
"basal transpiration coefficient",
CATCH_GRID,
"-",
"basal transpiration coefficient",
write_to_restart=True,
),
"k_stress_transp": Variable(
"water stress coefficient of transpiration",
CATCH_GRID,
"-",
"water stress coefficient of transpiration",
write_to_restart=True,
),
"transp_coeff": Variable(
"transpiration coefficient",
CATCH_GRID,
"-",
"transpiration coefficient",
write_to_restart=True,
),
"S_int_top_tot": Variable(
"total interception storage of upper surface layer",
CATCH_GRID,
"-",
"total interception storage of upper surface layer",
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"S_int_ground_tot": Variable(
"total interception storage of lower surface layer",
CATCH_GRID,
"-",
"total interception storage of lower surface layer",
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"S": Variable(
"storage",
CATCH_GRID + TIMESTEPS,
"mm",
"storage",
write_to_restart=True,
),
"dS": Variable(
"storage change",
CATCH_GRID,
"mm",
"storage change",
),
# surface variables
"S_SNOW": Variable(
"snow storage",
CATCH_GRID + TIME,
"mm",
"snow storage",
active=lambda settings: settings.enable_offline_transport,
),
"S_snow": Variable(
"snow storage",
CATCH_GRID + TIMESTEPS,
"mm",
"snow storage",
write_to_restart=True,
),
"dS_snow": Variable(
"change in snow storage",
CATCH_GRID,
"mm/dt",
"change in snow storage",
),
"swe": Variable(
"snow water equivalent",
CATCH_GRID + TIMESTEPS,
"mm",
"snow water equivalent",
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"swe_top": Variable(
"snow water equivalent",
CATCH_GRID + TIMESTEPS,
"mm",
"snow water equivalent stored in snow cover of upper surface layer",
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"swe_top_tot": Variable(
"total snow water equivalent",
CATCH_GRID,
"mm",
"total snow water equivalent stored in snow cover of upper surface layer",
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"swe_ground": Variable(
"snow water equivalent",
CATCH_GRID + TIMESTEPS,
"mm",
"snow water equivalent stored in snow cover of lower surface layer",
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"S_dep": Variable(
"surface depression storage",
CATCH_GRID + TIMESTEPS,
"mm",
"surface depression storage",
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"S_sur": Variable(
"surface storage",
CATCH_GRID + TIMESTEPS,
"mm",
"surface storage",
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"dS_sur": Variable(
"change in surface storage",
CATCH_GRID,
"-",
"change in surface storage",
),
"S_int_top": Variable(
"interception storage of upper surface layer",
CATCH_GRID + TIMESTEPS,
"mm",
"interception storage of upper surface layer",
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"S_int_ground": Variable(
"interception storage of lower surface layer",
CATCH_GRID + TIMESTEPS,
"mm",
"interception storage of lower surface layer",
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"TA": Variable(
"air temperature",
TIME_FORCING,
"degC",
"air temperature",
),
"TA_MIN": Variable(
"daily minimum air temperature",
TIME_FORCING,
"degC",
"daily minimum air temperature",
active=lambda settings: not settings.enable_offline_transport and settings.enable_crop_phenology,
),
"TA_MAX": Variable(
"daily maximum air temperature",
TIME_FORCING,
"degC",
"daily maximum air temperature",
active=lambda settings: not settings.enable_offline_transport and settings.enable_crop_phenology,
),
"ta": Variable(
"air temperature",
CATCH_GRID + TIMESTEPS,
"degC",
"air temperature",
time_dependent=True,
),
"ta_year": Variable(
"average annual air temperature",
CATCH_GRID,
"degC",
"average annual air temperature",
time_dependent=True,
active=lambda settings: settings.enable_nitrate,
),
"ta_offset": Variable(
"offset of air temperature",
CATCH_GRID,
"degC",
"offset of air temperature",
initial=0,
active=lambda settings: not settings.enable_offline_transport,
),
"ta_day": Variable(
"air temperature",
CATCH_GRID + TIMESTEPS_DAY,
"degC",
"air temperature",
time_dependent=True,
active=lambda settings: not settings.enable_offline_transport,
),
# soil temperature
"temp_soil": Variable(
"soil temperature",
CATCH_GRID + TIMESTEPS,
"degC",
"soil temperature",
time_dependent=True,
active=lambda settings: settings.enable_nitrate,
),
"damp_soil_temp": Variable(
"dampening depth of soil temperature",
CATCH_GRID,
"m",
"diurnal dampening depth of soil temperature",
time_dependent=True,
initial=2290,
active=lambda settings: settings.enable_nitrate,
),
"phi_soil_temp": Variable(
"phase constant of soil temperature",
CATCH_GRID,
"days",
"phase constant of soil temperature",
time_dependent=True,
initial=-60,
active=lambda settings: settings.enable_nitrate,
),
# soil parameters and variables
"z_soil": Variable(
"Soil depth",
CATCH_GRID,
"mm",
"Soil depth",
time_dependent=False,
write_to_restart=True,
),
"c_root": Variable(
"scale parameter of root depth",
CATCH_GRID,
"-",
"scale parameter of root depth",
time_dependent=False,
write_to_restart=True,
initial=1.0,
active=lambda settings: not settings.enable_offline_transport,
),
"clay": Variable(
"fraction of clay content in soil",
CATCH_GRID,
"-",
"fraction of clay content in soil",
time_dependent=False,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"sand": Variable(
"fraction of sand content in soil",
CATCH_GRID,
"-",
"fraction of sand content in soil",
time_dependent=False,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"lmpv": Variable(
"length of vertical macropores",
CATCH_GRID,
"mm",
"length of vertical macropores",
time_dependent=False,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"lmpv_non_sat": Variable(
"non-saturated length of vertical macropores",
CATCH_GRID,
"mm",
"non-saturated length of vertical macropores",
time_dependent=False,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"z_sc": Variable(
"depth of shrinkage cracks",
CATCH_GRID,
"mm",
"depth of shrinkage cracks",
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"z_sc_non_sat": Variable(
"non-saturated depth of shrinkage cracks",
CATCH_GRID,
"mm",
"non-saturated depth of shrinkage cracks",
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"dmpv": Variable(
"density of vertical macropores",
CATCH_GRID,
"1/m^2",
"density of vertical macropores",
time_dependent=False,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"mp_drain_area": Variable(
"drainage area of vertical macropores",
CATCH_GRID,
"%",
"drainage area of vertical macropore",
time_dependent=False,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"dmph": Variable(
"density of horizontal macropores",
CATCH_GRID,
"1/m^2",
"density of horizontal macropores",
time_dependent=False,
write_to_restart=True,
active=lambda settings: settings.enable_lateral_flow,
),
"frac_lp": Variable(
"fraction of large pores",
CATCH_GRID,
"-",
"fraction of large pores",
time_dependent=False,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"frac_fp": Variable(
"fraction of fine pores",
CATCH_GRID,
"-",
"fraction of fine pores",
time_dependent=False,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"theta_eff": Variable(
"effective porosity",
CATCH_GRID,
"-",
"effective porosity",
time_dependent=False,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"theta_ufc": Variable(
"usable field capacity of soil",
CATCH_GRID,
"-",
"usable field capacity of soil",
time_dependent=False,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"theta_ac": Variable(
"air capacity of soil",
CATCH_GRID,
"-",
"air capacity of soil",
time_dependent=False,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"theta_pwp": Variable(
"permanent wilting point of soil",
CATCH_GRID,
"-",
"permanent wilting point of soil",
time_dependent=False,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"theta_sat": Variable(
"soil water content at saturation",
CATCH_GRID,
"-",
"soil water content at saturation",
time_dependent=False,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"theta_fc": Variable(
"soil water content at field capacity",
CATCH_GRID,
"-",
"soil water content at field capacity",
time_dependent=False,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"theta_27": Variable(
"soil water content at 2700 hPa potential",
CATCH_GRID,
"-",
"soil water content at 2700 hPa potential",
time_dependent=False,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"theta_4": Variable(
"soil water content at 4000 hPa potential",
CATCH_GRID,
"-",
"soil water content at 4000 hPa potential",
time_dependent=False,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"theta_6": Variable(
"soil water content at 6000 hPa potential",
CATCH_GRID,
"-",
"soil water content at 6000 hPa potential",
time_dependent=False,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"theta_pc": Variable(
"soil water content threshold for deep percolation and capillary rise",
CATCH_GRID,
"-",
"soil water content threshold for deep percolation and capillary rise",
time_dependent=False,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"S_ufc_s": Variable(
"usable field capacity of soil",
CATCH_GRID,
"mm",
"usable field capacity of soil",
time_dependent=False,
write_to_restart=True,
),
"S_ac_s": Variable(
"air capacity of soil",
CATCH_GRID,
"mm",
"air capacity of soil",
time_dependent=False,
write_to_restart=True,
),
"S_pwp_s": Variable(
"permanent wilting point of soil",
CATCH_GRID,
"mm",
"permanent wilting point of soil",
time_dependent=False,
write_to_restart=True,
),
"S_sat_s": Variable(
"soil water content at saturation",
CATCH_GRID,
"mm",
"soil water content at saturation",
time_dependent=False,
write_to_restart=True,
),
"S_fc_s": Variable(
"soil water content at field capacity",
CATCH_GRID,
"mm",
"soil water content at field capacity",
time_dependent=False,
write_to_restart=True,
),
"wfs": Variable(
"water front suction",
CATCH_GRID,
"mm",
"water front suction",
time_dependent=False,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"ks": Variable(
"Saturated hydraulic conductivity",
CATCH_GRID,
"mm/h",
"Saturated hydraulic conductivity",
time_dependent=False,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"ha": Variable(
"air entry value",
CATCH_GRID,
"hpa",
"air entry value",
time_dependent=False,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"lambda_bc": Variable(
"pore-size distribution index",
CATCH_GRID,
"-",
"pore-size distribution index",
time_dependent=False,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"m_bc": Variable(
"pore-connectivity parameter",
CATCH_GRID,
"-",
"pore-connectivity parameter",
time_dependent=False,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"n_salv": Variable(
"salvucci exponent",
CATCH_GRID,
"-",
"salvucci exponent",
time_dependent=False,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"z_sc_max": Variable(
"maximum depth of shrinkage cracks",
CATCH_GRID,
"mm",
"maximum depth of shrinkage cracks",
time_dependent=False,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"v_mp_layer_1": Variable(
"macropore flow velocity in the first layer",
CATCH_GRID,
"mm/h",
"macropore flow velocity in the first layer",
time_dependent=False,
active=lambda settings: not settings.enable_offline_transport and settings.enable_lateral_flow,
),
"v_mp_layer_2": Variable(
"macropore flow velocity in the second layer",
CATCH_GRID,
"mm/h",
"macropore flow velocity in the second layer",
time_dependent=False,
active=lambda settings: not settings.enable_offline_transport and settings.enable_lateral_flow,
),
"v_mp_layer_3": Variable(
"macropore flow velocity in the third layer",
CATCH_GRID,
"mm/h",
"macropore flow velocity in the third layer",
time_dependent=False,
active=lambda settings: not settings.enable_offline_transport and settings.enable_lateral_flow,
),
"v_mp_layer_4": Variable(
"macropore flow velocity in the fourth layer",
CATCH_GRID,
"mm/h",
"macropore flow velocity in the fourth layer",
time_dependent=False,
active=lambda settings: not settings.enable_offline_transport and settings.enable_lateral_flow,
),
"v_mp_layer_5": Variable(
"macropore flow velocity in the fifth layer",
CATCH_GRID,
"mm/h",
"macropore flow velocity in the fifth layer",
time_dependent=False,
active=lambda settings: not settings.enable_offline_transport and settings.enable_lateral_flow,
),
"v_mp_layer_6": Variable(
"macropore flow velocity in the sixth layer",
CATCH_GRID,
"mm/h",
"macropore flow velocity in the sixth layer",
time_dependent=False,
active=lambda settings: not settings.enable_offline_transport and settings.enable_lateral_flow,
),
"v_mp_layer_7": Variable(
"macropore flow velocity in the seventh layer",
CATCH_GRID,
"mm/h",
"macropore flow velocity in the seventh layer",
time_dependent=False,
active=lambda settings: not settings.enable_offline_transport and settings.enable_lateral_flow,
),
"v_mp_layer_8": Variable(
"macropore flow velocity in the eighth layer",
CATCH_GRID,
"mm/h",
"macropore flow velocity in the eighth layer",
time_dependent=False,
active=lambda settings: not settings.enable_offline_transport and settings.enable_lateral_flow,
),
"event_no_ff": Variable(
"Film flow event number",
None,
"",
"Film flow event number",
dtype="int32",
initial=0,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_film_flow,
),
"event_id_ff": Variable(
"Film flow event number",
None,
"",
"Film flow event number",
dtype="int32",
initial=0,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_film_flow,
),
"event_id_ff_counter": Variable(
"counter of film flow event number",
None,
"",
"counter of film flow event number",
dtype="int32",
initial=0,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_film_flow,
),
"event_start_ff": Variable(
"iteration when new film flow event starts",
NEVENTS_FF,
"",
"iteration when new film flow event starts",
dtype="int32",
initial=0,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_film_flow,
),
"event_end_ff": Variable(
"iteration when film flow event stops",
NEVENTS_FF,
"",
"iteration when film flow event stops",
dtype="int32",
initial=0,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_film_flow,
),
"rain_int_ff": Variable(
"rainfall intensity of film flow input pulse",
CATCH_GRID + NEVENTS_FF,
"mm/10min",
"rainfall intensity of film flow input pulse",
time_dependent=False,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_film_flow,
),
"rain_event": Variable(
"rainfall of a film flow event",
CATCH_GRID + TIMESTEPS_EVENT_FF,
"mm/dt",
"rainfall of a film flow event",
write_to_restart=True,
time_dependent=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_film_flow,
),
"rain_event_ff": Variable(
"rectangular rainfall pulse of a film flow event",
CATCH_GRID + TIMESTEPS_EVENT_FF,
"mm/dt",
"rectangular rainfall pulse of a film flow event",
write_to_restart=True,
time_dependent=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_film_flow,
),
"rain_event_sum": Variable(
"rainfall sum of a film flow event",
CATCH_GRID,
"mm",
"rainfall sum of a film flow event",
write_to_restart=True,
time_dependent=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_film_flow,
),
"rain_event_csum": Variable(
"cumulated rainfall sum of a film flow event",
CATCH_GRID + TIMESTEPS_EVENT_FF,
"mm",
"cumulated rainfall sum of a film flow event",
write_to_restart=True,
time_dependent=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_film_flow,
),
"t_end_ff": Variable(
"time of film flow event",
CATCH_GRID + NEVENTS_FF,
"10min",
"time of film flow event",
time_dependent=False,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_film_flow,
),
"ti_ff": Variable(
"time of intersection between wetting front and drainage front",
CATCH_GRID + NEVENTS_FF,
"10min",
"time of intersection between wetting front and drainage front",
time_dependent=False,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_film_flow,
),
"tb_ff": Variable(
"time at beginning of rainfall input pulse",
CATCH_GRID + NEVENTS_FF,
"10min",
"time at beginning of rainfall input pulse",
time_dependent=False,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_film_flow,
),
"ts_ff": Variable(
"time at end of rainfall input pulse",
CATCH_GRID + NEVENTS_FF,
"10min",
"time at end of rainfall input pulse",
time_dependent=False,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_film_flow,
),
"tw_ff": Variable(
"time at arrival of wetting front at soil depth",
CATCH_GRID + NEVENTS_FF,
"10min",
"time at arrival of wetting front at soil depth",
time_dependent=False,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_film_flow,
),
"tp_ff": Variable(
"time at arrival of percolation front at soil depth",
CATCH_GRID + NEVENTS_FF,
"10min",
"time at arrival of percolation front at soil depth",
time_dependent=False,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_film_flow,
),
"qs_ff": Variable(
"volume flux density of film flow",
CATCH_GRID + NEVENTS_FF,
"m/s",
"volume flux density of film flow",
time_dependent=False,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_film_flow,
),
"zi_ff": Variable(
"depth of intersection between wetting front and drainage front",
CATCH_GRID + NEVENTS_FF,
"mm",
"depth of intersection between wetting front and drainage front",
time_dependent=False,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_film_flow,
),
"rain_ff": Variable(
"rainfall pulse of film flow",
CATCH_GRID,
"mm/10min",
"rainfall pulse of film flow",
time_dependent=False,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_film_flow,
),
"v_wf": Variable(
"velocity of film flow wetting front",
CATCH_GRID + NEVENTS_FF,
"mm/dt",
"velocity of film flow wetting front",
time_dependent=False,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_film_flow,
),
"v_perc": Variable(
"velocity of film flow percolation front",
CATCH_GRID + NEVENTS_FF,
"mm/dt",
"velocity of film flow percolation front",
time_dependent=False,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_film_flow,
),
"ff_abs_rz": Variable(
"film flow abstraction into root zone",
CATCH_GRID + NEVENTS_FF,
"mm/dt",
"film flow abstraction into root zone",
time_dependent=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_film_flow,
),
"ff_abs_ss": Variable(
"film flow abstraction into subsoil",
CATCH_GRID + NEVENTS_FF,
"mm/dt",
"film flow abstraction into subsoil",
time_dependent=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_film_flow,
),
"ff_abs": Variable(
"film flow abstraction into soil",
CATCH_GRID + NEVENTS_FF,
"mm/dt",
"film flow abstraction into soil",
time_dependent=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_film_flow,
),
"theta_d_rel_rz_ff": Variable(
"relative saturation deficit of root zone",
CATCH_GRID + NEVENTS_FF,
"-",
"relative saturation deficit of root zone",
time_dependent=True,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_film_flow,
),
"theta_d_rel_ss_ff": Variable(
"relative saturation deficit of subsoil",
CATCH_GRID + NEVENTS_FF,
"-",
"relative saturation deficit of subsoil",
time_dependent=True,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_film_flow,
),
"S_f_rz": Variable(
"film volume of root zone",
CATCH_GRID + NEVENTS_FF,
"mm",
"film volume of root zone",
time_dependent=True,
write_to_restart=True,
active=lambda settings: settings.enable_film_flow,
),
"S_f_ss": Variable(
"film volume of subsoil",
CATCH_GRID + NEVENTS_FF,
"mm",
"film volume of subsoil",
time_dependent=True,
write_to_restart=True,
active=lambda settings: settings.enable_film_flow,
),
"S_f": Variable(
"film volume",
CATCH_GRID + NEVENTS_FF,
"mm",
"film volume",
time_dependent=True,
write_to_restart=True,
active=lambda settings: settings.enable_film_flow,
),
"ff_drain": Variable(
"film flow drainage",
CATCH_GRID,
"mm/dt",
"film flow drainage",
time_dependent=True,
active=lambda settings: settings.enable_film_flow,
),
"theta_rz_ff": Variable(
"soil water content including film flow of root zone",
CATCH_GRID + TIMESTEPS,
"-",
"soil water content including film flow of root zone",
time_dependent=True,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_film_flow,
),
"theta_ss_ff": Variable(
"soil water content including film flow of subsoil",
CATCH_GRID + TIMESTEPS,
"-",
"soil water content including film flow of subsoil",
time_dependent=True,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_film_flow,
),
"theta_ff": Variable(
"soil water content including film flow",
CATCH_GRID + TIMESTEPS,
"-",
"soil water content including film flow",
time_dependent=True,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_film_flow,
),
"S_rz_ff": Variable(
"storage of root zone including film flow",
CATCH_GRID + TIMESTEPS,
"-",
"storage of root zone including film flow",
time_dependent=True,
write_to_restart=True,
active=lambda settings: settings.enable_film_flow,
),
"S_ss_ff": Variable(
"storage of subsoil including film flow",
CATCH_GRID + TIMESTEPS,
"-",
"storage of subsoil including film flow",
time_dependent=True,
write_to_restart=True,
active=lambda settings: settings.enable_film_flow,
),
"S_ff": Variable(
"storage including film flow",
CATCH_GRID + TIMESTEPS,
"-",
"storage including film flow",
time_dependent=True,
write_to_restart=True,
active=lambda settings: settings.enable_film_flow,
),
"itt_event_ff": Variable(
"iteration within film flow event",
NEVENTS_FF,
"",
"iteration within film flow event",
dtype="int32",
time_dependent=True,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_film_flow,
),
"z_wf_ff": Variable(
"depth of water content wave",
CATCH_GRID + NEVENTS_FF + TIMESTEPS,
"mm",
"depth of water content wave",
time_dependent=True,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_film_flow,
),
"z_pf_ff": Variable(
"depth of percolation front",
CATCH_GRID + NEVENTS_FF + TIMESTEPS,
"mm",
"depth of percolation front",
time_dependent=True,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_film_flow,
),
"z_pf": Variable(
"depth of percolation front",
CATCH_GRID + TIMESTEPS,
"mm",
"depth of percolation front",
time_dependent=True,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_film_flow,
),
"a_ff": Variable(
"film flow parameter",
CATCH_GRID,
"-",
"film flow parameter",
time_dependent=False,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_film_flow,
),
"c_ff": Variable(
"fudge parameter of film flow abstraction",
CATCH_GRID,
"-",
"fudge parameter of film flow abstraction",
time_dependent=False,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_film_flow,
),
"kf": Variable(
"vertical hydraulic conductivity of bedrock",
CATCH_GRID,
"mm/h",
"vertical hydraulic conductivity of bedrock",
time_dependent=False,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"theta": Variable(
"Soil water content",
CATCH_GRID + TIMESTEPS,
"-",
"Soil water content",
write_to_restart=True,
time_dependent=True,
active=lambda settings: not settings.enable_offline_transport,
),
"theta_fp": Variable(
"Soil water content in fine pores",
CATCH_GRID,
"-",
"Soil water content in fine pores",
time_dependent=True,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"theta_lp": Variable(
"Soil water content in large pores",
CATCH_GRID,
"-",
"Soil water content in large pores",
time_dependent=True,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"theta_d": Variable(
"soil moisture deficit",
CATCH_GRID,
"-",
"soil moisture deficit",
time_dependent=True,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"theta_d_fp": Variable(
"soil moisture deficit in fine pores",
CATCH_GRID,
"-",
"soil moisture deficit in fine pores",
time_dependent=True,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"theta_d_rel": Variable(
"relative soil moisture deficit",
CATCH_GRID,
"-",
"relative soil moisture deficit",
time_dependent=True,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"theta_d_rel_t0": Variable(
"relative soil moisture deficit at beginning of event",
CATCH_GRID,
"-",
"relative soil moisture deficit at beginning of event",
time_dependent=True,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"theta_d_rel_t1": Variable(
"relative soil moisture deficit after rainfall pause",
CATCH_GRID,
"-",
"relative soil moisture deficit after rainfall pause",
time_dependent=True,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"theta_d_t0": Variable(
"soil moisture deficit at beginning of event",
CATCH_GRID,
"-",
"soil moisture deficit at beginning of event",
time_dependent=True,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"theta_d_t1": Variable(
"soil moisture deficit after rainfall pause",
CATCH_GRID,
"-",
"soil moisture deficit after rainfall pause",
time_dependent=True,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"S_S": Variable(
"soil water content",
CATCH_GRID + TIME,
"mm",
"soil water content",
active=lambda settings: settings.enable_offline_transport,
),
"S_s": Variable(
"soil water content",
CATCH_GRID + TIMESTEPS,
"mm",
"soil water content",
write_to_restart=True,
time_dependent=True,
),
"dS_s": Variable(
"change in soil water content",
CATCH_GRID,
"mm/dt",
"change in soil water content",
time_dependent=True,
),
"S_fp_s": Variable(
"soil water content in fine pores",
CATCH_GRID,
"mm",
"soil water content in fine pores",
time_dependent=False,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"S_lp_s": Variable(
"soil water content in large pores",
CATCH_GRID,
"mm",
"soil water content in large pores",
time_dependent=False,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"S_zsat": Variable(
"soil water content in large pores below saturation water level",
CATCH_GRID,
"mm",
"soil water content in large pores below saturation water level",
time_dependent=False,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"k": Variable(
"hydraulic conductivity of soil",
CATCH_GRID + TIMESTEPS,
"mm/h",
"hydraulic conductivity of soil",
time_dependent=True,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"h": Variable(
"soil water potential",
CATCH_GRID + TIMESTEPS,
"hPa",
"soil water potential",
time_dependent=True,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"y_mp": Variable(
"radial length of macropore wetting front",
CATCH_GRID + TIMESTEPS,
"mm",
"radial length of macropore wetting front",
write_to_restart=True,
time_dependent=True,
active=lambda settings: not settings.enable_offline_transport,
),
"y_sc": Variable(
"horizontal length of shrinkage crack wetting front",
CATCH_GRID + TIMESTEPS,
"mm",
"horizontal length of shrinkage crack wetting front",
write_to_restart=True,
time_dependent=True,
active=lambda settings: not settings.enable_offline_transport,
),
"z_wf": Variable(
"depth of wetting front",
CATCH_GRID + TIMESTEPS,
"mm",
"depth of wetting front",
write_to_restart=True,
time_dependent=True,
active=lambda settings: not settings.enable_offline_transport,
),
"z_wf_t0": Variable(
"depth of wetting front",
CATCH_GRID + TIMESTEPS,
"mm",
"depth of wetting front",
write_to_restart=True,
time_dependent=True,
active=lambda settings: not settings.enable_offline_transport,
),
"z_wf_t1": Variable(
"depth of wetting front",
CATCH_GRID + TIMESTEPS,
"mm",
"depth of wetting front",
write_to_restart=True,
time_dependent=True,
active=lambda settings: not settings.enable_offline_transport,
),
"z_wf_fc": Variable(
"depth of wetting front to fill storage until field capacity",
CATCH_GRID,
"mm",
"depth of wetting front to fill storage until field capacity",
write_to_restart=True,
time_dependent=True,
active=lambda settings: not settings.enable_offline_transport,
),
"z_sat_layer_1": Variable(
"saturation depth of the first layer",
CATCH_GRID + TIMESTEPS,
"mm",
"saturation depth of the first layer",
write_to_restart=True,
time_dependent=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_lateral_flow,
),
"z_sat_layer_2": Variable(
"saturation depth of the second layer",
CATCH_GRID + TIMESTEPS,
"mm",
"saturation depth of the second layer",
write_to_restart=True,
time_dependent=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_lateral_flow,
),
"z_sat_layer_3": Variable(
"saturation depth of the third layer",
CATCH_GRID + TIMESTEPS,
"mm",
"saturation depth of the third layer",
write_to_restart=True,
time_dependent=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_lateral_flow,
),
"z_sat_layer_4": Variable(
"saturation depth of the fourth layer",
CATCH_GRID + TIMESTEPS,
"mm",
"saturation depth of the fourth layer",
write_to_restart=True,
time_dependent=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_lateral_flow,
),
"z_sat_layer_5": Variable(
"saturation depth of the fifth layer",
CATCH_GRID + TIMESTEPS,
"mm",
"saturation depth of the fifth layer",
write_to_restart=True,
time_dependent=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_lateral_flow,
),
"z_sat_layer_6": Variable(
"saturation depth of the sixth layer",
CATCH_GRID + TIMESTEPS,
"mm",
"saturation depth of the sixth layer",
write_to_restart=True,
time_dependent=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_lateral_flow,
),
"z_sat_layer_7": Variable(
"saturation depth of the seventh layer",
CATCH_GRID + TIMESTEPS,
"mm",
"saturation depth of the seventh layer",
write_to_restart=True,
time_dependent=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_lateral_flow,
),
"z_sat_layer_8": Variable(
"saturation depth of the eighth layer",
CATCH_GRID + TIMESTEPS,
"mm/h",
"saturation depth of the eighth layer",
write_to_restart=True,
time_dependent=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_lateral_flow,
),
"z_sat": Variable(
"depth of saturation water level",
CATCH_GRID + TIMESTEPS,
"mm/",
"depth of saturation water level",
write_to_restart=True,
time_dependent=True,
active=lambda settings: not settings.enable_offline_transport,
),
"dz_sat": Variable(
"change in saturation water level",
CATCH_GRID,
"mm/dt",
"change in saturation water level",
time_dependent=True,
),
"sa_s": Variable(
"water StorAge of soil",
CATCH_GRID + TIMESTEPS + AGES,
"mm",
"water StorAge of soil",
time_dependent=True,
write_to_restart=True,
active=lambda settings: settings.enable_offline_transport,
),
"SA_s": Variable(
"cumulative water StorAge of soil",
CATCH_GRID + TIMESTEPS + NAGES,
"mm",
"cumulative water StorAge of soil",
write_to_restart=True,
time_dependent=True,
active=lambda settings: settings.enable_offline_transport,
),
"msa_s": Variable(
"solute mass StorAge of soil",
CATCH_GRID + TIMESTEPS + AGES,
"mg",
"solute mass StorAge of soil",
time_dependent=True,
write_to_restart=True,
active=lambda settings: settings.enable_offline_transport,
),
"csa_s": Variable(
"isotope StorAge of soil",
CATCH_GRID + TIMESTEPS + AGES,
"per mil",
"isotope StorAge of soil",
time_dependent=True,
write_to_restart=True,
active=lambda settings: settings.enable_offline_transport,
),
"M_s": Variable(
"solute mass of soil",
CATCH_GRID + TIMESTEPS,
"mg",
"solute mass of soil",
time_dependent=True,
write_to_restart=True,
active=lambda settings: settings.enable_offline_transport,
),
"C_s": Variable(
"solute concentration of soil",
CATCH_GRID + TIMESTEPS,
"mg/l",
"solute concentration of soil",
time_dependent=True,
write_to_restart=True,
active=lambda settings: settings.enable_offline_transport,
),
"C_iso_s": Variable(
"isotope ratio of soil",
CATCH_GRID + TIMESTEPS,
"per mil",
"isotope ratio of soil",
time_dependent=True,
write_to_restart=True,
active=lambda settings: settings.enable_offline_transport
& (settings.enable_oxygen18 | settings.enable_deuterium),
),
"mr_s": Variable(
"mass removal from solute mass StorAge of soil",
CATCH_GRID + AGES,
"mg",
"mass removal from solute mass StorAge of soil",
time_dependent=True,
active=lambda settings: settings.enable_nitrate,
),
"denit_s": Variable(
"denitrification of soil nitrate",
CATCH_GRID,
"mg/dt",
"denitrification of soil nitrate",
time_dependent=True,
active=lambda settings: settings.enable_nitrate,
),
"ngas_s": Variable(
"gaseous loss of ammonium",
CATCH_GRID,
"mg/dt",
"gaseous loss of ammonium",
time_dependent=True,
active=lambda settings: settings.enable_nitrate,
),
"ma_s": Variable(
"mass input to solute mass StorAge of soil",
CATCH_GRID + AGES,
"mg",
"mass input to solute mass StorAge of soil",
time_dependent=True,
active=lambda settings: settings.enable_nitrate,
),
"nit_s": Variable(
"nitrification of mineral soil nitrogen",
CATCH_GRID,
"mg/dt",
"nitrification of mineral soil nitrogen",
time_dependent=True,
active=lambda settings: settings.enable_nitrate,
),
"min_s": Variable(
"mineralization of soil nitrogen",
CATCH_GRID,
"mg/dt",
"mineralization of soil nitrogen",
time_dependent=True,
active=lambda settings: settings.enable_nitrate,
),
"ndep_s": Variable(
"nitrogen deposition",
CATCH_GRID,
"mg/dt",
"nitrogen deposition",
time_dependent=True,
active=lambda settings: settings.enable_nitrate,
),
"nfix_s": Variable(
"nitrogen fixation",
CATCH_GRID,
"mg/dt",
"nitrogen fixation",
time_dependent=True,
active=lambda settings: settings.enable_nitrate,
),
"rt10_s": Variable(
"10th percentile of soil residence time",
CATCH_GRID,
"days",
"10th percentile of soil residence time",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport & settings.enable_age_statistics,
),
"rt25_s": Variable(
"25th percentile of soil residence time",
CATCH_GRID,
"days",
"25th percentile of soil residence time",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport & settings.enable_age_statistics,
),
"rt50_s": Variable(
"50th percentile of soil residence time",
CATCH_GRID,
"days",
"50th percentile of soil residence time",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport & settings.enable_age_statistics,
),
"rt75_s": Variable(
"75th percentile of soil residence time",
CATCH_GRID,
"days",
"75th percentile of soil residence time",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport & settings.enable_age_statistics,
),
"rt90_s": Variable(
"90th percentile of soil residence time",
CATCH_GRID,
"days",
"90th percentile of soil residence time",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport & settings.enable_age_statistics,
),
"rtavg_s": Variable(
"average of soil residence time",
CATCH_GRID,
"days",
"average of soil residence time",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport & settings.enable_age_statistics,
),
"Nmin_s": Variable(
"inorganic nitrogen in soil",
CATCH_GRID + TIMESTEPS,
"mg",
"inorganic nitrogen in soil",
write_to_restart=True,
time_dependent=True,
active=lambda settings: settings.enable_nitrate,
),
# root zone parameters and variables
"z_root": Variable(
"Root depth",
CATCH_GRID + TIMESTEPS,
"mm",
"Root depth",
write_to_restart=True,
time_dependent=True,
active=lambda settings: not settings.enable_offline_transport or settings.enable_nitrate,
),
"zroot_to_zsoil_max": Variable(
"maximum ratio of root zone depth to soil depth",
CATCH_GRID,
"-",
"maximum ratio of root zone depth to soil depth",
initial=0.75,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"Z_ROOT": Variable(
"Root depth",
CATCH_GRID + TIME,
"mm",
"Root depth",
write_to_restart=True,
time_dependent=True,
active=lambda settings: settings.enable_nitrate,
),
"z_evap": Variable(
"evaporation depth",
CATCH_GRID,
"m",
"evaporation depth",
write_to_restart=True,
time_dependent=True,
active=lambda settings: not settings.enable_offline_transport,
),
"tew": Variable(
"total evaporable water",
CATCH_GRID,
"mm",
"total evaporable water",
time_dependent=False,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"rew": Variable(
"readily evaporable water",
CATCH_GRID,
"mm",
"readily evaporable water",
time_dependent=False,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"de": Variable(
"accumulated soil evaporation deficit",
CATCH_GRID,
"mm",
"accumulated soil evaporation deficit",
time_dependent=False,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"theta_water_stress": Variable(
"soil water content below water stress of plants starts",
CATCH_GRID,
"-",
"soil water content below water stress of plants starts",
time_dependent=False,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"water_stress_fp": Variable(
"fraction of extractable fine pore storage for plant",
CATCH_GRID,
"-",
"fraction of extractable fine pore storage for plant",
time_dependent=False,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"k_rz": Variable(
"hydraulic conductivity of root zone",
CATCH_GRID + TIMESTEPS,
"mm/h",
"hydraulic conductivity of root zone",
time_dependent=True,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"h_rz": Variable(
"soil water potential of root zone",
CATCH_GRID + TIMESTEPS,
"hPa",
"soil water potential of root zone",
time_dependent=True,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"theta_rz": Variable(
"Soil moisture in root zone",
CATCH_GRID + TIMESTEPS,
"-",
"Soil moisture in root zone",
write_to_restart=True,
time_dependent=True,
active=lambda settings: not settings.enable_offline_transport,
),
"theta_fp_rz": Variable(
"Soil water content in fine pores",
CATCH_GRID,
"-",
"Soil water content in fine pores",
time_dependent=True,
write_to_restart=True,
),
"theta_lp_rz": Variable(
"Soil water content in large pores",
CATCH_GRID,
"-",
"Soil water content in large pores",
time_dependent=True,
write_to_restart=True,
),
"S_RZ": Variable(
"soil water content in root zone",
CATCH_GRID + TIME,
"mm",
"soil water content in root zone",
active=lambda settings: settings.enable_offline_transport,
),
"S_rz": Variable(
"soil water content in root zone",
CATCH_GRID + TIMESTEPS,
"mm",
"soil water content in root zone",
write_to_restart=True,
time_dependent=True,
),
"S_rz_init": Variable(
"initial soil water content in root zone",
CATCH_GRID,
"mm",
"initial soil water content in root zone",
write_to_restart=True,
time_dependent=False,
active=lambda settings: settings.enable_offline_transport,
),
"dS_rz": Variable(
"change of soil water content in root zone",
CATCH_GRID,
"mm/dt",
"change of soil water content in root zone",
time_dependent=True,
),
"S_fp_rz": Variable(
"soil water content of fine pores in root zone",
CATCH_GRID,
"mm",
"soil water content of fine pores in root zone",
time_dependent=False,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"S_lp_rz": Variable(
"soil water content of large pores in root zone",
CATCH_GRID,
"mm",
"soil water content of large pores in root zone",
time_dependent=False,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"S_zsat_rz": Variable(
"soil water content in large pores below saturation water level",
CATCH_GRID,
"mm",
"soil water content in large pores below saturation water level",
time_dependent=False,
),
"S_PWP_RZ": Variable(
"soil water content at permanent wilting point in root zone",
CATCH_GRID + TIME,
"mm",
"soil water content at permanent wilting point in root zone",
active=lambda settings: settings.enable_offline_transport & settings.enable_crop_phenology,
),
"S_pwp_rz": Variable(
"soil water content at permanent wilting point in root zone",
CATCH_GRID,
"mm",
"soil water content at permanent wilting point in root zone",
time_dependent=False,
write_to_restart=True,
),
"S_fc_rz": Variable(
"soil water content at field capacity in root zone",
CATCH_GRID,
"mm",
"soil water content at field capacity in root zone",
time_dependent=False,
write_to_restart=True,
),
"S_SAT_RZ": Variable(
"soil water content at saturation in root zone",
CATCH_GRID + TIME,
"mm",
"soil water content at saturation in root zone",
active=lambda settings: settings.enable_offline_transport & settings.enable_crop_phenology,
),
"S_sat_rz": Variable(
"soil water content at saturation in root zone",
CATCH_GRID,
"mm",
"soil water content at saturation in root zone",
time_dependent=False,
write_to_restart=True,
),
"S_ufc_rz": Variable(
"usable field capacity of root zone",
CATCH_GRID,
"mm",
"usable field capacity of root zone",
time_dependent=False,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"S_ac_rz": Variable(
"air capacity of root zone",
CATCH_GRID,
"mm",
"air capacity of root zone",
time_dependent=False,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"sa_rz": Variable(
"water StorAge of root zone",
CATCH_GRID + TIMESTEPS + AGES,
"mm",
"water StorAge of root zone",
time_dependent=True,
write_to_restart=True,
active=lambda settings: settings.enable_offline_transport,
),
"SA_rz": Variable(
"cumulative water StorAge of root zone",
CATCH_GRID + TIMESTEPS + NAGES,
"mm",
"cumulative water StorAge of root zone",
write_to_restart=True,
time_dependent=True,
active=lambda settings: settings.enable_offline_transport,
),
"msa_rz": Variable(
"solute mass StorAge of root zone",
CATCH_GRID + TIMESTEPS + AGES,
"mg",
"solute mass StorAge of root zone",
time_dependent=True,
write_to_restart=True,
active=lambda settings: settings.enable_offline_transport,
),
"csa_rz": Variable(
"isotope StorAge of root zone",
CATCH_GRID + TIMESTEPS + AGES,
"per mil",
"isotope StorAge of root zone",
time_dependent=True,
write_to_restart=True,
active=lambda settings: settings.enable_offline_transport,
),
"M_rz": Variable(
"solute mass of root zone",
CATCH_GRID + TIMESTEPS,
"mg",
"solute mass of root zone",
time_dependent=True,
write_to_restart=True,
active=lambda settings: settings.enable_offline_transport,
),
"C_rz": Variable(
"solute concentration of root zone",
CATCH_GRID + TIMESTEPS,
"mg/l",
"solute concentration of root zone",
time_dependent=True,
write_to_restart=True,
active=lambda settings: settings.enable_offline_transport,
),
"C_iso_rz": Variable(
"isotope ratio of root zone",
CATCH_GRID + TIMESTEPS,
"per mil",
"isotope ratio of root zone",
time_dependent=True,
write_to_restart=True,
active=lambda settings: settings.enable_offline_transport
& (settings.enable_oxygen18 | settings.enable_deuterium),
),
"rt10_rz": Variable(
"10th percentile of root zone residence time",
CATCH_GRID,
"days",
"10th percentile of root zone residence time",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport & settings.enable_age_statistics,
),
"rt25_rz": Variable(
"25th percentile of root zone residence time",
CATCH_GRID,
"days",
"25th percentile of root zone residence time",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport & settings.enable_age_statistics,
),
"rt50_rz": Variable(
"50th percentile of root zone residence time",
CATCH_GRID,
"days",
"50th percentile of root zone residence time",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport & settings.enable_age_statistics,
),
"rt75_rz": Variable(
"75th percentile of root zone residence time",
CATCH_GRID,
"days",
"75th percentile of root zone residence time",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport & settings.enable_age_statistics,
),
"rt90_rz": Variable(
"90th percentile of root zone residence time",
CATCH_GRID,
"days",
"90th percentile of root zone residence time",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport & settings.enable_age_statistics,
),
"rtavg_rz": Variable(
"average of root zone residence time",
CATCH_GRID,
"days",
"average of root zone residence time",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport & settings.enable_age_statistics,
),
"km_denit_rz": Variable(
"Michaelis constant for denitrification",
CATCH_GRID,
"kg N ha-1 year-1",
"Michaelis constant for denitrification",
write_to_restart=True,
time_dependent=False,
active=lambda settings: settings.enable_nitrate,
),
"dmax_denit_rz": Variable(
"maximum denitrification rate",
CATCH_GRID,
"kg N ha-1 year-1",
"maximum denitrification rate",
write_to_restart=True,
time_dependent=False,
active=lambda settings: settings.enable_nitrate,
),
"km_nit_rz": Variable(
"Michaelis constant for nitrification",
CATCH_GRID,
"kg N ha-1 year-1",
"Michaelis constant for nitrification",
write_to_restart=True,
time_dependent=False,
active=lambda settings: settings.enable_nitrate,
),
"dmax_nit_rz": Variable(
"maximum nitrification rate",
CATCH_GRID,
"kg N ha-1 year-1",
"maximum nitrification rate",
write_to_restart=True,
time_dependent=False,
active=lambda settings: settings.enable_nitrate,
),
"kmin_rz": Variable(
"constant soil nitrogen mineralization rate",
CATCH_GRID,
"kg N ha-1 year-1",
"constant soil nitrogen mineralization rate",
write_to_restart=True,
time_dependent=False,
active=lambda settings: settings.enable_nitrate,
),
"kngl_rz": Variable(
"constant gaseous loss rate of ammonium",
CATCH_GRID,
"kg N ha-1 year-1",
"constant gaseous loss rate of ammonium",
write_to_restart=True,
time_dependent=False,
active=lambda settings: settings.enable_nitrate,
),
"kfix_rz": Variable(
"constant nitrogen fixation rate",
CATCH_GRID,
"kg N ha-1 year-1",
"constant nitrogen fixation rate",
write_to_restart=True,
time_dependent=False,
initial=0,
active=lambda settings: settings.enable_nitrate,
),
"kdep": Variable(
"constant nitrogen deposition rate",
CATCH_GRID,
"kg N ha-1 year-1",
"constant nitrogen deposition rate",
write_to_restart=True,
time_dependent=False,
initial=0,
active=lambda settings: settings.enable_nitrate,
),
"nup": Variable(
"potential nitrogen uptake rate by plants",
CATCH_GRID,
"kg N ha-1 day-1",
"potential nitrogen uptake rate by plants",
write_to_restart=True,
time_dependent=False,
initial=0,
active=lambda settings: settings.enable_nitrate,
),
"nh4_up": Variable(
"nitrogen uptake rate by plants",
CATCH_GRID,
"mg N day-1",
"nitrogen uptake rate by plants",
write_to_restart=True,
time_dependent=False,
initial=0,
active=lambda settings: settings.enable_nitrate,
),
"c_fert": Variable(
"ratio to dissolve mineral nitrogen fertilizer",
CATCH_GRID,
"-",
"ratio to dissolve mineral nitrogen fertilizer",
write_to_restart=True,
time_dependent=False,
initial=0.3,
active=lambda settings: settings.enable_nitrate,
),
"mr_rz": Variable(
"mass removal from solute mass StorAge of root zone",
CATCH_GRID + AGES,
"mg",
"mass removal from solute mass StorAge of root zone",
time_dependent=True,
active=lambda settings: settings.enable_nitrate,
),
"ma_rz": Variable(
"mass input to solute mass StorAge of root zone",
CATCH_GRID + AGES,
"mg",
"mass input to solute mass StorAge of root zone",
time_dependent=True,
active=lambda settings: settings.enable_nitrate,
),
"Nmin_rz": Variable(
"inorganic nitrogen in root zone",
CATCH_GRID + TIMESTEPS + AGES,
"mg",
"inorganic nitrogen in root zone",
write_to_restart=True,
time_dependent=True,
active=lambda settings: settings.enable_nitrate,
),
# subsoil parameters and variables
"k_ss": Variable(
"hydraulic conductivity of subsoil",
CATCH_GRID + TIMESTEPS,
"mm/h",
"hydraulic conductivity of subsoil",
time_dependent=True,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"h_ss": Variable(
"soil water potential of subsoil",
CATCH_GRID + TIMESTEPS,
"hPa",
"soil water potential of subsoil",
time_dependent=True,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"theta_ss": Variable(
"Soil moisture in subsoil",
CATCH_GRID + TIMESTEPS,
"-",
"Soil moisture in subsoil",
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"theta_fp_ss": Variable(
"Soil water content in fine pores",
CATCH_GRID,
"-",
"Soil water content in fine pores",
time_dependent=True,
write_to_restart=True,
),
"theta_lp_ss": Variable(
"Soil water content in large pores",
CATCH_GRID,
"-",
"Soil water content in large pores",
time_dependent=True,
write_to_restart=True,
),
"S_SS": Variable(
"soil water content in subsoil",
CATCH_GRID + TIME,
"mm",
"soil water content in subsoil",
active=lambda settings: settings.enable_offline_transport,
),
"S_ss": Variable(
"soil water content in subsoil",
CATCH_GRID + TIMESTEPS,
"mm",
"soil water content in subsoil",
write_to_restart=True,
time_dependent=True,
),
"S_ss_init": Variable(
"initial soil water content in subsoil",
CATCH_GRID,
"mm",
"initial soil water content in subsoil",
write_to_restart=True,
time_dependent=False,
active=lambda settings: settings.enable_offline_transport,
),
"dS_ss": Variable(
"change of soil water content in subsoil",
CATCH_GRID,
"mm/dt",
"change of soil water content in subsoil",
time_dependent=True,
),
"S_fp_ss": Variable(
"soil water content of fine pores in subsoil",
CATCH_GRID,
"mm",
"soil water content of fine pores in subsoil",
time_dependent=False,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"S_lp_ss": Variable(
"soil water content of large pores in subsoil",
CATCH_GRID,
"mm",
"soil water content of large pores in subsoil",
time_dependent=False,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"S_zsat_ss": Variable(
"soil water content in large pores below saturation water level",
CATCH_GRID,
"mm",
"soil water content in large pores below saturation water level",
time_dependent=False,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"S_PWP_SS": Variable(
"soil water content at permanent wilting point in subsoil",
CATCH_GRID + TIME,
"mm",
"soil water content at permanent wilting point in subsoil",
active=lambda settings: settings.enable_offline_transport & settings.enable_crop_phenology,
),
"S_pwp_ss": Variable(
"soil water content at permanent wilting point in subsoil",
CATCH_GRID,
"mm",
"soil water content at permanent wilting point in subsoil",
time_dependent=False,
write_to_restart=True,
),
"S_fc_ss": Variable(
"soil water content at field capacity in subsoil",
CATCH_GRID,
"mm",
"soil water content at field capacity in subsoil",
time_dependent=False,
write_to_restart=True,
),
"S_SAT_SS": Variable(
"soil water content at saturation in subsoil",
CATCH_GRID + TIME,
"mm",
"soil water content at saturation in subsoil",
active=lambda settings: settings.enable_offline_transport & settings.enable_crop_phenology,
),
"S_sat_ss": Variable(
"soil water content at saturation in subsoil",
CATCH_GRID,
"mm",
"soil water content at saturation in subsoil",
time_dependent=False,
write_to_restart=True,
),
"S_ufc_ss": Variable(
"usable field capacity of subsoil",
CATCH_GRID,
"mm",
"usable field capacity of subsoil",
time_dependent=False,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"S_ac_ss": Variable(
"air capacity of subsoil",
CATCH_GRID,
"mm",
"air capacity of subsoil",
time_dependent=False,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"sa_ss": Variable(
"water StorAge of subsoil",
CATCH_GRID + TIMESTEPS + AGES,
"mm",
"water StorAge of subsoil",
time_dependent=True,
write_to_restart=True,
active=lambda settings: settings.enable_offline_transport,
),
"SA_ss": Variable(
"cumulative water StorAge of subsoil",
CATCH_GRID + TIMESTEPS + NAGES,
"mm",
"cumulative water StorAge of subsoil",
write_to_restart=True,
time_dependent=True,
active=lambda settings: settings.enable_offline_transport,
),
"msa_ss": Variable(
"solute mass StorAge of subsoil",
CATCH_GRID + TIMESTEPS + AGES,
"mg",
"solute mass StorAge of subsoil",
time_dependent=True,
write_to_restart=True,
active=lambda settings: settings.enable_offline_transport,
),
"csa_ss": Variable(
"isotope StorAge of subsoil",
CATCH_GRID + TIMESTEPS + AGES,
"per mil",
"isotope StorAge of subsoil",
time_dependent=True,
write_to_restart=True,
active=lambda settings: settings.enable_offline_transport,
),
"M_ss": Variable(
"solute mass of subsoil",
CATCH_GRID + TIMESTEPS,
"mg",
"solute mass of subsoil",
time_dependent=True,
write_to_restart=True,
active=lambda settings: settings.enable_offline_transport,
),
"C_ss": Variable(
"solute concentration of subsoil",
CATCH_GRID + TIMESTEPS,
"mg/l",
"solute concentration of subsoil",
time_dependent=True,
write_to_restart=True,
active=lambda settings: settings.enable_offline_transport,
),
"C_iso_ss": Variable(
"isotope ratio of subsoil",
CATCH_GRID + TIMESTEPS,
"per mil",
"isotope ratio of subsoil",
time_dependent=True,
write_to_restart=True,
active=lambda settings: settings.enable_offline_transport
& (settings.enable_oxygen18 | settings.enable_deuterium),
),
"rt10_ss": Variable(
"10th percentile of subsoil residence time",
CATCH_GRID,
"days",
"10th percentile of subsoil residence time",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport & settings.enable_age_statistics,
),
"rt25_ss": Variable(
"25th percentile of subsoil residence time",
CATCH_GRID,
"days",
"25th percentile of subsoil residence time",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport & settings.enable_age_statistics,
),
"rt50_ss": Variable(
"50th percentile of subsoil residence time",
CATCH_GRID,
"days",
"50th percentile of subsoil residence time",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport & settings.enable_age_statistics,
),
"rt75_ss": Variable(
"75th percentile of subsoil residence time",
CATCH_GRID,
"days",
"75th percentile of subsoil residence time",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport & settings.enable_age_statistics,
),
"rt90_ss": Variable(
"90th percentile of subsoil residence time",
CATCH_GRID,
"days",
"90th percentile of subsoil residence time",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport & settings.enable_age_statistics,
),
"rtavg_ss": Variable(
"average of subsoil residence time",
CATCH_GRID,
"days",
"average of subsoil residence time",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport & settings.enable_age_statistics,
),
"km_denit_ss": Variable(
"Michaelis constant for denitrification",
CATCH_GRID,
"kg N ha-1 year-1",
"Michaelis constant for denitrification",
write_to_restart=True,
time_dependent=False,
active=lambda settings: settings.enable_nitrate,
),
"dmax_denit_ss": Variable(
"maximum denitrification rate",
CATCH_GRID,
"kg N ha-1 year-1",
"maximum denitrification rate",
write_to_restart=True,
time_dependent=False,
active=lambda settings: settings.enable_nitrate,
),
"km_nit_ss": Variable(
"Michaelis constant for nitrification",
CATCH_GRID,
"kg N ha-1 year-1",
"Michaelis constant for nitrification",
write_to_restart=True,
time_dependent=False,
active=lambda settings: settings.enable_nitrate,
),
"dmax_nit_ss": Variable(
"maximum nitrification rate",
CATCH_GRID,
"kg N ha-1 year-1",
"maximum nitrification rate",
write_to_restart=True,
time_dependent=False,
active=lambda settings: settings.enable_nitrate,
),
"kmin_ss": Variable(
"constant mineralization rate",
CATCH_GRID,
"kg N ha-1 year-1",
"constant mineralization rate",
write_to_restart=True,
time_dependent=False,
active=lambda settings: settings.enable_nitrate,
),
"mr_ss": Variable(
"mass removal from solute mass StorAge of subsoil",
CATCH_GRID + AGES,
"mg",
"mass removal from solute mass StorAge of subsoil",
time_dependent=True,
active=lambda settings: settings.enable_nitrate,
),
"ma_ss": Variable(
"mass input to solute mass StorAge of subsoil",
CATCH_GRID + AGES,
"mg",
"mass input to solute mass StorAge of subsoil",
time_dependent=True,
active=lambda settings: settings.enable_nitrate,
),
"Nmin_ss": Variable(
"inorganic nitrogen in subsoil",
CATCH_GRID + TIMESTEPS + AGES,
"mg",
"inorganic nitrogen in subsoil",
write_to_restart=True,
time_dependent=True,
active=lambda settings: settings.enable_nitrate,
),
"N_fert1": Variable(
"Nitrogen of first mineral fertilizer application",
CATCH_GRID,
"kg N ha-1",
"Nitrogen of first mineral fertilizer application",
initial=0,
active=lambda settings: settings.enable_nitrate,
),
"N_fert2": Variable(
"Nitrogen of second mineral fertilizer application",
CATCH_GRID,
"kg N ha-1",
"Nitrogen of second mineral fertilizer application",
initial=0,
active=lambda settings: settings.enable_nitrate,
),
"N_fert3": Variable(
"Nitrogen of third mineral fertilizer application",
CATCH_GRID,
"kg N ha-1",
"Nitrogen of third mineral fertilizer application",
initial=0,
active=lambda settings: settings.enable_nitrate,
),
"N_fert1_org": Variable(
"Nitrogen of first organic fertilizer application",
CATCH_GRID,
"kg N ha-1",
"Nitrogen of first organic fertilizer application",
initial=0,
active=lambda settings: settings.enable_nitrate,
),
"N_fert2_org": Variable(
"Nitrogen of second organic fertilizer application",
CATCH_GRID,
"kg N ha-1",
"Nitrogen of second organic fertilizer application",
initial=0,
active=lambda settings: settings.enable_nitrate,
),
"N_fert3_org": Variable(
"Nitrogen of third organic fertilizer application",
CATCH_GRID,
"kg N ha-1",
"Nitrogen of third organic fertilizer application",
initial=0,
active=lambda settings: settings.enable_nitrate,
),
# groundwater parameters
"S_gw_tot": Variable(
"total groundwater storage",
CATCH_GRID,
"mm",
"total groundwater storage",
time_dependent=False,
write_to_restart=True,
active=lambda settings: settings.enable_groundwater,
),
"z_gw_tot": Variable(
"total thickness of aquifer layer",
CATCH_GRID,
"m",
"total thickness of aquifer layer",
time_dependent=False,
write_to_restart=True,
active=lambda settings: settings.enable_groundwater,
),
"npor": Variable(
"porosity of aquifer layer",
CATCH_GRID,
"-",
"porosity of aquifer layer",
time_dependent=False,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_groundwater,
),
"nuy": Variable(
"unspecific yield of aquifer layer",
CATCH_GRID,
"-",
"unspecific yield of aquifer layer",
time_dependent=False,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_groundwater,
),
"n0": Variable(
"specific yield at the soil/bedrock interface",
CATCH_GRID,
"-",
"specific yield at the soil/bedrock interface",
time_dependent=False,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport
and (settings.enable_groundwater or settings.enable_groundwater_boundary),
),
"k_gw": Variable(
"hydraulic conductivity of aquifer layer",
CATCH_GRID,
"mm/h",
"hydraulic conductivity of aquifer layer",
time_dependent=False,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_groundwater,
),
"k_leak": Variable(
"hydraulic conductivity of aquitard",
CATCH_GRID,
"mm/h",
"hydraulic conductivity of aquitard",
time_dependent=False,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_groundwater,
),
"bdec": Variable(
"decay coeffcient",
CATCH_GRID,
"-",
"decay coeffcient",
time_dependent=False,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_groundwater,
),
"tt": Variable(
"transmissivity of aquifer",
CATCH_GRID,
"m^2/h",
"transmissivity of aquifer",
time_dependent=False,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_groundwater,
),
# groundwater variables
"z_gw": Variable(
"Groundwater table depth",
CATCH_GRID + TIMESTEPS,
"m",
"Groundwater table depth",
write_to_restart=True,
time_dependent=True,
initial=1000,
),
"Z_GW": Variable(
"Groundwater table depth",
TIME_FORCING,
"m",
"Groundwater table depth",
active=lambda settings: not settings.enable_offline_transport and settings.enable_groundwater_boundary,
),
"dz_gw": Variable(
"gradient of groundwater table depth",
CATCH_GRID + FLOWDIRS,
"m/m",
"gradient of groundwater table depth",
time_dependent=True,
active=lambda settings: settings.enable_groundwater & settings.enable_routing_1D,
),
"S_gw": Variable(
"Groundwater storage",
CATCH_GRID + TIMESTEPS,
"mm",
"Groundwater storage",
write_to_restart=True,
time_dependent=True,
active=lambda settings: settings.enable_groundwater,
),
"S_gw_res": Variable(
"Residual groundwater storage",
CATCH_GRID + TIMESTEPS,
"mm",
"Residual groundwater storage",
time_dependent=True,
write_to_restart=True,
active=lambda settings: settings.enable_groundwater,
),
"dS_gw": Variable(
"change of groundwater storage",
CATCH_GRID,
"mm/dt",
"change of groundwater storag",
time_dependent=True,
active=lambda settings: settings.enable_groundwater,
),
"S_vad_tot": Variable(
"Total vadose zone storage",
CATCH_GRID + TIMESTEPS,
"mm",
"Total vadose zone storage",
time_dependent=True,
write_to_restart=True,
active=lambda settings: settings.enable_groundwater or settings.enable_groundwater_boundary,
),
"S_vad": Variable(
"Vadose zone storage",
CATCH_GRID + TIMESTEPS,
"mm",
"Vadose zone storage",
write_to_restart=True,
time_dependent=True,
active=lambda settings: settings.enable_groundwater or settings.enable_groundwater_boundary,
),
"S_vad_res": Variable(
"Residual vadose zone storage",
CATCH_GRID + TIMESTEPS,
"mm",
"Residual vadose zone storage",
time_dependent=True,
write_to_restart=True,
active=lambda settings: settings.enable_groundwater,
),
"dS_vad": Variable(
"change of vadose zone storage",
CATCH_GRID,
"mm/dt",
"change of vadose zone storage",
time_dependent=True,
active=lambda settings: settings.enable_groundwater & settings.enable_groundwater,
),
"sa_vad": Variable(
"water StorAge of vadose zone",
CATCH_GRID + TIMESTEPS + AGES,
"mm",
"water StorAge of vadose zone",
time_dependent=True,
write_to_restart=True,
active=lambda settings: settings.enable_offline_transport & settings.enable_groundwater,
),
"SA_vad": Variable(
"cumulative water StorAge of vadose zone",
CATCH_GRID + TIMESTEPS + NAGES,
"mm",
"cumulative water StorAge of vadose zone",
write_to_restart=True,
time_dependent=True,
active=lambda settings: settings.enable_offline_transport & settings.enable_groundwater,
),
"msa_vad": Variable(
"solute mass StorAge of vadose zone",
CATCH_GRID + TIMESTEPS + AGES,
"mg",
"solute mass StorAge of vadose zone",
time_dependent=True,
write_to_restart=True,
active=lambda settings: settings.enable_offline_transport & settings.enable_groundwater,
),
"M_vad": Variable(
"solute mass of vadose zone",
CATCH_GRID + TIMESTEPS,
"mg",
"solute mass of vadose zone",
time_dependent=True,
write_to_restart=True,
active=lambda settings: settings.enable_offline_transport & settings.enable_groundwater,
),
"C_vad": Variable(
"solute concentration of vadose zone",
CATCH_GRID + TIMESTEPS,
"mg/l",
"solute concentration of vadose zone",
time_dependent=True,
write_to_restart=True,
active=lambda settings: settings.enable_offline_transport & settings.enable_groundwater,
),
"sa_gw": Variable(
"water StorAge of groundwater",
CATCH_GRID + TIMESTEPS + AGES,
"mm",
"water StorAge of groundwater",
time_dependent=True,
write_to_restart=True,
active=lambda settings: settings.enable_offline_transport & settings.enable_groundwater,
),
"SA_gw": Variable(
"cumulative water StorAge of groundwater",
CATCH_GRID + TIMESTEPS + NAGES,
"mm",
"cumulative water StorAge of groundwater",
write_to_restart=True,
time_dependent=True,
active=lambda settings: settings.enable_offline_transport & settings.enable_groundwater,
),
"msa_gw": Variable(
"solute mass StorAge of groundwater",
CATCH_GRID + TIMESTEPS + AGES,
"mg",
"solute mass StorAge of groundwater",
time_dependent=True,
write_to_restart=True,
active=lambda settings: settings.enable_offline_transport & settings.enable_groundwater,
),
"M_gw": Variable(
"solute mass of groundwater",
CATCH_GRID + TIMESTEPS,
"mg",
"solute mass of groundwater",
time_dependent=True,
write_to_restart=True,
active=lambda settings: settings.enable_offline_transport & settings.enable_groundwater,
),
"C_gw": Variable(
"solute concentration of groundwater",
CATCH_GRID + TIMESTEPS,
"mg/l",
"solute concentration of groundwater",
time_dependent=True,
write_to_restart=True,
active=lambda settings: settings.enable_offline_transport & settings.enable_groundwater,
),
"k_denit_gw": Variable(
"decay rate for denitrification in groundwater",
CATCH_GRID,
"kg N ha-1 year-1",
"decay rate for denitrification in groundwater",
write_to_restart=True,
time_dependent=False,
active=lambda settings: settings.enable_nitrate & settings.enable_groundwater,
),
"q_re": Variable(
"groundwater recharge",
CATCH_GRID,
"mm/dt",
"groundwater recharge",
time_dependent=True,
active=lambda settings: settings.enable_groundwater or settings.enable_groundwater_boundary,
),
"q_gw": Variable(
"lateral groundwater flow",
CATCH_GRID,
"mm/dt",
"lateral groundwater flow",
time_dependent=True,
active=lambda settings: settings.enable_groundwater,
),
"sas_params_q_gw": Variable(
"SAS parameters of lateral groundwater runoff",
CATCH_GRID + N_SAS_PARAMS,
"-",
"SAS parameters of lateral groundwater runoff",
time_dependent=True,
write_to_restart=True,
active=lambda settings: settings.enable_offline_transport & settings.enable_groundwater,
),
"TT_q_gw": Variable(
"cumulative travel time distribution",
CATCH_GRID + NAGES,
"-",
"cumulative travel time distribution",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport & settings.enable_groundwater,
),
"tt_q_gw": Variable(
"travel time distribution",
CATCH_GRID + AGES,
"-",
"travel time distribution",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport & settings.enable_groundwater,
),
"MTT_q_gw": Variable(
"cumulative solute travel time distribution",
CATCH_GRID + NAGES,
"-",
"cumulative solute travel time distribution",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport & settings.enable_groundwater,
),
"mtt_q_gw": Variable(
"solute travel time distribution",
CATCH_GRID + AGES,
"-",
"solute travel time distribution",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport & settings.enable_groundwater,
),
"M_q_gw": Variable(
"solute mass of lateral groundwater flow",
CATCH_GRID,
"-",
"solute mass of lateral groundwater flow",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport & settings.enable_groundwater,
),
"C_q_qw": Variable(
"solute concentration of lateral groundwater flow",
CATCH_GRID,
"mg/l",
"solute concentration of lateral groundwater flow",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport & settings.enable_groundwater,
),
"q_leak": Variable(
"groundwater leakage",
CATCH_GRID,
"mm/dt",
"groundwater leakage",
time_dependent=True,
active=lambda settings: settings.enable_groundwater,
),
# precipitation variables
"PREC": Variable(
"precipitation",
TIME_FORCING,
"mm/10 minutes",
"precipitation (uniform)",
active=lambda settings: not settings.enable_offline_transport,
),
"PREC_DIST_DAILY": Variable(
"precipitation",
CATCH_GRID + TIME,
"mm/10 minutes",
"precipitation (distributed)",
active=lambda settings: settings.enable_offline_transport,
),
"prec": Variable(
"precipitation",
CATCH_GRID + TIMESTEPS,
"mm/dt",
"precipitation",
),
"prec_weight": Variable(
"weight factor of precipitation",
CATCH_GRID,
"-",
"weight factor of precipitation",
initial=1.0,
active=lambda settings: not settings.enable_offline_transport,
),
"EVENTS": Variable(
"event number",
TIME_FORCING,
"",
"event number",
active=lambda settings: not settings.enable_offline_transport & settings.enable_film_flow,
),
"soil_fertility": Variable(
"soil fertility class",
CATCH_GRID,
"",
"soil fertility class",
initial=1.0,
active=lambda settings: settings.enable_nitrate,
),
"fert_weight": Variable(
"weight factor of fertilization",
CATCH_GRID,
"-",
"weight factor of fertilization",
initial=1.0,
active=lambda settings: settings.enable_nitrate,
),
"prec_day": Variable(
"precipitation",
CATCH_GRID + TIMESTEPS_DAY,
"mm/dt",
"precipitation",
active=lambda settings: not settings.enable_offline_transport,
),
"rain": Variable(
"rainfall",
CATCH_GRID,
"mm/dt",
"rainfall",
),
"rain_top": Variable(
"rainfall",
CATCH_GRID,
"mm/dt",
"rainfall at upper surface layer",
),
"rain_ground": Variable(
"rainfall",
CATCH_GRID,
"mm/dt",
"rainfall at lower surface layer",
),
"rain_on_snow": Variable(
"rain-on-snow",
CATCH_GRID,
"mm/dt",
"rain on snow cover",
),
"snow": Variable(
"snowfall",
CATCH_GRID,
"mm/dt",
"snowfall",
),
"snow_melt_drip": Variable(
"snow melt drip from canopy",
CATCH_GRID,
"mm/dt",
"snow melt drip from canopy",
),
"snow_top": Variable(
"snowfall",
CATCH_GRID,
"mm/dt",
"snowfall at upper surface layer",
),
"snow_ground": Variable(
"snowfall",
CATCH_GRID,
"mm/dt",
"snowfall at lower surface layer",
),
# interception variables
"int_top": Variable(
"precipitation interception",
CATCH_GRID,
"mm/dt",
"rainfall interception",
time_dependent=True,
),
"int_ground": Variable(
"precipitation interception",
CATCH_GRID,
"mm/dt",
"rainfall interception",
time_dependent=True,
),
"int_prec": Variable(
"precipitation interception",
CATCH_GRID,
"mm/dt",
"precipitation interception",
time_dependent=True,
),
"int_rain_top": Variable(
"rainfall interception at upper surface layer",
CATCH_GRID,
"mm/dt",
"rainfall interception at upper surface layer",
time_dependent=True,
),
"int_rain_ground": Variable(
"rainfall interception at lower surface layer",
CATCH_GRID,
"mm/dt",
"rainfall interception at lower surface layer",
time_dependent=True,
),
"int_snow_top": Variable(
"snowfall interception at upper surface layer",
CATCH_GRID,
"mm/dt",
"snowfall interception at upper surface layer",
time_dependent=True,
),
"int_snow_ground": Variable(
"snowfall interception at lower surface layer",
CATCH_GRID,
"mm/dt",
"snowfall interception at lower surface layer",
time_dependent=True,
),
# snow variables
"snow_melt_top": Variable(
"snow melt in upper surface layer",
CATCH_GRID,
"mm/dt",
"snow melt in upper surface layer",
time_dependent=True,
),
"snow_melt_ground": Variable(
"snow melt in lower surface layer",
CATCH_GRID,
"mm/dt",
"snow melt",
time_dependent=True,
),
"snow_melt": Variable(
"snow melt in lower surface layer",
CATCH_GRID,
"mm/dt",
"snow melt",
time_dependent=True,
),
"q_rain_on_snow": Variable(
"rain-on-snow runoff",
CATCH_GRID,
"mm/dt",
"rain-on-snow runoff",
time_dependent=True,
),
"q_snow": Variable(
"snow runoff",
CATCH_GRID,
"mm/dt",
"snow runoff",
time_dependent=True,
),
# infiltration variables
"inf_mat": Variable(
"matrix infiltration",
CATCH_GRID,
"mm/dt",
"matrix infiltration",
time_dependent=True,
),
"INF_MAT_RZ": Variable(
"matrix infiltration into root zone",
CATCH_GRID + TIME,
"mm/dt",
"matrix infiltration into root zone",
active=lambda settings: settings.enable_offline_transport,
),
"inf_mat_rz": Variable(
"matrix infiltration into root zone",
CATCH_GRID,
"mm/dt",
"matrix infiltration into root zone",
time_dependent=True,
),
"inf_mat_ss": Variable(
"matrix infiltration into subsoil",
CATCH_GRID,
"mm/dt",
"matrix infiltration into subsoil",
time_dependent=True,
),
"inf_mat_pot": Variable(
"potential matrix infiltration",
CATCH_GRID,
"mm/dt",
"potential matrix infiltration",
time_dependent=True,
),
"inf_sc": Variable(
"shrinkage crack infiltration",
CATCH_GRID,
"mm/dt",
"shrinkage crack infiltration",
time_dependent=True,
),
"inf_sc_rz": Variable(
"shrinkage crack infiltration",
CATCH_GRID,
"mm/dt",
"shrinkage crack infiltration",
time_dependent=True,
),
"inf_mp": Variable(
"macropore infiltration",
CATCH_GRID,
"mm/dt",
"macropore infiltration",
time_dependent=True,
),
"inf_mp_rz": Variable(
"macropore infiltration into root zone",
CATCH_GRID,
"mm/dt",
"macropore infiltration into root zone",
time_dependent=True,
),
"inf_mp_ss": Variable(
"macropore infiltration into subsoil",
CATCH_GRID,
"mm/dt",
"macropore infiltration into subsoil",
time_dependent=True,
),
"INF_PF_SS": Variable(
"preferential infiltration into subsoil",
CATCH_GRID + TIME,
"mm/dt",
"preferential infiltration into subsoil",
active=lambda settings: settings.enable_offline_transport,
),
"inf_pf_ss": Variable(
"preferential infiltration into subsoil",
CATCH_GRID,
"mm/dt",
"preferential infiltration into subsoil",
time_dependent=True,
),
"INF_PF_RZ": Variable(
"preferential infiltration into root zone",
CATCH_GRID + TIME,
"mm/dt",
"preferential infiltration into root zone",
active=lambda settings: settings.enable_offline_transport,
),
"inf_pf_rz": Variable(
"preferential infiltration into root zone",
CATCH_GRID,
"mm/dt",
"preferential infiltration into root zone",
time_dependent=True,
),
"inf": Variable(
"total infiltration",
CATCH_GRID,
"mm/dt",
"total infiltration",
time_dependent=True,
),
"inf_rz": Variable(
"total infiltration into root zone",
CATCH_GRID,
"mm/dt",
"total infiltration into root zone",
time_dependent=True,
),
"inf_ss": Variable(
"total infiltration into subsoil",
CATCH_GRID,
"mm/dt",
"total infiltration into subsoil",
time_dependent=True,
),
"inf_in_tracer": Variable(
"cumulated infiltration for tracer input",
CATCH_GRID,
"mm",
"cumulated infiltration for tracer input",
time_dependent=True,
active=lambda settings: settings.enable_nitrate,
),
"no_wf": Variable(
"number of wetting fronts",
CATCH_GRID,
"",
"number of wetting fronts",
dtype="int32",
write_to_restart=True,
time_dependent=True,
active=lambda settings: not settings.enable_offline_transport,
),
"pi_gr": Variable(
"threshold rainfall intensity",
CATCH_GRID,
"mm/dt",
"threshold rainfall intensity",
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"pi_m": Variable(
"rainfall sum at matrix saturation",
CATCH_GRID,
"mm",
"rainfall sum at matrix saturation",
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"t_sat": Variable(
"time to reach matrix saturation",
CATCH_GRID,
"hours",
"time to reach matrix saturation",
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"t_sat_t0": Variable(
"time to reach matrix saturation of first wetting front",
CATCH_GRID,
"hours",
"time to reach matrix saturation of first wetting front",
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"t_sat_t1": Variable(
"time to reach matrix saturation of second wetting front",
CATCH_GRID,
"hours",
"time to reach matrix saturation of second wetting front",
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"Fs": Variable(
"Infiltration sum to reach saturation",
CATCH_GRID,
"mm",
"Infiltration sum to reach saturation",
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"Fs_t0": Variable(
"Infiltration sum to reach saturation of first wetting front",
CATCH_GRID,
"mm",
"Infiltration sum to reach saturation of first wetting front",
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"Fs_t1": Variable(
"Infiltration sum to reach saturation of second wetting front",
CATCH_GRID,
"mm",
"Infiltration sum to reach saturation of second wetting front",
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"inf_mat_pot_event_csum": Variable(
"cumulated potential matrix infiltration while event",
CATCH_GRID,
"mm",
"cumulated potential matrix infiltration while event",
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"inf_mat_event_csum": Variable(
"cumulated matrix infiltration while event",
CATCH_GRID,
"mm",
"cumulated matrix infiltration while event",
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"inf_mp_event_csum": Variable(
"cumulated macropore infiltration while event",
CATCH_GRID,
"mm",
"cumulated macropore infiltration while event",
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"inf_sc_event_csum": Variable(
"cumulated shrinkage crack infiltration while event",
CATCH_GRID,
"mm",
"cumulated shrinkage crack infiltration while event",
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport,
),
"tt_inf_mat_rz": Variable(
"travel time distribution",
CATCH_GRID + AGES,
"-",
"travel time distribution",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport,
),
"mtt_inf_mat_rz": Variable(
"solute travel time distribution",
CATCH_GRID + AGES,
"-",
"solute travel time distribution",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport,
),
"C_inf_mat_rz": Variable(
"solute concentration of matrix infiltration into root zone",
CATCH_GRID,
"mg/l",
"solute concentration of matrix infiltration into root zone",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport,
),
"C_iso_inf_mat_rz": Variable(
"isotope ratio of matrix infiltration into root zone",
CATCH_GRID,
"per mil",
"isotope ratio of matrix infiltration into root zone",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport
& (settings.enable_oxygen18 | settings.enable_deuterium),
),
"M_inf_mat_rz": Variable(
"solute mass of matrix infiltration into root zone",
CATCH_GRID,
"mg",
"solute mass of matrix infiltration into root zone",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport,
),
"tt_inf_pf_rz": Variable(
"travel time distribution",
CATCH_GRID + AGES,
"-",
"travel time distribution",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport,
),
"mtt_inf_pf_rz": Variable(
"solute travel time distribution",
CATCH_GRID + AGES,
"-",
"solute travel time distribution",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport,
),
"C_inf_pf_rz": Variable(
"solute concentration of preferential infiltration into root zone",
CATCH_GRID,
"mg/l",
"solute concentration of preferential infiltration into root zone",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport,
),
"C_iso_inf_pf_rz": Variable(
"isotope ratio of preferential infiltration into root zone",
CATCH_GRID,
"per mil",
"isotope ratio of preferential infiltration into root zone",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport
& (settings.enable_oxygen18 | settings.enable_deuterium),
),
"M_inf_pf_rz": Variable(
"solute mass of preferential infiltration into root zone",
CATCH_GRID,
"mg",
"solute mass of preferential infiltration into root zone",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport,
),
"tt_inf_pf_ss": Variable(
"travel time distribution",
CATCH_GRID + AGES,
"-",
"travel time distribution",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport,
),
"mtt_inf_pf_ss": Variable(
"solute travel time distribution",
CATCH_GRID + AGES,
"-",
"solute travel time distribution",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport,
),
"C_inf_pf_ss": Variable(
"solute concentration of preferential infiltration into subsoil",
CATCH_GRID,
"mg/l or per mil",
"solute concentration of preferential infiltration into subsoil",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport,
),
"C_iso_inf_pf_ss": Variable(
"isotope ratio of preferential infiltration into subsoil",
CATCH_GRID,
"per mil",
"isotope ratio of preferential infiltration into subsoil",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport
& (settings.enable_oxygen18 | settings.enable_deuterium),
),
"M_inf_pf_ss": Variable(
"solute mass of preferential infiltration into subsoil",
CATCH_GRID,
"mg",
"solute mass of preferential infiltration into subsoil",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport,
),
# evapotranspiration variables
"aet": Variable(
"actual evapotranspiration",
CATCH_GRID,
"mm/dt",
"actual evapotranspiration",
time_dependent=True,
),
"aet_soil": Variable(
"actual evapotranspiration from soil water storage",
CATCH_GRID,
"mm/dt",
"actual evapotranspiration from soil water storage",
time_dependent=True,
),
"RS": Variable(
"solar radiation",
TIME_FORCING,
"MJ/m2",
"solar radiation",
),
"rs": Variable(
"solar radiation",
CATCH_GRID,
"MJ/m2",
"solar radiation",
time_dependent=True,
),
"rs_day": Variable(
"solar radiation",
CATCH_GRID + TIMESTEPS_DAY,
"MJ/m2",
"solar radiation",
time_dependent=True,
active=lambda settings: not settings.enable_offline_transport,
),
"c1_mak": Variable(
"Makkink coeffcient",
CATCH_GRID,
"-",
"Makkink coeffcient",
write_to_restart=True,
),
"c2_mak": Variable(
"Makkink coeffcient",
CATCH_GRID,
"-",
"Makkink coeffcient",
write_to_restart=True,
),
"PET": Variable(
"potential evapotranspiration",
TIME_FORCING,
"mm/dt",
"potential evapotranspiration",
),
"pet": Variable(
"potential evapotranspiration",
CATCH_GRID,
"mm/dt",
"potential evapotranspiration",
time_dependent=True,
),
"pet_weight": Variable(
"weight factor of potential evapotranspiration",
CATCH_GRID,
"-",
"weight factor of potential evapotranspiration",
initial=1.0,
active=lambda settings: not settings.enable_offline_transport,
),
"pet_day": Variable(
"potential evapotranspiration",
CATCH_GRID + TIMESTEPS_DAY,
"mm/dt",
"potential evapotranspiration",
time_dependent=True,
active=lambda settings: not settings.enable_offline_transport,
),
"pet_res": Variable(
"Residual potential evapotranspiration",
CATCH_GRID,
"mm/dt",
"Residual potential evapotranspiration",
time_dependent=True,
),
"ptransp": Variable(
"potential transpiration",
CATCH_GRID,
"mm",
"potential transpiration",
time_dependent=True,
),
"ptransp_res": Variable(
"Residual potential transpiration",
CATCH_GRID,
"mm/dt",
"Residual potential transpiration",
time_dependent=True,
),
"TRANSP": Variable(
"actual transpiration",
CATCH_GRID + TIME,
"mm/dt",
"actual transpiration",
active=lambda settings: settings.enable_offline_transport,
),
"transp": Variable(
"actual transpiration",
CATCH_GRID,
"mm/dt",
"actual transpiration",
time_dependent=True,
),
"evap": Variable(
"actual evaporation",
CATCH_GRID,
"mm/dt",
"actual evaporation",
time_dependent=True,
),
"EVAP_SOIL": Variable(
"actual soil evaporation",
CATCH_GRID + TIME,
"mm/dt",
"actual soil evaporation",
active=lambda settings: settings.enable_offline_transport,
),
"evap_soil": Variable(
"actual soil evaporation",
CATCH_GRID,
"mm/dt",
"actual soil evaporation",
time_dependent=True,
),
"evap_int": Variable(
"actual evaporation of intercepted water",
CATCH_GRID,
"mm/dt",
"actual evaporation of intercepted water",
time_dependent=True,
write_to_restart=True,
),
"evap_int_top": Variable(
"actual evaporation of intercepted water from upper surface layer",
CATCH_GRID,
"mm/dt",
"actual evaporation of intercepted water from upper surface layer",
time_dependent=True,
),
"evap_int_ground": Variable(
"actual evaporation of intercepted water from lower surface layer",
CATCH_GRID,
"mm/dt",
"actual evaporation of intercepted water from lower surface layer",
time_dependent=True,
),
"evap_sur": Variable(
"actual evaporation from surface layer",
CATCH_GRID,
"mm/dt",
"actual evaporation from surface layer",
time_dependent=True,
),
"evap_dep": Variable(
"actual evaporation from surface depression storage",
CATCH_GRID,
"mm/dt",
"actual evaporation from surface depression storage",
time_dependent=True,
),
"sas_params_transp": Variable(
"SAS parameters of transpiration",
CATCH_GRID + N_SAS_PARAMS,
"-",
"SAS parameters of transpiration",
time_dependent=True,
write_to_restart=True,
active=lambda settings: settings.enable_offline_transport,
),
"TT_transp": Variable(
"cumulative travel time distribution",
CATCH_GRID + NAGES,
"-",
"cumulative travel time distribution",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport,
),
"tt_transp": Variable(
"travel time distribution",
CATCH_GRID + AGES,
"-",
"travel time distribution",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport,
),
"MTT_transp": Variable(
"cumulative solute travel time distribution",
CATCH_GRID + NAGES,
"-",
"cumulative solute travel time distribution",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport,
),
"mtt_transp": Variable(
"solute mass travel time distribution",
CATCH_GRID + AGES,
"-",
"solute mass travel time distribution",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport,
),
"ctt_transp": Variable(
"solute concentration concentration travel time distribution",
CATCH_GRID + AGES,
"-",
"solute concentration travel time distribution",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport,
),
"M_transp": Variable(
"solute mass of transpiration",
CATCH_GRID,
"mg",
"solute mass of transpiration",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport,
),
"C_transp": Variable(
"solute concentration of transpiration",
CATCH_GRID,
"mg/l",
"solute concentration of transpiration",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport,
),
"C_iso_transp": Variable(
"isotope ratio of transpiration",
CATCH_GRID,
"per mil",
"isotope ratio of transpiration",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport
& (settings.enable_oxygen18 | settings.enable_deuterium),
),
"tt10_transp": Variable(
"10th percentile of transpiration travel time ",
CATCH_GRID,
"days",
"10th percentile of transpiration travel time ",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport & settings.enable_age_statistics,
),
"tt25_transp": Variable(
"25th percentile of transpiration travel time ",
CATCH_GRID,
"days",
"25th percentile of transpiration travel time ",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport & settings.enable_age_statistics,
),
"tt50_transp": Variable(
"50th percentile of transpiration travel time ",
CATCH_GRID,
"days",
"50th percentile of transpiration travel time ",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport & settings.enable_age_statistics,
),
"tt75_transp": Variable(
"75th percentile of transpiration travel time ",
CATCH_GRID,
"days",
"75th percentile of transpiration travel time ",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport & settings.enable_age_statistics,
),
"tt90_transp": Variable(
"90th percentile of transpiration travel time ",
CATCH_GRID,
"days",
"90th percentile of transpiration travel time ",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport & settings.enable_age_statistics,
),
"ttavg_transp": Variable(
"average of transpiration travel time",
CATCH_GRID,
"days",
"average of transpiration travel time",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport & settings.enable_age_statistics,
),
"sas_params_evap_soil": Variable(
"SAS parameters of soil evaporation",
CATCH_GRID + N_SAS_PARAMS,
"-",
"SAS parameters of soil evaporation",
time_dependent=True,
write_to_restart=True,
active=lambda settings: settings.enable_offline_transport,
),
"TT_evap_soil": Variable(
"cumulative travel time distribution",
CATCH_GRID + NAGES,
"-",
"cumulative travel time distribution",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport,
),
"tt_evap_soil": Variable(
"travel time distribution",
CATCH_GRID + AGES,
"-",
"travel time distribution",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport,
),
"MTT_evap_soil": Variable(
"cumulative solute travel time distribution",
CATCH_GRID + NAGES,
"-",
"cumulative solute travel time distribution",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport,
),
"mtt_evap_soil": Variable(
"solute mass travel time distribution",
CATCH_GRID + AGES,
"-",
"solute mass travel time distribution",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport,
),
"ctt_evap_soil": Variable(
"solute concentration travel time distribution",
CATCH_GRID + AGES,
"-",
"solute concentration travel time distribution",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport,
),
"M_evap_soil": Variable(
"solute mass of soil evaporation",
CATCH_GRID,
"mg",
"solute mass of soil evaporation",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport,
),
"C_evap_soil": Variable(
"solute concentration of soil evaporation",
CATCH_GRID,
"mg/l",
"solute concentration of soil evaporation",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport,
),
"C_iso_evap_soil": Variable(
"isotope ratio of soil evaporation",
CATCH_GRID,
"per mil",
"isotope ratio of soil evaporation",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport
& (settings.enable_oxygen18 | settings.enable_deuterium),
),
# percolation variables
"q_fp_rz": Variable(
"vertical root zone drainage of fine pores",
CATCH_GRID,
"mm/dt",
"vertical root zone drainage of fine pores",
time_dependent=True,
),
"q_lp_rz": Variable(
"vertical root zone drainage of large pores",
CATCH_GRID,
"mm/dt",
"vertical root zone drainage of large pores",
time_dependent=True,
),
"Q_RZ": Variable(
"vertical root zone drainage",
CATCH_GRID + TIME,
"mm/dt",
"vertical root zone drainage",
active=lambda settings: settings.enable_offline_transport,
),
"q_rz": Variable(
"vertical root zone drainage",
CATCH_GRID,
"mm/dt",
"vertical root zone drainage",
time_dependent=True,
),
"q_fp_ss": Variable(
"vertical subsoil drainage of fine pores",
CATCH_GRID,
"mm/dt",
"vertical subsoil drainage of fine pores",
time_dependent=True,
),
"q_lp_ss": Variable(
"vertical subsoil drainage of large pores",
CATCH_GRID,
"mm/dt",
"vertical subsoil drainage of large pores",
time_dependent=True,
),
"Q_SS": Variable(
"vertical subsoil drainage",
CATCH_GRID + TIME,
"mm/dt",
"vertical subsoil drainage",
active=lambda settings: settings.enable_offline_transport,
),
"q_ss": Variable(
"vertical subsoil drainage",
CATCH_GRID,
"mm/dt",
"vertical subsoil drainage",
time_dependent=True,
),
"RE_RL": Variable(
"redistribution after root loss",
CATCH_GRID + TIME,
"mm/dt",
"redistribution after root loss",
active=lambda settings: settings.enable_offline_transport & settings.enable_crop_phenology,
),
"re_rl": Variable(
"redistribution after root loss",
CATCH_GRID,
"mm/dt",
"redistribution after root loss",
time_dependent=True,
active=lambda settings: settings.enable_crop_phenology,
),
"re_rl_pwp": Variable(
"redistribution of immobile soil water after root loss",
CATCH_GRID,
"mm/dt",
"redistribution of immobile soil water after root loss",
time_dependent=True,
active=lambda settings: settings.enable_crop_phenology,
),
"sas_params_re_rl": Variable(
"SAS parameters of redistribution after root loss",
CATCH_GRID + N_SAS_PARAMS,
"-",
"SAS parameters of redistribution after root loss",
time_dependent=True,
write_to_restart=True,
active=lambda settings: settings.enable_offline_transport & settings.enable_crop_phenology,
),
"TT_re_rl": Variable(
"cumulative travel time distribution",
CATCH_GRID + NAGES,
"-",
"cumulative travel time distribution",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport,
),
"tt_re_rl": Variable(
"travel time distribution",
CATCH_GRID + AGES,
"-",
"travel time distribution",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport,
),
"MTT_re_rl": Variable(
"cumulative solute travel time distribution",
CATCH_GRID + NAGES,
"-",
"cumulative solute travel time distribution",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport,
),
"mtt_re_rl": Variable(
"solute mass travel time distribution",
CATCH_GRID + AGES,
"-",
"solute mass travel time distribution",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport,
),
"ctt_re_rl": Variable(
"solute concentration travel time distribution",
CATCH_GRID + AGES,
"-",
"solute concentration travel time distribution",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport,
),
"M_re_rl": Variable(
"solute mass of redistribution after root loss",
CATCH_GRID,
"mg",
"solute mass of redistribution after root loss",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport,
),
"C_re_rl": Variable(
"solute concentration of redistribution after root loss",
CATCH_GRID,
"mg/l",
"solute concentration of redistribution after root loss",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport,
),
"C_iso_re_rl": Variable(
"isotope ratio of redistribution after root loss",
CATCH_GRID,
"per mil",
"isotope ratio of redistribution after root loss",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport
& (settings.enable_oxygen18 | settings.enable_deuterium),
),
"sas_params_q_rz": Variable(
"SAS parameters of percolation from root zone",
CATCH_GRID + N_SAS_PARAMS,
"-",
"SAS parameters of percolation from root zone",
time_dependent=True,
write_to_restart=True,
active=lambda settings: settings.enable_offline_transport,
),
"TT_q_rz": Variable(
"cumulative travel time distribution of root zone peroclation",
CATCH_GRID + NAGES,
"-",
"cumulative travel time distribution of root zone peroclation",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport,
),
"tt_q_rz": Variable(
"travel time distribution of root zone peroclation",
CATCH_GRID + AGES,
"-",
"travel time distribution of root zone peroclation",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport,
),
"mtt_q_rz": Variable(
"solute mass travel time distribution of root zone percolation",
CATCH_GRID + AGES,
"-",
"solute mass travel time distribution of root zone percolation",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport,
),
"ctt_q_rz": Variable(
"solute concentration travel time distribution of root zone percolation",
CATCH_GRID + AGES,
"-",
"solute concentration travel time distribution of root zone percolation",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport,
),
"M_q_rz": Variable(
"solute mass of root zone percolation",
CATCH_GRID,
"mg",
"solute mass of root zone percolation",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport,
),
"C_q_rz": Variable(
"solute concentration of root zone percolation",
CATCH_GRID,
"mg/l",
"solute concentration of root zone percolation",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport,
),
"C_iso_q_rz": Variable(
"isotope ratio of root zone percolation",
CATCH_GRID,
"per mil",
"isotope ratio of root zone percolation",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport
& (settings.enable_oxygen18 | settings.enable_deuterium),
),
"sas_params_q_ss": Variable(
"SAS parameters of percolation from subsoil",
CATCH_GRID + N_SAS_PARAMS,
"-",
"SAS parameters of percolation from subsoil",
time_dependent=True,
write_to_restart=True,
active=lambda settings: settings.enable_offline_transport,
),
"TT_q_ss": Variable(
"cumulative travel time distribution of subsoil percolation",
CATCH_GRID + NAGES,
"-",
"cumulative travel time distribution of subsoil percolation",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport,
),
"tt_q_ss": Variable(
"travel time distribution of subsoil percolation",
CATCH_GRID + AGES,
"-",
"travel time distribution of subsoil percolation",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport,
),
"MTT_q_ss": Variable(
"cumulative solute travel time distribution of subsoil percolation",
CATCH_GRID + NAGES,
"-",
"cumulative solute travel time distribution of subsoil percolation",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport,
),
"mtt_q_ss": Variable(
"solute mass travel time distribution of subsoil percolation",
CATCH_GRID + AGES,
"-",
"solute mass travel time distribution of subsoil percolation",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport,
),
"ctt_q_ss": Variable(
"solute concentration travel time distribution of subsoil percolation",
CATCH_GRID + AGES,
"-",
"solute concentration travel time distribution of subsoil percolation",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport,
),
"M_q_ss": Variable(
"solute mass of subsoil percolation",
CATCH_GRID,
"mg",
"solute mass of subsoil percolation",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport,
),
"C_q_ss": Variable(
"solute concentration of subsoil percolation",
CATCH_GRID,
"mg/l",
"solute concentration of subsoil percolation",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport,
),
"C_iso_q_ss": Variable(
"isotope ratio of subsoil percolation",
CATCH_GRID,
"per mil",
"isotope ratio of subsoil percolation",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport
& (settings.enable_oxygen18 | settings.enable_deuterium),
),
"tt10_q_ss": Variable(
"10th percentile of subsoil percolation travel time",
CATCH_GRID,
"days",
"10th percentile of subsoil percolation travel time",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport & settings.enable_age_statistics,
),
"tt25_q_ss": Variable(
"25th percentile of subsoil percolation travel time",
CATCH_GRID,
"days",
"25th percentile of subsoil percolation travel time",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport & settings.enable_age_statistics,
),
"tt50_q_ss": Variable(
"50th percentile of subsoil percolation travel time",
CATCH_GRID,
"days",
"50th percentile of subsoil percolation travel time",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport & settings.enable_age_statistics,
),
"tt75_q_ss": Variable(
"75th percentile of subsoil percolation travel time",
CATCH_GRID,
"days",
"75th percentile of subsoil percolation travel time",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport & settings.enable_age_statistics,
),
"tt90_q_ss": Variable(
"90th percentile of subsoil percolation travel time",
CATCH_GRID,
"days",
"90th percentile of subsoil percolation travel time",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport & settings.enable_age_statistics,
),
"ttavg_q_ss": Variable(
"average of subsoil percolation travel time",
CATCH_GRID,
"days",
"average of subsoil percolation travel time",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport & settings.enable_age_statistics,
),
# capillary rise variables
"CPR_RZ": Variable(
"capillary rise from subsoil into root zone",
CATCH_GRID + TIME,
"mm/dt",
"capillary rise from subsoil into root zone",
active=lambda settings: settings.enable_offline_transport,
),
"cpr_rz": Variable(
"capillary rise from subsoil into root zone",
CATCH_GRID,
"mm/dt",
"capillary rise from subsoil into root zone",
time_dependent=True,
),
"cpr_ss": Variable(
"capillary rise from groundwater",
CATCH_GRID,
"mm/dt",
"capillary rise from groundwater",
time_dependent=True,
),
"RE_RG": Variable(
"redistribution after root growth",
CATCH_GRID + TIME,
"mm/dt",
"redistribution after root growth",
active=lambda settings: settings.enable_offline_transport & settings.enable_crop_phenology,
),
"re_rg": Variable(
"redistribution after root growth",
CATCH_GRID,
"mm/dt",
"redistribution after root growth",
time_dependent=True,
active=lambda settings: settings.enable_crop_phenology,
),
"re_rg_pwp": Variable(
"redistribution of immobile soil water after root growth",
CATCH_GRID,
"mm/dt",
"redistribution of immobile soil water after root growth",
time_dependent=True,
active=lambda settings: settings.enable_crop_phenology,
),
"sas_params_re_rg": Variable(
"SAS parameters of redistribution after root growth",
CATCH_GRID + N_SAS_PARAMS,
"-",
"SAS parameters of redistribution after root growth",
time_dependent=True,
write_to_restart=True,
active=lambda settings: settings.enable_offline_transport & settings.enable_crop_phenology,
),
"TT_re_rg": Variable(
"cumulative travel time distribution",
CATCH_GRID + NAGES,
"-",
"cumulative travel time distribution",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport,
),
"tt_re_rg": Variable(
"travel time distribution",
CATCH_GRID + AGES,
"-",
"travel time distribution",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport,
),
"MTT_re_rg": Variable(
"cumulative solute travel time distribution",
CATCH_GRID + NAGES,
"-",
"cumulative solute travel time distribution",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport,
),
"mtt_re_rg": Variable(
"solute mass travel time distribution",
CATCH_GRID + AGES,
"-",
"solute mass travel time distribution",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport,
),
"ctt_re_rg": Variable(
"solute concentration travel time distribution",
CATCH_GRID + AGES,
"-",
"solute concentration travel time distribution",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport,
),
"M_re_rg": Variable(
"solute mass of redistribution after root growth",
CATCH_GRID,
"mg",
"solute mass of redistribution after root growth",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport,
),
"C_re_rg": Variable(
"solute concentration of redistribution after root growth",
CATCH_GRID,
"mg/l",
"solute concentration of redistribution after root growth",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport,
),
"C_iso_re_rg": Variable(
"isotope ratio of redistribution after root growth",
CATCH_GRID,
"per mil",
"isotope ratio of redistribution after root growth",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport
& (settings.enable_oxygen18 | settings.enable_deuterium),
),
"sas_params_cpr_rz": Variable(
"SAS parameters of capillary rise into root zone",
CATCH_GRID + N_SAS_PARAMS,
"-",
"SAS parameters of capillary rise into root zone",
time_dependent=True,
write_to_restart=True,
active=lambda settings: settings.enable_offline_transport,
),
"TT_cpr_rz": Variable(
"cumulative travel time distribution",
CATCH_GRID + NAGES,
"-",
"cumulative travel time distribution",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport,
),
"tt_cpr_rz": Variable(
"travel time distribution",
CATCH_GRID + AGES,
"-",
"travel time distribution",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport,
),
"MTT_cpr_rz": Variable(
"cumulative solute travel time distribution",
CATCH_GRID + NAGES,
"-",
"cumulative solute travel time distribution",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport,
),
"mtt_cpr_rz": Variable(
"solute mass travel time distribution",
CATCH_GRID + AGES,
"-",
"solute mass travel time distribution",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport,
),
"ctt_cpr_rz": Variable(
"solute concentration travel time distribution",
CATCH_GRID + AGES,
"-",
"solute concentration travel time distribution",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport,
),
"M_cpr_rz": Variable(
"solute mass of capillary rise from subsoil into root zone",
CATCH_GRID,
"mg",
"solute mass of capillary rise from subsoil into root zone",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport,
),
"C_cpr_rz": Variable(
"solute concentration of capillary rise from subsoil into root zone",
CATCH_GRID,
"mg/l",
"solute concentration of capillary rise from subsoil into root zone",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport,
),
"C_iso_cpr_rz": Variable(
"isotope ratio of capillary rise from subsoil into root zone",
CATCH_GRID,
"per mil",
"isotope ratio of capillary rise from subsoil into root zone",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport
& (settings.enable_oxygen18 | settings.enable_deuterium),
),
"sas_params_cpr_ss": Variable(
"SAS parameters of capillary rise into subsoil",
CATCH_GRID + N_SAS_PARAMS,
"-",
"SAS parameters of capillary rise into subsoil",
time_dependent=True,
write_to_restart=True,
active=lambda settings: settings.enable_offline_transport,
),
"TT_cpr_ss": Variable(
"cumulative travel time distribution",
CATCH_GRID + NAGES,
"-",
"cumulative travel time distribution",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport,
),
"tt_cpr_ss": Variable(
"travel time distribution",
CATCH_GRID + AGES,
"-",
"travel time distribution",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport,
),
"MTT_cpr_ss": Variable(
"cumulative solute travel time distribution",
CATCH_GRID + NAGES,
"-",
"cumulative solute travel time distribution",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport,
),
"mtt_cpr_ss": Variable(
"solute mass travel time distribution",
CATCH_GRID + AGES,
"-",
"solute mass travel time distribution",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport,
),
"ctt_cpr_ss": Variable(
"solute concentration travel time distribution",
CATCH_GRID + AGES,
"-",
"solute concentration travel time distribution",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport,
),
"M_cpr_ss": Variable(
"solute mass of capillary rise from groundwater into subsoil",
CATCH_GRID,
"mg",
"solute mass of capillary rise from groundwater into subsoil",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport,
),
"C_cpr_ss": Variable(
"solute concentration of capillary rise from groundwater into subsoil",
CATCH_GRID,
"mg/l",
"solute concentration of capillary rise from groundwater into subsoil",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport,
),
"C_iso_cpr_ss": Variable(
"isotope ratio of capillary rise from groundwater into subsoil",
CATCH_GRID,
"per mil",
"isotope ratio of capillary rise from groundwater into subsoil",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport
& (settings.enable_oxygen18 | settings.enable_deuterium),
),
# surface runoff variables
"q_sur": Variable(
"surface runoff",
CATCH_GRID,
"mm/dt",
"surface runoff",
time_dependent=True,
),
"q_hof": Variable(
"hortonian overland flow",
CATCH_GRID,
"mm/dt",
"hortonian overland flow",
time_dependent=True,
),
"q_sof": Variable(
"saturation overland flow",
CATCH_GRID,
"mm/dt",
"saturation overland flow",
time_dependent=True,
),
# subsurface runoff variables
"q_sub": Variable(
"lateral subsurface runoff",
CATCH_GRID,
"mm/dt",
"lateral subsurface runoff",
time_dependent=True,
active=lambda settings: settings.enable_lateral_flow,
),
"q_sub_pot": Variable(
"lateral potential subsurface runoff",
CATCH_GRID,
"mm/dt",
"lateral potential subsurface runoff",
time_dependent=True,
active=lambda settings: settings.enable_lateral_flow,
),
"q_sub_rz": Variable(
"lateral subsurface runoff in root zone",
CATCH_GRID,
"mm/dt",
"lateral subsurface runoff in root zone",
time_dependent=True,
active=lambda settings: settings.enable_lateral_flow,
),
"q_sub_ss": Variable(
"lateral subsurface runoff in subsoil",
CATCH_GRID,
"mm/dt",
"lateral subsurface runoff in subsoil",
time_dependent=True,
active=lambda settings: settings.enable_lateral_flow,
),
"q_sub_pot_ss": Variable(
"lateral potential subsurface runoff in subsoil",
CATCH_GRID,
"mm/dt",
"lateral potential subsurface runoff in subsoil",
time_dependent=True,
active=lambda settings: settings.enable_lateral_flow,
),
"q_sub_mat": Variable(
"lateral matrix subsurface runoff",
CATCH_GRID,
"mm/dt",
"lateral matrix subsurface runoff",
time_dependent=True,
active=lambda settings: settings.enable_lateral_flow,
),
"q_sub_mat_pot": Variable(
"lateral potential matrix subsurface runoff",
CATCH_GRID,
"mm/dt",
"lateral potential matrix subsurface runoff",
time_dependent=True,
active=lambda settings: settings.enable_lateral_flow,
),
"q_sub_mat_rz": Variable(
"lateral matrix subsurface runoff in root zone",
CATCH_GRID,
"mm/dt",
"lateral matrix subsurface runoff in root zone",
time_dependent=True,
active=lambda settings: settings.enable_lateral_flow,
),
"q_sub_mat_ss": Variable(
"lateral matrix subsurface runoff in subsoil",
CATCH_GRID,
"mm/dt",
"matrix subsurface runoff in subsoil",
time_dependent=True,
active=lambda settings: settings.enable_lateral_flow,
),
"q_sub_mat_pot_ss": Variable(
"lateral potential matrix subsurface runoff in subsoil",
CATCH_GRID,
"mm/dt",
"lateral potential matrix subsurface runoff in subsoil",
time_dependent=True,
active=lambda settings: settings.enable_lateral_flow,
),
"q_sub_mp": Variable(
"lateral macropore subsurface runoff",
CATCH_GRID,
"mm/dt",
"lateral macropore subsurface runoff",
time_dependent=True,
active=lambda settings: settings.enable_lateral_flow,
),
"q_sub_mp_pot": Variable(
"lateral potential macropore subsurface runoff",
CATCH_GRID,
"mm/dt",
"lateral potential macropore subsurface runoff",
time_dependent=True,
active=lambda settings: settings.enable_lateral_flow,
),
"q_sub_mp_rz": Variable(
"lateral macropore subsurface runoff in root zone",
CATCH_GRID,
"mm/dt",
"lateral macropore subsurface runoff in root zone",
time_dependent=True,
active=lambda settings: settings.enable_lateral_flow,
),
"q_sub_mp_pot_rz": Variable(
"lateral potential macropore subsurface runoff in root zone",
CATCH_GRID,
"mm/dt",
"lateral potential macropore subsurface runoff in root zone",
time_dependent=True,
active=lambda settings: settings.enable_lateral_flow,
),
"q_sub_mp_ss": Variable(
"lateral macropore subsurface runoff in subsoil",
CATCH_GRID,
"mm/dt",
"lateral macropore subsurface runoff in subsoil",
time_dependent=True,
active=lambda settings: settings.enable_lateral_flow,
),
"q_sub_mp_pot_ss": Variable(
"lateral potential macropore subsurface runoff in subsoil",
CATCH_GRID,
"mm/dt",
"lateral potential macropore subsurface runoff in subsoil",
time_dependent=True,
active=lambda settings: settings.enable_lateral_flow,
),
"q_pot_rz": Variable(
"potential precolation in root zone",
CATCH_GRID,
"mm/dt",
"potential precolation in root zone",
time_dependent=True,
),
"q_pot_ss": Variable(
"potential precolation in subsoil",
CATCH_GRID,
"mm/dt",
"potential precolation in subsoil",
time_dependent=True,
),
"q_sub_mp_share": Variable(
"share of lateral macropore subsurface runoff",
CATCH_GRID,
"mm/dt",
"share of lateral macropore subsurface runoff",
time_dependent=True,
active=lambda settings: settings.enable_lateral_flow,
),
"q_sub_mat_share": Variable(
"share of lateral matrix subsurface runoff",
CATCH_GRID,
"mm/dt",
"share of lateral matrix subsurface runoff",
time_dependent=True,
active=lambda settings: settings.enable_lateral_flow,
),
"sas_params_q_sub_rz": Variable(
"SAS parameters of lateral subsurface runoff in root zone",
CATCH_GRID + N_SAS_PARAMS,
"-",
"SAS parameters of lateral subsurface runoff in root zone",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport & settings.enable_lateral_flow,
),
"TT_q_sub_rz": Variable(
"cumulative travel time distribution",
CATCH_GRID + NAGES,
"-",
"cumulative travel time distribution",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport & settings.enable_lateral_flow,
),
"tt_q_sub_rz": Variable(
"travel time distribution",
CATCH_GRID + AGES,
"-",
"travel time distribution",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport & settings.enable_lateral_flow,
),
"MTT_q_sub_rz": Variable(
"cumulative solute travel time distribution",
CATCH_GRID + NAGES,
"-",
"cumulative solute travel time distribution",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport & settings.enable_lateral_flow,
),
"mtt_q_sub_rz": Variable(
"solute travel time distribution",
CATCH_GRID + AGES,
"-",
"solute travel time distribution",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport & settings.enable_lateral_flow,
),
"M_q_sub_rz": Variable(
"solute mass of lateral subsurface runoff in root zone",
CATCH_GRID,
"mg",
"solute mass of lateral subsurface runoff in root zone",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport & settings.enable_lateral_flow,
),
"C_q_sub_rz": Variable(
"solute concentration of lateral subsurface runoff in root zone",
CATCH_GRID,
"mg/l",
"solute concentration of lateral subsurface runoff in root zone",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport & settings.enable_lateral_flow,
),
"sas_params_q_sub_ss": Variable(
"SAS parameters of lateral subsurface runoff in subsoil",
CATCH_GRID + N_SAS_PARAMS,
"-",
"SAS parameters of lateral subsurface runoff in subsoil",
time_dependent=True,
write_to_restart=True,
active=lambda settings: settings.enable_offline_transport & settings.enable_lateral_flow,
),
"TT_q_sub_ss": Variable(
"cumulative travel time distribution",
CATCH_GRID + NAGES,
"-",
"cumulative travel time distribution",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport & settings.enable_lateral_flow,
),
"tt_q_sub_ss": Variable(
"travel time distribution",
CATCH_GRID + AGES,
"-",
"travel time distribution",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport & settings.enable_lateral_flow,
),
"MTT_q_sub_ss": Variable(
"cumulative solute travel time distribution",
CATCH_GRID + NAGES,
"-",
"cumulative solute travel time distribution",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport & settings.enable_lateral_flow,
),
"mtt_q_sub_ss": Variable(
"solute travel time distribution",
CATCH_GRID + AGES,
"-",
"solute travel time distribution",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport & settings.enable_lateral_flow,
),
"M_q_sub_ss": Variable(
"solute mass of lateral subsurface runoff in subsoil",
CATCH_GRID,
"mg",
"solute mass of lateral subsurface runoff in subsoil",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport & settings.enable_lateral_flow,
),
"C_q_sub_ss": Variable(
"solute concentration of lateral subsurface runoff in subsoil",
CATCH_GRID,
"mg/l",
"solute concentration of lateral subsurface runoff in subsoil",
time_dependent=True,
active=lambda settings: settings.enable_offline_transport & settings.enable_lateral_flow,
),
# crop parameters
# crop variables
# transport parameters
"alpha_transp": Variable(
"partition coefficient of transpiration",
CATCH_GRID,
"-",
"partition coefficient of transpiration",
time_dependent=False,
write_to_restart=True,
initial=1,
active=lambda settings: settings.enable_offline_transport,
),
"alpha_q": Variable(
"partition coefficient of drainage",
CATCH_GRID,
"-",
"partition coefficient of drainage",
time_dependent=False,
write_to_restart=True,
initial=1,
active=lambda settings: settings.enable_offline_transport,
),
# event variables
"prec_event_csum": Variable(
"cumulated rainfall/snow melt while event",
CATCH_GRID,
"mm",
"cumulated rainfall/snow melt while event",
write_to_restart=True,
time_dependent=True,
active=lambda settings: not settings.enable_offline_transport,
),
"t_event_csum": Variable(
"cumulated time while event",
CATCH_GRID,
"hours",
"cumulated time while event",
write_to_restart=True,
time_dependent=True,
active=lambda settings: not settings.enable_offline_transport,
),
# forcing
"C_IN": Variable(
"solute concentration of input",
CATCH_GRID + TIME,
"mg/l or per mil",
"solute concentration of input",
write_to_restart=True,
time_dependent=False,
active=lambda settings: settings.enable_offline_transport
& (
settings.enable_chloride
| settings.enable_bromide
| settings.enable_oxygen18
| settings.enable_deuterium
| settings.enable_nitrate
),
),
"C_ISO_IN": Variable(
"isotope ratio of input",
CATCH_GRID + TIME,
"per mil",
"isotope ratio of input",
write_to_restart=True,
time_dependent=False,
active=lambda settings: settings.enable_offline_transport
& (settings.enable_oxygen18 | settings.enable_deuterium),
),
"C_in": Variable(
"solute concentration of input",
CATCH_GRID,
"mg/l or per mil",
"solute concentration of input",
write_to_restart=False,
time_dependent=False,
active=lambda settings: settings.enable_offline_transport
& (
settings.enable_chloride
| settings.enable_bromide
| settings.enable_oxygen18
| settings.enable_deuterium
| settings.enable_nitrate
| settings.enable_virtualtracer
),
),
"C_iso_in": Variable(
"isotope ratio of input",
CATCH_GRID,
"per mil",
"isotope ratio of input",
write_to_restart=False,
time_dependent=False,
active=lambda settings: settings.enable_offline_transport
& (settings.enable_oxygen18 | settings.enable_deuterium),
),
"C_snow": Variable(
"isotope concentration of snow cover",
CATCH_GRID + TIMESTEPS,
"mg/l",
"isotope concentration of snow cover",
write_to_restart=False,
time_dependent=False,
active=lambda settings: settings.enable_offline_transport
& (settings.enable_oxygen18 | settings.enable_deuterium),
),
"C_iso_snow": Variable(
"isotope ratio of snow cover",
CATCH_GRID + TIMESTEPS,
"per mil",
"isotope ratio of snow cover",
write_to_restart=False,
time_dependent=False,
active=lambda settings: settings.enable_offline_transport
& (settings.enable_oxygen18 | settings.enable_deuterium),
),
"M_snow": Variable(
"solute mass of snow cover",
CATCH_GRID + TIMESTEPS,
"mg",
"solute mass of snow cover",
write_to_restart=False,
time_dependent=False,
active=lambda settings: settings.enable_offline_transport
& (
settings.enable_chloride
| settings.enable_bromide
| settings.enable_oxygen18
| settings.enable_deuterium
| settings.enable_nitrate
),
),
"M_IN": Variable(
"solute mass of input",
CATCH_GRID + TIME,
"mg",
"solute mass of input",
write_to_restart=True,
time_dependent=False,
active=lambda settings: settings.enable_offline_transport
& (
settings.enable_chloride
| settings.enable_bromide
| settings.enable_oxygen18
| settings.enable_deuterium
| settings.enable_nitrate
),
),
"M_in": Variable(
"solute mass of input",
CATCH_GRID,
"mg",
"solute mass of input",
write_to_restart=False,
time_dependent=False,
active=lambda settings: settings.enable_offline_transport
& (
settings.enable_chloride
| settings.enable_bromide
| settings.enable_oxygen18
| settings.enable_deuterium
| settings.enable_nitrate
| settings.enable_virtualtracer
),
),
"NMIN_IN": Variable(
"mineral nitrogen fertilizer",
CATCH_GRID + TIME,
"mg",
"mineral nitrogen fertilizer",
write_to_restart=True,
time_dependent=False,
active=lambda settings: settings.enable_offline_transport & settings.enable_nitrate,
),
"Nmin_in": Variable(
"undissolved mineral nitrogen fertilizer",
CATCH_GRID,
"mg",
"undissolved mineral nitrogen fertilizer",
write_to_restart=False,
time_dependent=False,
active=lambda settings: settings.enable_offline_transport & settings.enable_nitrate,
),
"Nfert_min": Variable(
"mineral nitrogen fertilizer",
CATCH_GRID,
"mg",
"mineral nitrogen fertilizer",
write_to_restart=False,
time_dependent=False,
active=lambda settings: settings.enable_offline_transport & settings.enable_nitrate,
),
"NORG_IN": Variable(
"organic nitrogen fertilizer",
CATCH_GRID + TIME,
"mg",
"organic nitrogen fertilizer",
write_to_restart=True,
time_dependent=False,
active=lambda settings: settings.enable_offline_transport & settings.enable_nitrate,
),
"Norg_in": Variable(
"organic nitrogen fertilizer",
CATCH_GRID,
"mg",
"organic nitrogen fertilizer",
write_to_restart=False,
time_dependent=False,
active=lambda settings: settings.enable_offline_transport & settings.enable_nitrate,
),
"Nfert_org": Variable(
"organic nitrogen fertilizer",
CATCH_GRID,
"mg",
"organic nitrogen fertilizer",
write_to_restart=False,
time_dependent=False,
active=lambda settings: settings.enable_offline_transport & settings.enable_nitrate,
),
"Nfert": Variable(
"nitrogen fertilizer",
CATCH_GRID,
"mg",
"nitrogen fertilizer",
write_to_restart=False,
time_dependent=False,
active=lambda settings: settings.enable_offline_transport & settings.enable_nitrate,
),
# transport variables
# film flow parameters
# film flow variables
# routing parameters
"z_stream_tot": Variable(
"total depth of river",
RIVER_GRID,
"m",
"total depth of river",
write_to_restart=True,
time_dependent=False,
active=lambda settings: settings.enable_routing_1D,
),
"flow_dir_topo": Variable(
"topographic flow direction",
CATCH_GRID,
"-",
"topographic flow direction",
write_to_restart=True,
time_dependent=False,
active=lambda settings: settings.enable_routing_1D,
),
"k_st": Variable(
"Strickler coefficient",
CATCH_GRID,
"m^1/3 s^-1",
"Strickler coefficient",
write_to_restart=True,
time_dependent=False,
active=lambda settings: settings.enable_routing_1D,
),
"q_sur_in": Variable(
"lateral surface inflow",
CATCH_GRID,
"-",
"lateral surface inflow",
write_to_restart=True,
time_dependent=False,
active=lambda settings: settings.enable_routing_1D,
),
"q_sur_out": Variable(
"lateral surface outflow",
CATCH_GRID,
"-",
"lateral surface outflow",
write_to_restart=True,
time_dependent=False,
active=lambda settings: settings.enable_routing_1D,
),
"q_sur_in_d8": Variable(
"lateral surface inflow",
CATCH_GRID + FLOWDIRS,
"-",
"lateral surface inflow",
write_to_restart=True,
time_dependent=False,
active=lambda settings: settings.enable_routing_1D,
),
"q_sur_out_d8": Variable(
"lateral surface outflow",
CATCH_GRID + FLOWDIRS,
"-",
"lateral surface outflow",
write_to_restart=True,
time_dependent=False,
active=lambda settings: settings.enable_routing_1D,
),
"q_sub_in": Variable(
"lateral subsurface inflow",
CATCH_GRID,
"-",
"lateral subsurface inflow",
write_to_restart=True,
time_dependent=False,
active=lambda settings: settings.enable_routing_1D,
),
"q_sub_in_rz": Variable(
"lateral subsurface inflow",
CATCH_GRID,
"-",
"lateral subsurface inflow",
write_to_restart=True,
time_dependent=False,
active=lambda settings: settings.enable_routing_1D,
),
"q_sub_in_ss": Variable(
"lateral subsurface inflow",
CATCH_GRID,
"-",
"lateral subsurface inflow",
write_to_restart=True,
time_dependent=False,
active=lambda settings: settings.enable_routing_1D,
),
"q_sub_in_d8": Variable(
"lateral subsurface inflow",
CATCH_GRID + FLOWDIRS,
"-",
"lateral subsurface inflow",
write_to_restart=True,
time_dependent=False,
active=lambda settings: settings.enable_routing_1D,
),
"q_sub_out": Variable(
"lateral subsurface outflow",
CATCH_GRID,
"-",
"lateral subsurface outflow",
write_to_restart=True,
time_dependent=False,
active=lambda settings: settings.enable_routing_1D,
),
"q_sub_out_d8": Variable(
"lateral subsurface outflow",
CATCH_GRID + FLOWDIRS,
"-",
"lateral subsurface outflow",
write_to_restart=True,
time_dependent=False,
active=lambda settings: settings.enable_routing_1D,
),
# routing variables
"z_stream": Variable(
"depth of river",
RIVER_GRID + TIMESTEPS,
"m",
"depth of riverr",
write_to_restart=True,
time_dependent=True,
active=lambda settings: settings.enable_routing_1D,
),
# run-on infiltration parameters
# run-on infiltration variables
# urban parameters
# urban variables
# crop variables
"ta_min": Variable(
"minimum air temperature",
CATCH_GRID + TIMESTEPS,
"degC",
"minimum air temperature",
time_dependent=True,
active=lambda settings: settings.enable_crop_phenology,
),
"ta_max": Variable(
"maximum air temperature",
CATCH_GRID + TIMESTEPS,
"degC",
"maximum air temperature",
time_dependent=True,
active=lambda settings: settings.enable_crop_phenology,
),
"crop_type": Variable(
"crop type",
CATCH_GRID + CROPS,
"",
"crop type",
write_to_restart=True,
time_dependent=True,
dtype="int32",
active=lambda settings: not settings.enable_offline_transport and settings.enable_crop_phenology,
),
"crop_height": Variable(
"height of crops",
CATCH_GRID + CROPS,
"mm",
"height of crops",
time_dependent=True,
active=lambda settings: settings.enable_crop_phenology,
),
"crop_height_max": Variable(
"maximum height of crops",
CATCH_GRID + CROPS,
"mm",
"maximum height of crops",
time_dependent=True,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_crop_phenology,
),
"lai_crop": Variable(
"leaf area index of crops",
CATCH_GRID + CROPS,
"-",
"leaf area index of crops",
time_dependent=True,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_crop_phenology,
),
"c_int": Variable(
"scale parameter of interception storage",
CATCH_GRID,
"-",
"scale parameter of interception storage",
time_dependent=False,
write_to_restart=True,
initial=1.0,
active=lambda settings: not settings.enable_offline_transport,
),
"S_int_tot_crop": Variable(
"total interception storage of crop canopy",
CATCH_GRID + CROPS,
"mm",
"total interception storage of crop canopy",
time_dependent=True,
write_to_restart=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_crop_phenology,
),
"doy_start": Variable(
"day of year of sowing",
CATCH_GRID + CROPS,
"",
"day of year of sowing",
write_to_restart=True,
dtype="int32",
active=lambda settings: not settings.enable_offline_transport and settings.enable_crop_phenology,
),
"doy_mid": Variable(
"day of year of full canopy",
CATCH_GRID + CROPS,
"",
"day of year of full canopy",
write_to_restart=True,
dtype="int32",
active=lambda settings: not settings.enable_offline_transport and settings.enable_crop_phenology,
),
"doy_dec": Variable(
"day of year of crop canopy decay",
CATCH_GRID + CROPS,
"",
"day of year of crop canopy decay",
write_to_restart=True,
dtype="int32",
active=lambda settings: not settings.enable_offline_transport and settings.enable_crop_phenology,
),
"doy_end": Variable(
"day of year of harvesting",
CATCH_GRID + CROPS,
"",
"day of year of harvesting",
write_to_restart=True,
dtype="int32",
active=lambda settings: not settings.enable_offline_transport and settings.enable_crop_phenology,
),
"ta_base": Variable(
"lower threshold of crop growth",
CATCH_GRID + CROPS,
"degC",
"lower threshold of crop growth",
write_to_restart=True,
time_dependent=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_crop_phenology,
),
"ta_ceil": Variable(
"upper threshold of crop growth",
CATCH_GRID + CROPS,
"degC",
"upper threshold of crop growth",
write_to_restart=True,
time_dependent=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_crop_phenology,
),
"gdd": Variable(
"cumulated growing degree days",
CATCH_GRID + CROPS,
"GDD",
"growing degree days",
write_to_restart=True,
time_dependent=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_crop_phenology,
),
"gdd_sum": Variable(
"cumulated growing degree days",
CATCH_GRID + TIMESTEPS + CROPS,
"GDD",
"cumulated growing degree days",
write_to_restart=True,
time_dependent=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_crop_phenology,
),
"t_grow_cc": Variable(
"time since crop canopy growth",
CATCH_GRID + TIMESTEPS + CROPS,
"GDD",
"time since crop canopy growth",
write_to_restart=True,
time_dependent=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_crop_phenology,
),
"t_grow_root": Variable(
"time since crop root growth",
CATCH_GRID + TIMESTEPS + CROPS,
"GDD",
"time since crop root growth",
write_to_restart=True,
time_dependent=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_crop_phenology,
),
"t_half_mid": Variable(
"time since half full canopy",
CATCH_GRID + CROPS,
"GDD",
"time since half full canopy",
write_to_restart=True,
time_dependent=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_crop_phenology,
),
"t_decay": Variable(
"time since crop canopy decay",
CATCH_GRID + CROPS,
"GDD",
"time since crop canopy decay",
write_to_restart=True,
time_dependent=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_crop_phenology,
),
"ccc_growth_rate": Variable(
"growth rate of crop canopy cover",
CATCH_GRID + CROPS,
"-",
"growth rate of crop canopy cover",
write_to_restart=True,
time_dependent=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_crop_phenology,
),
"ccc": Variable(
"crop canopy cover",
CATCH_GRID + TIMESTEPS + CROPS,
"-",
"crop canopy cover",
write_to_restart=True,
time_dependent=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_crop_phenology,
),
"ccc_min": Variable(
"minimum crop canopy cover",
CATCH_GRID + CROPS,
"-",
"minimum crop canopy cover",
write_to_restart=True,
time_dependent=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_crop_phenology,
),
"ccc_mid": Variable(
"crop canopy cover at maturity",
CATCH_GRID + CROPS,
"-",
"crop canopy cover at maturity",
write_to_restart=True,
time_dependent=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_crop_phenology,
),
"ccc_max": Variable(
"maximum crop canopy cover",
CATCH_GRID + CROPS,
"-",
"maximum crop canopy cover",
write_to_restart=True,
time_dependent=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_crop_phenology,
),
"crop_dev_coeff": Variable(
"crop development coefficient",
CATCH_GRID + CROPS,
"-",
"crop development coefficient",
write_to_restart=True,
time_dependent=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_crop_phenology,
),
"basal_evap_coeff_crop": Variable(
"basal crop evaporation coefficient",
CATCH_GRID + CROPS,
"-",
"basal crop evaporation coefficient",
write_to_restart=True,
time_dependent=False,
active=lambda settings: not settings.enable_offline_transport and settings.enable_crop_phenology,
),
"k_stress_transp_crop": Variable(
"water stress coefficient of crop transpiration",
CATCH_GRID + CROPS,
"-",
"water stress coefficient of crop transpiration",
write_to_restart=True,
initial=1,
time_dependent=False,
active=lambda settings: not settings.enable_offline_transport and settings.enable_crop_phenology,
),
"basal_crop_coeff": Variable(
"basal crop coefficient",
CATCH_GRID + CROPS,
"-",
"basal crop coefficient",
write_to_restart=True,
time_dependent=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_crop_phenology,
),
"crop_scale": Variable(
"scaling factor of crop parameters",
CATCH_GRID,
"-",
"scaling factor of crop parameters",
write_to_restart=True,
initial=1,
time_dependent=False,
active=lambda settings: not settings.enable_offline_transport and settings.enable_crop_phenology,
),
"root_growth_scale": Variable(
"scaling factor of crop root growth parameters",
CATCH_GRID,
"-",
"scaling factor of crop root growth parameters",
write_to_restart=True,
initial=1,
time_dependent=False,
active=lambda settings: not settings.enable_offline_transport and settings.enable_crop_phenology,
),
"canopy_growth_scale": Variable(
"scaling factor of crop canopy growth parameters",
CATCH_GRID,
"-",
"scaling factor of crop canopy growth parameters",
write_to_restart=True,
initial=1,
time_dependent=False,
active=lambda settings: not settings.enable_offline_transport and settings.enable_crop_phenology,
),
"basal_crop_coeff_scale": Variable(
"scaling factor of basal crop coefficient",
CATCH_GRID,
"-",
"scaling factor of basal crop coefficient",
write_to_restart=True,
initial=1,
time_dependent=False,
active=lambda settings: not settings.enable_offline_transport and settings.enable_crop_phenology,
),
"lut_crop_scale": Variable(
"scaling factor of crop parameters",
CATCH_GRID + N_CROP_TYPES,
"-",
"scaling factor of crop parameters",
write_to_restart=True,
initial=1,
time_dependent=False,
active=lambda settings: settings.enable_crop_phenology,
),
"basal_crop_coeff_mid": Variable(
"basal crop coefficient of mature crop",
CATCH_GRID + CROPS,
"-",
"basal crop coefficient of mature crop",
write_to_restart=True,
time_dependent=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_crop_phenology,
),
"theta_water_stress_crop": Variable(
"soil water content of crop water stress",
CATCH_GRID + CROPS,
"-",
"soil water content of crop water stress",
write_to_restart=True,
time_dependent=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_crop_phenology,
),
"water_stress_coeff_crop": Variable(
"coeffcient of crop water stress",
CATCH_GRID + CROPS,
"-",
"coeffcient of crop water stress",
write_to_restart=True,
time_dependent=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_crop_phenology,
),
"root_growth_rate": Variable(
"growth rate of crop roots",
CATCH_GRID + CROPS,
"-",
"growth rate of crop roots",
write_to_restart=True,
time_dependent=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_crop_phenology,
),
"z_root_crop": Variable(
"root depth of crop",
CATCH_GRID + TIMESTEPS + CROPS,
"mm",
"root depth of crop",
write_to_restart=True,
time_dependent=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_crop_phenology,
),
"z_root_crop_max": Variable(
"maximum root depth of crop",
CATCH_GRID + CROPS,
"mm",
"maximum root depth of crop",
write_to_restart=True,
time_dependent=True,
active=lambda settings: not settings.enable_offline_transport and settings.enable_crop_phenology,
),
"k_stress_root_growth": Variable(
"water stress coeffcient of root growth",
CATCH_GRID + CROPS,
"-",
"water stress coeffcient of root growth",
write_to_restart=True,
time_dependent=True,
initial=1,
active=lambda settings: not settings.enable_offline_transport and settings.enable_crop_phenology,
),
# look-up-tables
"lut_ilu": Variable(
"Look-up-table of land use dependent interception storage",
LUT_ILU_GRID,
"mm",
"Look-up-table of land use dependent interception storage",
write_to_restart=False,
time_dependent=False,
),
"lut_gc": Variable(
"Look-up-table of land use dependent ground cover",
LUT_ILU_GRID,
"-",
"Look-up-table of land use dependent ground cover",
write_to_restart=False,
time_dependent=False,
),
"lut_gcm": Variable(
"Look-up-table of land use dependent maximal ground cover",
LUT_GCM_GRID,
"-",
"Look-up-table of land use dependent maximalground cover",
write_to_restart=False,
time_dependent=False,
),
"lut_is": Variable(
"Look-up-table of sealing dependent interception storage",
LUT_IS_GRID,
"mm",
"Look-up-table of sealing dependent interception storage",
write_to_restart=False,
time_dependent=False,
),
"lut_mlms": Variable(
"Look-up-table of lateral macropore flow velocity",
LUT_MLMS_GRID,
"mm/h",
"Look-up-table of lateral macropore flow velocity",
write_to_restart=False,
time_dependent=False,
active=lambda settings: settings.enable_lateral_flow,
),
"lut_rdlu": Variable(
"Look-up-table of land use dependent root depth",
LUT_RDLU_GRID,
"mm",
"Look-up-table of land use dependent root depth",
write_to_restart=False,
time_dependent=False,
),
"lut_crops": Variable(
"Look-up-table of crop specific parameters",
LUT_CROPS_GRID,
"",
"Look-up-table of crop specific parameters",
write_to_restart=False,
time_dependent=False,
active=lambda settings: settings.enable_crop_phenology,
),
"lut_fert1": Variable(
"Look-up-table of nitrogen fertilization",
LUT_FERT_GRID,
"",
"Look-up-table of nitrogen fertilization",
write_to_restart=False,
time_dependent=False,
active=lambda settings: settings.enable_crop_phenology & settings.enable_nitrate,
),
"lut_fert2": Variable(
"Look-up-table of nitrogen fertilization",
LUT_FERT_GRID,
"",
"Look-up-table of nitrogen fertilization",
write_to_restart=False,
time_dependent=False,
active=lambda settings: settings.enable_crop_phenology & settings.enable_nitrate,
),
"lut_fert3": Variable(
"Look-up-table of nitrogen fertilization",
LUT_FERT_GRID,
"",
"Look-up-table of nitrogen fertilization",
write_to_restart=False,
time_dependent=False,
active=lambda settings: settings.enable_crop_phenology & settings.enable_nitrate,
),
"lut_nup": Variable(
"Look-up-table of nitrogen uptake by crops",
LUT_NUP_GRID,
"",
"Look-up-table of nitrogen uptake by crops",
write_to_restart=False,
time_dependent=False,
active=lambda settings: settings.enable_crop_phenology & settings.enable_nitrate,
),
"dS_num_error": Variable(
"numerical error of water balance",
CATCH_GRID,
"mm",
"numerical error of water balance",
write_to_restart=False,
time_dependent=False,
),
"dS_rz_num_error": Variable(
"numerical error of root zone water balance",
CATCH_GRID,
"mm",
"numerical error of root zone water balance",
write_to_restart=False,
time_dependent=False,
),
"dS_ss_num_error": Variable(
"numerical error of subsoil water balance",
CATCH_GRID,
"mm",
"numerical error of subsoil water balance",
write_to_restart=False,
time_dependent=False,
),
"dC_num_error": Variable(
"numerical error of solute balance",
CATCH_GRID,
"M",
"numerical error of solute balance",
write_to_restart=False,
time_dependent=False,
active=lambda settings: settings.enable_offline_transport,
),
"dC_rz_num_error": Variable(
"numerical error of solute balance",
CATCH_GRID,
"M",
"numerical error of solute balance",
write_to_restart=False,
time_dependent=False,
active=lambda settings: settings.enable_offline_transport,
),
"dC_ss_num_error": Variable(
"numerical error of solute balance",
CATCH_GRID,
"M",
"numerical error of solute balance",
write_to_restart=False,
time_dependent=False,
active=lambda settings: settings.enable_offline_transport,
),
}
def manifest_metadata(var_meta, settings):
"""Evaluate callable metadata fields given the current settings."""
from copy import copy
out = {}
for var_name, var_val in var_meta.items():
var_val = copy(var_val)
for attr, attr_val in vars(var_val).items():
if callable(attr_val) and attr != "get_mask":
setattr(var_val, attr, attr_val(settings))
out[var_name] = var_val
return out
def allocate(dimensions, grid, dtype=None, include_ghosts=True, local=True, fill=0):
from roger.core.operators import numpy as npx
if dtype is None:
dtype = runtime_settings.float_type
shape = get_shape(dimensions, grid, include_ghosts=include_ghosts, local=local)
out = npx.full(shape, fill, dtype=dtype)
if runtime_settings.backend == "numpy":
out.flags.writeable = False
return out