Skip to content

Commit

Permalink
ENH: Add other dcsc indices
Browse files Browse the repository at this point in the history
  • Loading branch information
Abel Aoun committed Jan 30, 2024
1 parent 34dc754 commit 5863cef
Showing 1 changed file with 242 additions and 50 deletions.
292 changes: 242 additions & 50 deletions src/icclim/dcsc/dcsc_indices.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand Down Expand Up @@ -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É

0 comments on commit 5863cef

Please sign in to comment.