From 5863ceff273fb124c2b7841f8da497ab7a4e2a8b Mon Sep 17 00:00:00 2001 From: Abel Aoun Date: Tue, 30 Jan 2024 19:09:35 +0100 Subject: [PATCH] ENH: Add other dcsc indices --- src/icclim/dcsc/dcsc_indices.py | 292 ++++++++++++++++++++++++++------ 1 file changed, 242 insertions(+), 50 deletions(-) diff --git a/src/icclim/dcsc/dcsc_indices.py b/src/icclim/dcsc/dcsc_indices.py index 6f19bafe..2f72dae4 100644 --- a/src/icclim/dcsc/dcsc_indices.py +++ b/src/icclim/dcsc/dcsc_indices.py @@ -5,7 +5,7 @@ ) from icclim.generic_indices.standard_variable import StandardVariableRegistry from icclim.generic_indices.threshold import build_threshold -from icclim.models.constants import NEEDS_NORMAL, QUANTILE_BASED +from icclim.models.constants import NEEDS_NORMAL, QUANTILE_BASED, REFERENCE_PERIOD_INDEX from icclim.models.index_group import IndexGroupRegistry from icclim.models.registry import Registry from icclim.models.standard_index import StandardIndex @@ -23,55 +23,16 @@ class DcscIndexRegistry(Registry[StandardIndex]): The indices metadata of this module are in French. - TODO: - - TXND|TNHT|TNND (have different threshold for each pixel) - - CD18 https://github.com/cerfacs-globc/icclim/issues/184 (CDDCold{xx} | Cooling degree days) - - PAV ? - - RR [ an der DCSC-Indikator RR bindend ? ] - - PQ90 et PQ99 [wir könen mit xarray.percentile der Indikator binden] - - PFL90 [Wir mussen der R75pTOT Indikator ] - - Temperatures - - - - - ? TXND Nombre de jours anormalement chauds (température maximale supérieure de plus de 5°C à la normale) - ? TNHT Nombre de nuits anormalement chaudes (température minimale supérieure de plus de 5°C à la normale) - ? TNND Nombre de jours anormalement froids (température minimale inférieure de plus de 5°C à la normale) - CSDI TNCWD Nombre de jours d’une vague de froid (température min < de plus de 5°C à la normale pdt au moins 5j consécutifs) - WSDI TXHWD Nombre de jours d’une vague de chaleur (température max > de plus de 5°C à la normale pdt au moins 5j consécutifs) - - HD17 HDD Degrés-jours de chauffage (Cumul sur la période des écarts négatifs au seuil de < 17°C par la température qt moyenne) - custom CDD Degrés-jours de climatisation (Cumul sur la période des dépassements du seuil de > 18°C par la température qt moyenne) - - PRECIPITATIONS - ? PAV Précipitations quotidiennes moyennes - SDII PINT Précipitation moyenne des jours pluvieux ( RR > 1 mm) - ? RR Cumul de précipitation - - ? PQ90 Précipitation quotidienne intense (90e centile des précipitations) - ? PQ99 Précipitation quotidienne extrême (99e centile des précipitations) - - RR1 RR1MM Nombre de jours de pluie (précipitations >= 1 mm) - R20mm PN20MM Nombre de jours de fortes précipitations (précipitations >= 20 mm) - CDD PXCDD Période de sécheresse (Max [Nbj consécutifs RR < 1 mm]) - CWD PXCWD Nombre maximum de jours pluvieux consécutifs (Max [Nbj consécutifs RR > 1 mm]) - - R99p RR99 Nombre de jours de précipitations extrêmes - custom PFL90 Fraction des précipitations journalières intenses - - VITESSE DE VENT - - ? FFAV Écart de la vitesse du vent moyenne journalière (par rapport à la référence 1976-2005) - ? FF3 Écart du cumul du nombre de jours sans vent (par rapport à la référence 1976-2005) - ? FFQ98 Vitesse du vent fort (valeur du 98e centile) - ? FF98 Nombre de jours de vent fort (vent ≥ 98e centile de la période de référence 1976-2005) - - HUMIDITÉ - - ? HUSAV Humidité spécifique moyenne journalière - + TODO (@bzah): + precips: + PQ90 Précipitation quotidienne intense (90e centile des précipitations) + PQ99 Précipitation quotidienne extrême (99e centile des précipitations) + vents: + FF3 Écart du cumul du nombre de jours sans vent + (par rapport à la référence 1976-2005) + FFQ98 Vitesse du vent fort (valeur du 98e centile) + humidité + HUSAV Humidité spécifique moyenne journalière """ _item_class = StandardIndex @@ -254,3 +215,234 @@ class DcscIndexRegistry(Registry[StandardIndex]): input_variables=[StandardVariableRegistry.TAS_MAX], qualifiers=[NEEDS_NORMAL], ) + TNHT = StandardIndex( + reference=DCSC_REFERENCE, + indicator=GenericIndicatorRegistry.CountOccurrences, + output_unit="day", + threshold=build_threshold( + operator=">", + value=None, # filled when Threshold::prepare is called + unit="degree_Celsius", + offset=" 5 delta_degree_Celsius", + ), + source=DCSC_SOURCE, + short_name="TNHT", + definition="Nombre de nuits anormalement chaudes (température minimale " + "supérieure de plus de 5°C à la normale)", + group=IndexGroupRegistry.HEAT, + input_variables=[StandardVariableRegistry.TAS_MIN], + qualifiers=[NEEDS_NORMAL], + ) + TNND = StandardIndex( + reference=DCSC_REFERENCE, + indicator=GenericIndicatorRegistry.CountOccurrences, + output_unit="day", + threshold=build_threshold( + operator="<", + value=None, # filled when Threshold::prepare is called + unit="degree_Celsius", + offset=" 5 delta_degree_Celsius", + ), + source=DCSC_SOURCE, + short_name="TNND", + definition="Nombre de jours anormalement froids" + " (température minimale inférieure de plus de 5°C à la normale)", + group=IndexGroupRegistry.COLD, + input_variables=[StandardVariableRegistry.TAS_MIN], + qualifiers=[NEEDS_NORMAL], + ) + TNCWD = StandardIndex( + reference=DCSC_REFERENCE, + indicator=GenericIndicatorRegistry.SumOfSpellLengths, + output_unit="day", + threshold=build_threshold( + operator="<", + value=None, # filled when Threshold::prepare is called + unit="degree_Celsius", + offset=" 5 delta_degree_Celsius", + ), + source=DCSC_SOURCE, + short_name="TNCWD", + definition="Nombre de jours d'une vague de froid" + " (température min < de plus de 5°C à la normale pdt au moins " + "5j consécutifs)", + group=IndexGroupRegistry.COLD, + input_variables=[StandardVariableRegistry.TAS_MIN], + qualifiers=[NEEDS_NORMAL], + ) + TXHWD = StandardIndex( + reference=DCSC_REFERENCE, + indicator=GenericIndicatorRegistry.SumOfSpellLengths, + output_unit="day", + threshold=build_threshold( + operator="<", + value=None, # filled when Threshold::prepare is called + unit="degree_Celsius", + offset=" 5 delta_degree_Celsius", + ), + source=DCSC_SOURCE, + short_name="TXHWD ", + definition="Nombre de jours d'une vague de chaleur" + " (température max > de plus de 5°C à la normale" + " pdt au moins 5j consécutifs)", + group=IndexGroupRegistry.HEAT, + input_variables=[StandardVariableRegistry.TAS_MAX], + qualifiers=[NEEDS_NORMAL], + ) + HDD = StandardIndex( + reference=DCSC_REFERENCE, + indicator=GenericIndicatorRegistry.Deficit, + threshold="17 degree_Celsius", + output_unit="degree_Celsius day", + definition="Degrés-jours de chauffage" + " (Cumul sur la période des écarts négatifs au seuil de < 17°C" + " par la température qt moyenne)", + source=DCSC_SOURCE, + short_name="HDD", + group=IndexGroupRegistry.COLD, + input_variables=[StandardVariableRegistry.TAS], + qualifiers=[], + ) + CDD = StandardIndex( + reference=DCSC_REFERENCE, + indicator=GenericIndicatorRegistry.Excess, + threshold="18 degree_Celsius", + output_unit="degree_Celsius day", + definition="Degrés-jours de climatisation" + "(Cumul sur la période des dépassements du seuil de > 18°C" + " par la température qt moyenne)", + source=DCSC_SOURCE, + short_name="CDD", + group=IndexGroupRegistry.HEAT, + input_variables=[StandardVariableRegistry.TAS], + qualifiers=[], + ) + # PRECIPITATION + PAV = StandardIndex( + reference=DCSC_REFERENCE, + indicator=GenericIndicatorRegistry.Average, + output_unit="mm/day", + definition="Précipitations quotidiennes moyennes", + source=DCSC_SOURCE, + short_name="PAV", + group=IndexGroupRegistry.RAIN, + input_variables=[StandardVariableRegistry.PR], + ) + PINT = StandardIndex( + reference=DCSC_REFERENCE, + indicator=GenericIndicatorRegistry.Average, + threshold=">= 1 mm/day", + output_unit="mm/day", + definition="Précipitation moyenne des jours pluvieux (RR > 1 mm)", + source=DCSC_SOURCE, + short_name="PINT", + group=IndexGroupRegistry.RAIN, + input_variables=[StandardVariableRegistry.PR], + ) + RR = StandardIndex( + reference=DCSC_REFERENCE, + indicator=GenericIndicatorRegistry.Sum, + output_unit="mm", + definition="Cumul de précipitation", + source=DCSC_SOURCE, + short_name="RR", + group=IndexGroupRegistry.RAIN, + input_variables=[StandardVariableRegistry.PR], + ) + RR1MM = StandardIndex( + reference=DCSC_REFERENCE, + indicator=GenericIndicatorRegistry.CountOccurrences, + threshold=">= 1 mm/day", + output_unit="day", + definition="Nombre de jours de pluie (précipitations >= 1 mm)", + source=DCSC_SOURCE, + short_name="RR1MM", + group=IndexGroupRegistry.RAIN, + input_variables=[StandardVariableRegistry.PR], + ) + PN20MM = StandardIndex( + reference=DCSC_REFERENCE, + indicator=GenericIndicatorRegistry.CountOccurrences, + threshold=">= 20 mm/day", + output_unit="day", + definition="Nombre de jours de fortes précipitations (précipitations >= 20 mm)", + source=DCSC_SOURCE, + short_name="PN20MM", + group=IndexGroupRegistry.RAIN, + input_variables=[StandardVariableRegistry.PR], + ) + PXCDD = StandardIndex( + reference=DCSC_REFERENCE, + indicator=GenericIndicatorRegistry.MaxConsecutiveOccurrence, + threshold="< 1 mm/day", + output_unit="day", + definition="Période de sécheresse (Max [Nbj consécutifs RR < 1 mm])", + source=DCSC_SOURCE, + short_name="PXCDD", + group=IndexGroupRegistry.DROUGHT, + input_variables=[StandardVariableRegistry.PR], + ) + PXCWD = StandardIndex( + reference=DCSC_REFERENCE, + indicator=GenericIndicatorRegistry.MaxConsecutiveOccurrence, + threshold=">= 1 mm/day", + output_unit="day", + definition="Nombre maximum de jours pluvieux consécutifs" + " (Max [Nbj consécutifs RR > 1 mm])", + source=DCSC_SOURCE, + short_name="PXCWD", + group=IndexGroupRegistry.RAIN, + input_variables=[StandardVariableRegistry.PR], + ) + R99 = StandardIndex( + reference=DCSC_REFERENCE, + indicator=GenericIndicatorRegistry.CountOccurrences, + threshold=build_threshold("> 99 period_per", threshold_min_value="1 mm/day"), + output_unit="day", + definition="Nombre de jours de précipitations extrêmes", + source=DCSC_SOURCE, + short_name="R99", + group=IndexGroupRegistry.RAIN, + input_variables=[StandardVariableRegistry.PR], + qualifiers=[QUANTILE_BASED], + ) + PFL90 = StandardIndex( + reference=DCSC_REFERENCE, + indicator=GenericIndicatorRegistry.FractionOfTotal, + threshold=build_threshold("> 90 period_per", threshold_min_value="1 mm/day"), + output_unit="%", + definition="Fraction des précipitations journalières intenses", + source=DCSC_SOURCE, + short_name="PFL90", + group=IndexGroupRegistry.RAIN, + input_variables=[StandardVariableRegistry.PR], + qualifiers=[QUANTILE_BASED], + ) + # VITESSE DE VENT + FFAV = StandardIndex( + reference=DCSC_REFERENCE, + indicator=GenericIndicatorRegistry.DifferenceOfMeans, + output_unit="m s-1", + definition="Écart de la vitesse du vent moyenne journalière" + " (par rapport à une periode de référence)", + source=DCSC_SOURCE, + short_name="FFAV", + group=IndexGroupRegistry.RAIN, + input_variables=[StandardVariableRegistry.SFC_WIND], + qualifiers=[REFERENCE_PERIOD_INDEX], + ) + FF98 = StandardIndex( + reference=DCSC_REFERENCE, + indicator=GenericIndicatorRegistry.CountOccurrences, + # TODO (@bzah): see if threshold_min_value="1 mm s-1" is needed + threshold=build_threshold("> 98 period_per"), + output_unit="days", + definition="Nombre de jours de vent fort" + " (vent ≥ 98e centile de la période de référence)", + source=DCSC_SOURCE, + short_name="FFAV", + group=IndexGroupRegistry.RAIN, + input_variables=[StandardVariableRegistry.SFC_WIND], + qualifiers=[REFERENCE_PERIOD_INDEX], + ) + # HUMIDITÉ