Source code for xclim.indicators.land._snow

"""Snow indicator definitions."""

from __future__ import annotations

import warnings

from xclim import indices as xci
from xclim.core.indicator import Daily, ResamplingIndicatorWithIndexing
from xclim.indicators.convert import snd_to_snw as _snd_to_snw
from xclim.indicators.convert import snw_to_snd as _snw_to_snd

__all__ = [
    "blowing_snow",
    "holiday_snow_and_snowfall_days",
    "holiday_snow_days",
    "snd_days_above",
    "snd_max_doy",
    "snd_season_end",
    "snd_season_length",
    "snd_season_start",
    "snd_storm_days",
    "snd_to_snw",
    "snow_depth",
    "snow_melt_we_max",
    "snw_days_above",
    "snw_max",
    "snw_max_doy",
    "snw_season_end",
    "snw_season_length",
    "snw_season_start",
    "snw_storm_days",
    "snw_to_snd",
]


[docs] def snd_to_snw(*args, **kwargs): # numpydoc ignore=GL08 warnings.warn( "The `snd_to_snw` indicator has been moved to `xclim.indicators.convert`. " "This alias will be removed in a future version.", DeprecationWarning, stacklevel=2, ) return _snd_to_snw(*args, **kwargs)
[docs] def snw_to_snd(*args, **kwargs): # numpydoc ignore=GL08 warnings.warn( "The `snw_to_snd` indicator has been moved to `xclim.indicators.convert`. " "This alias will be removed in a future version.", DeprecationWarning, stacklevel=2, ) return _snw_to_snd(*args, **kwargs)
# We need to declare the base class here so the `land` module is detected automatically. class Snow(Daily): """Indicators dealing with snow variables.""" keywords = "snow" class SnowWithIndexing(ResamplingIndicatorWithIndexing): """Indicators dealing with snow variables, allowing indexing.""" src_freq = "D" keywords = "snow" snd_season_length = SnowWithIndexing( identifier="snd_season_length", units="days", long_name="Snow cover duration", description=( "The duration of the snow season, starting with at least {window} days with snow depth above {thresh} " "and ending with at least {window} days with snow depth under {thresh}." ), compute=xci.snd_season_length, ) snw_season_length = SnowWithIndexing( identifier="snw_season_length", units="days", long_name="Snow cover duration", description=( "The duration of the snow season, starting with at least {window} days with snow amount above {thresh} " "and ending with at least {window} days with snow amount under {thresh}." ), compute=xci.snw_season_length, ) snd_season_start = Snow( identifier="snd_season_start", standard_name="day_of_year", long_name="Start date of continuous snow depth cover", description="Day of year when snow depth is above or equal to {thresh} for {window} consecutive days.", abstract="The first date on which snow depth is greater than or equal to a given threshold " "for a given number of consecutive days.", units="", compute=xci.snd_season_start, ) snw_season_start = Snow( identifier="snw_season_start", standard_name="day_of_year", long_name="Start date of continuous snow amount cover", description="Day of year when snow amount is above or equal to {thresh} for {window} consecutive days.", abstract="The first date on which snow amount is greater than or equal to a given threshold " "for a given number of consecutive days.", units="", compute=xci.snw_season_start, ) snd_season_end = Snow( identifier="snd_season_end", standard_name="day_of_year", long_name="End date of continuous snow depth cover", description="Day of year when snow depth is below {thresh} for {window} consecutive days.", abstract="The first date on which snow depth is below a given threshold for a given number of consecutive days.", units="", compute=xci.snd_season_end, ) snw_season_end = Snow( identifier="snw_season_end", standard_name="day_of_year", long_name="End date of continuous snow amount cover", description="Day of year when snow amount is below {thresh} for {window} consecutive days.", abstract="The first date on which snow amount is below a given threshold for a given number of consecutive days.", units="", compute=xci.snw_season_end, ) snd_max_doy = SnowWithIndexing( title="Day of year of maximum snow depth", identifier="snd_max_doy", standard_name="day_of_year", var_name="{freq}_snd_max_doy", long_name="Day of the year when snow depth reaches its maximum value", description="The {freq} day of the year when snow depth reaches its maximum value.", abstract="Day of the year when snow depth reaches its maximum value.", units="", _partial=True, compute=xci.snd_max_doy, ) snow_melt_we_max = Snow( title="Maximum snow melt", identifier="snow_melt_we_max", standard_name="change_over_time_in_surface_snow_amount", var_name="{freq}_snow_melt_we_max", long_name="Maximum snow melt", description="The {freq} maximum negative change in melt amount over {window} days.", abstract="The water equivalent of the maximum snow melt.", units="kg m-2", compute=xci.snow_melt_we_max, ) snw_max = SnowWithIndexing( title="Maximum snow amount", identifier="snw_max", standard_name="surface_snow_amount", var_name="{freq}_snw_max", long_name="Maximum snow amount equivalent", description="The {freq} maximum snow amount equivalent on the surface.", abstract="The maximum snow amount equivalent on the surface.", units="kg m-2", compute=xci.snw_max, ) snw_max_doy = SnowWithIndexing( title="Day of year of maximum snow amount", identifier="snw_max_doy", standard_name="day_of_year", var_name="{freq}_snw_max_doy", long_name="Day of year of maximum daily snow amount equivalent", description="The {freq} day of year when snow amount equivalent on the surface reaches its maximum.", abstract="The day of year when snow amount equivalent on the surface reaches its maximum.", units="", compute=xci.snw_max_doy, ) melt_and_precip_max = Snow( title="Water equivalent maximum from precipitation and snow melt", identifier="melt_and_precip_max", var_name="{freq}_melt_and_precip_max", long_name="Water equivalent maximum from precipitation and snow melt", description="The {freq} maximum precipitation flux and negative change in snow amount over {window} days.", abstract="Maximum water input from precipitation flux and snow melt over a given window of days.", units="kg m-2", compute=xci.melt_and_precip_max, ) snd_storm_days = SnowWithIndexing( title="Winter storm days", identifier="snd_storm_days", var_name="{freq}_snd_storm_days", long_name="Days with snowfall depth at or above a given threshold", description="The {freq} number of days with snowfall depth accumulation above {thresh}.", units="days", compute=xci.snd_storm_days, ) snw_storm_days = SnowWithIndexing( title="Winter storm days", identifier="snw_storm_days", var_name="{freq}_snw_storm_days", long_name="Days with snowfall amount at or above a given threshold", description="The {freq} number of days with snowfall amount accumulation above {thresh}.", units="days", compute=xci.snw_storm_days, ) blowing_snow = Snow( title="Blowing snow days", identifier="blowing_snow", var_name="{freq}_blowing_snow", long_name="Days with snowfall and wind speed at or above given thresholds", description="The {freq} number of days with snowfall over last {window} days above {snd_thresh} and wind speed " "above {sfcWind_thresh}.", abstract="The number of days with snowfall, snow depth, and windspeed over given thresholds for a period of days.", units="days", compute=xci.blowing_snow, ) snow_depth = SnowWithIndexing( title="Mean snow depth", identifier="snow_depth", units="cm", standard_name="surface_snow_thickness", long_name="Mean of daily snow depth", description="The {freq} mean of daily mean snow depth.", abstract="Mean of daily snow depth.", cell_methods="time: mean over days", compute=xci.snow_depth, ) snd_days_above = SnowWithIndexing( title="Days with snow (depth)", identifier="snd_days_above", units="days", long_name="Number of days with snow", description="The {freq} number of days with snow depth greater than or equal to {thresh}.", abstract="Number of days when the snow depth is greater than or equal to a given threshold.", compute=xci.snd_days_above, ) snw_days_above = SnowWithIndexing( title="Days with snow (amount)", identifier="snw_days_above", units="days", long_name="Number of days with snow", description="The {freq} number of days with snow amount greater than or equal to {thresh}.", abstract="Number of days when the snow amount is greater than or equal to a given threshold.", compute=xci.snw_days_above, ) holiday_snow_days = Snow( title="Christmas snow days", identifier="holiday_snow_days", units="days", long_name="Number of holiday days with snow", description="The total number of days where snow on the ground was greater than or equal to {snd_thresh} " "occurring on {date_start} and ending on {date_end}.", abstract="The total number of days where there is a significant amount of snow on the ground on December 25th.", compute=xci.holiday_snow_days, ) holiday_snow_and_snowfall_days = Snow( title="Perfect Christmas snow days", identifier="holiday_snow_and_snowfall_days", units="days", long_name="Number of holiday days with snow and snowfall", description="The total number of days where snow on the ground was greater than or equal to {snd_thresh} " "and snowfall was greater than or equal to {prsn_thresh} occurring on {date_start} and ending on {date_end}.", abstract="The total number of days where there is a significant amount of snow on the ground " "and a measurable snowfall occurring on December 25th.", compute=xci.holiday_snow_and_snowfall_days, )