diff --git a/extreme_data/meteo_france_data/adamont_data/abstract_adamont_study.py b/extreme_data/meteo_france_data/adamont_data/abstract_adamont_study.py new file mode 100644 index 0000000000000000000000000000000000000000..b03510e8253c65d55d9a985bdc7153132a139857 --- /dev/null +++ b/extreme_data/meteo_france_data/adamont_data/abstract_adamont_study.py @@ -0,0 +1,114 @@ +import os +import os.path as op +from collections import OrderedDict +from datetime import datetime, timedelta +from enum import Enum +from typing import List + +import numpy as np +from netCDF4._netCDF4 import Dataset + +from extreme_data.meteo_france_data.adamont_data.adamont.adamont_variables import AbstractAdamontVariable +from extreme_data.meteo_france_data.adamont_data.adamont_scenario import scenario_to_str, AdamontScenario, \ + get_year_min_and_year_max_from_scenario, gcm_rcm_couple_to_full_name, get_suffix_for_the_nc_file +from extreme_data.meteo_france_data.adamont_data.utils.utils import massif_number_to_massif_name + +ADAMONT_PATH = r"/home/erwan/Documents/projects/spatiotemporalextremes/local/spatio_temporal_datasets/ADAMONT" + +from cached_property import cached_property + +from extreme_data.meteo_france_data.scm_models_data.abstract_study import AbstractStudy +from extreme_data.meteo_france_data.scm_models_data.utils import Season, FrenchRegion, french_region_to_str + + +class AbstractAdamontStudy(AbstractStudy): + YEAR_MIN = 1950 + YEAR_MAX = 2100 + + def __init__(self, variable_class: type, altitude: int = 1800, + year_min=None, year_max=None, + multiprocessing=True, season=Season.annual, + french_region=FrenchRegion.alps, + scenario=AdamontScenario.histo, gcm_rcm_couple=('CNRM-CM5', 'ALADIN53')): + # Load the default year_min & year_max for the scenario if not specified + if year_min is None and year_max is None: + year_min, year_max = get_year_min_and_year_max_from_scenario(scenario, gcm_rcm_couple) + super().__init__(variable_class=variable_class, altitude=altitude, year_min=year_min, year_max=year_max, + multiprocessing=multiprocessing, season=season, french_region=french_region) + self.gcm_rcm_couple = gcm_rcm_couple + self.gcm_rcm_full_name = gcm_rcm_couple_to_full_name[gcm_rcm_couple] + self.scenario = scenario + assert issubclass(self.variable_class, AbstractAdamontVariable) + # Assert the massif_name are in the same order + for i, massif_name in enumerate(self.all_massif_names()): + assert massif_name == massif_number_to_massif_name[i + 1] + + # Loading part + + @cached_property + def ordered_years(self): + return list(range(self.year_min, self.year_max + 1)) + + @cached_property + def winter_year_for_each_time_step(self): + start = datetime(year=self.year_min - 1, month=8, day=1, hour=6, minute=0, second=0) + hours_after_start = np.array(self.dataset.variables['TIME']) + dates = [start + timedelta(hours=h) for h in hours_after_start] + winter_year = [date.year if date.month < 8 else date.year + 1 for date in dates] + winter_year[-1] = winter_year[-2] + return np.array(winter_year) + + @cached_property + def year_to_variable_object(self) -> OrderedDict: + year_to_data_list = {} + for year in self.ordered_years: + year_to_data_list[year] = [] + data_list = self.dataset.variables[self.variable_class.keyword()] + data_year_list = self.winter_year_for_each_time_step + assert len(data_list) == len(data_year_list) + for year_data, data in zip(data_year_list, data_list): + year_to_data_list[year_data].append(data) + year_to_variable_object = OrderedDict() + for year in self.ordered_years: + variable_array = np.array(year_to_data_list[year]) + year_to_variable_object[year] = self.variable_class(variable_array) + return year_to_variable_object + + @cached_property + def flat_mask(self): + zs_list = [int(e) for e in np.array(self.dataset.variables['ZS'])] + return np.array(zs_list) == self.altitude + + @cached_property + def study_massif_names(self) -> List[str]: + massif_ids = np.array(self.dataset.variables['MASSIF_NUMBER'])[self.flat_mask] + return [massif_number_to_massif_name[massif_id] for massif_id in massif_ids] + + @cached_property + def dataset(self): + return Dataset(self.nc_file_path) + + # PATHS + + @property + def variable_name(self): + return self.variable_class.variable_name_for_folder_and_nc_file() + + @property + def scenario_name(self): + return scenario_to_str(self.scenario) + + @property + def region_name(self): + return french_region_to_str(self.french_region) + + @property + def nc_files_path(self): + return op.join(ADAMONT_PATH, self.variable_name, self.scenario_name) + + @property + def nc_file_path(self): + suffix_nc_file = get_suffix_for_the_nc_file(self.scenario, self.gcm_rcm_couple) + nc_file = '{}_FORCING_{}_{}_{}_{}.nc'.format(self.variable_name, self.gcm_rcm_full_name, self.scenario_name, + self.region_name, suffix_nc_file) + return op.join(self.nc_files_path, nc_file) diff --git a/extreme_data/meteo_france_data/adamont_data/abstract_simulation_study.py b/extreme_data/meteo_france_data/adamont_data/abstract_simulation_study.py deleted file mode 100644 index b852d342ce54b08feb35999574db854b3876d177..0000000000000000000000000000000000000000 --- a/extreme_data/meteo_france_data/adamont_data/abstract_simulation_study.py +++ /dev/null @@ -1,125 +0,0 @@ -import os.path as op -import os -from collections import OrderedDict -from datetime import datetime, timedelta -from typing import List - -import numpy as np -from netCDF4._netCDF4 import Dataset - -from extreme_data.meteo_france_data.scm_models_data.abstract_variable import AbstractVariable -from extreme_data.meteo_france_data.scm_models_data.crocus.crocus_variables import CrocusTotalSweVariable -from root_utils import classproperty - -ADAMONT_PATH = r"/home/erwan/Documents/projects/spatiotemporalextremes/local/spatio_temporal_datasets/ADAMONT" - -from cached_property import cached_property - -from extreme_data.meteo_france_data.scm_models_data.abstract_study import AbstractStudy, YEAR_MIN, YEAR_MAX -from extreme_data.meteo_france_data.scm_models_data.safran.safran_variable import SafranSnowfallVariable -from extreme_data.meteo_france_data.scm_models_data.utils import Season, FrenchRegion - - -class SimulationStudy(AbstractStudy): - scenarios = ['HISTO', 'RCP26', 'RCP45', 'RCP85'] - - def __init__(self, variable_class: type, altitude: int = 1800, year_min=YEAR_MIN, year_max=YEAR_MAX, - multiprocessing=True, orientation=None, slope=20.0, season=Season.annual, - french_region=FrenchRegion.alps, split_years=None, - scenario="HISTO", ensemble_idx=0): - super().__init__(variable_class, altitude, year_min, year_max, multiprocessing, orientation, slope, season, - french_region, split_years) - if scenario == 'HISTO': - self.year_min, self.year_max = 1950, 2004 - else: - self.year_min, self.year_max = 2006, 2100 - assert scenario in self.scenarios - assert 0 <= ensemble_idx <= 13 - self.scenario = scenario - self.ensemble_idx = ensemble_idx - # Assert the massif_name are in the same order - for i, massif_name in enumerate(self.all_massif_names()): - assert massif_name == self.massif_number_to_massif_name[i + 1] - - @property - def simulations_path(self): - return op.join(ADAMONT_PATH, self.variable_class.keyword(), self.scenario) - - @property - def nc_path(self): - nc_file = os.listdir(self.simulations_path)[self.ensemble_idx] - print(" ", nc_file) - return op.join(self.simulations_path, nc_file) - - @property - def massif_number_to_massif_name(self): - # from adamont_data metadata - s = """1 Chablais - 2 Aravis - 3 Mont-Blanc - 4 Bauges - 5 Beaufortain - 6 Haute-Tarentaise - 7 Chartreuse - 8 Belledonne - 9 Maurienne - 10 Vanoise - 11 Haute-Maurienne - 12 Grandes-Rousses - 13 Thabor - 14 Vercors - 15 Oisans - 16 Pelvoux - 17 Queyras - 18 Devoluy - 19 Champsaur - 20 Parpaillon - 21 Ubaye - 22 Haut_Var-Haut_Verdon - 23 Mercantour""" - l = s.split('\n') - return {int(k): m for k, m in dict([e.split() for e in l]).items()} - - @property - def dataset(self): - return Dataset(self.nc_path) - - @cached_property - def ordered_years(self): - return sorted(list(set(self.winter_year_for_each_time_step))) - - @cached_property - def winter_year_for_each_time_step(self): - start = datetime(year=2005, month=8, day=1, hour=6, minute=0, second=0) - hours_after_start = np.array(self.dataset.variables['TIME']) - dates = [start + timedelta(hours=h) for h in hours_after_start] - winter_year = [date.year if date.month < 8 else date.year + 1 for date in dates] - winter_year[-1] = winter_year[-2] - return np.array(winter_year) - - @cached_property - def year_to_variable_object(self) -> OrderedDict: - year_to_data_list = {} - for year in self.ordered_years: - year_to_data_list[year] = [] - data_list = self.dataset.variables[self.variable_class.keyword()] - data_year_list = self.winter_year_for_each_time_step - assert len(data_list) == len(data_year_list) - for year_data, data in zip(data_year_list, data_list): - year_to_data_list[year_data].append(data) - year_to_variable_object = OrderedDict() - for year in self.ordered_years: - variable_array = np.array(year_to_data_list[year]) - year_to_variable_object[year] = self.variable_class(variable_array) - return year_to_variable_object - - @cached_property - def flat_mask(self): - zs_list = [int(e) for e in np.array(self.dataset.variables['ZS'])] - return np.array(zs_list) == self.altitude - - @cached_property - def study_massif_names(self) -> List[str]: - massif_ids = np.array(self.dataset.variables['MASSIF_NUMBER'])[self.flat_mask] - return [self.massif_number_to_massif_name[massif_id] for massif_id in massif_ids] - diff --git a/extreme_data/meteo_france_data/adamont_data/adamont/__init__.py b/extreme_data/meteo_france_data/adamont_data/adamont/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/extreme_data/meteo_france_data/adamont_data/adamont/adamont_snowfall.py b/extreme_data/meteo_france_data/adamont_data/adamont/adamont_snowfall.py new file mode 100644 index 0000000000000000000000000000000000000000..e1ffa1dc927ee2f8ea69850ec7a2fc179f959d7c --- /dev/null +++ b/extreme_data/meteo_france_data/adamont_data/adamont/adamont_snowfall.py @@ -0,0 +1,26 @@ +import numpy as np + +from extreme_data.meteo_france_data.adamont_data.abstract_adamont_study import AbstractAdamontStudy +from extreme_data.meteo_france_data.adamont_data.adamont_scenario import AdamontScenario +from extreme_data.meteo_france_data.adamont_data.adamont.adamont_variables import \ + SafranSnowfallSimulationVariable +from extreme_data.meteo_france_data.scm_models_data.abstract_study import YEAR_MIN, YEAR_MAX +from extreme_data.meteo_france_data.scm_models_data.abstract_variable import AbstractVariable +from extreme_data.meteo_france_data.scm_models_data.utils import Season, FrenchRegion + + +class AdamontSnowfall(AbstractAdamontStudy): + + def __init__(self, altitude: int = 1800, + year_min=None, year_max=None, + multiprocessing=True, season=Season.annual, + french_region=FrenchRegion.alps, + scenario=AdamontScenario.histo, gcm_rcm_couple=('CNRM-CM5', 'ALADIN53')): + super().__init__(SafranSnowfallSimulationVariable, altitude, + year_min, year_max, + multiprocessing, season, french_region, scenario, gcm_rcm_couple) + + +if __name__ == '__main__': + study = AdamontSnowfall(altitude=1800) + print(study.year_to_annual_maxima) diff --git a/extreme_data/meteo_france_data/adamont_data/adamont/adamont_variables.py b/extreme_data/meteo_france_data/adamont_data/adamont/adamont_variables.py new file mode 100644 index 0000000000000000000000000000000000000000..367089545bde87d5920013f8b494a49351e55dba --- /dev/null +++ b/extreme_data/meteo_france_data/adamont_data/adamont/adamont_variables.py @@ -0,0 +1,26 @@ +import numpy as np + +from extreme_data.meteo_france_data.scm_models_data.abstract_variable import AbstractVariable + + +class AbstractAdamontVariable(AbstractVariable): + + @classmethod + def variable_name_for_folder_and_nc_file(cls): + return cls.keyword() + + +class SafranSnowfallSimulationVariable(AbstractAdamontVariable): + UNIT = 'kg $m^{-2}$' + + @property + def daily_time_serie_array(self) -> np.ndarray: + return self.variable_array + + @classmethod + def keyword(cls): + return 'SNOW' + + @classmethod + def variable_name_for_folder_and_nc_file(cls): + return 'Snow' diff --git a/extreme_data/meteo_france_data/adamont_data/adamont_scenario.py b/extreme_data/meteo_france_data/adamont_data/adamont_scenario.py new file mode 100644 index 0000000000000000000000000000000000000000..3e20e6b264bd8750470a6748990188bec64a757c --- /dev/null +++ b/extreme_data/meteo_france_data/adamont_data/adamont_scenario.py @@ -0,0 +1,57 @@ +from enum import Enum + + +class AdamontScenario(Enum): + histo = 0 + rcp26 = 1 + rcp45 = 2 + rcp85 = 3 + + +def get_year_min_and_year_max_from_scenario(adamont_scenario, gcm_rcm_couple): + assert isinstance(adamont_scenario, AdamontScenario) + if adamont_scenario == AdamontScenario.histo: + gcm, rcm = gcm_rcm_couple + if gcm == 'HadGEM2-ES': + year_min = 1982 + elif rcm == 'RCA4': + year_min = 1971 + elif gcm_rcm_couple in [('NorESM1-M', 'DMI-HIRHAM5'), ('IPSL-CM5A-MR', 'WRF331F')]: + year_min = 1952 + else: + year_min = 1951 + return year_min, 2005 + else: + return 2006, 2100 + + +def get_suffix_for_the_nc_file(adamont_scenario, gcm_rcm_couple): + year_min, year_max = get_year_min_and_year_max_from_scenario(adamont_scenario, gcm_rcm_couple) + return '{}080106_{}080106_daysum'.format(year_min-1, year_max) + + +def scenario_to_str(adamont_scenario): + return str(adamont_scenario).split('.')[-1].upper() + + +gcm_rcm_couple_to_full_name = { + ('CNRM-CM5', 'ALADIN53'): 'CNRM-ALADIN53_CNRM-CERFACS-CNRM-CM5', + ('CNRM-CM5', 'RCA4'): 'SMHI-RCA4_CNRM-CERFACS-CNRM-CM5', + ('CNRM-CM5', 'CCLM4-8-17'): 'CLMcom-CCLM4-8-17_CNRM-CERFACS-CNRM-CM5', + ('EC-EARTH', 'CCLM4-8-17'): 'CLMcom-CCLM4-8-17_ICHEC-EC-EARTH', + ('MPI-ESM-LR', 'CCLM4-8-17'): 'CLMcom-CCLM4-8-17_MPI-M-MPI-ESM-LR', + ('HadGEM2-ES', 'CCLM4-8-17'): 'CLMcom-CCLM4-8-17_MOHC-HadGEM2-ES', + ('HadGEM2-ES', 'RACMO22E'): 'KNMI-RACMO22E_MOHC-HadGEM2-ES', + + ('NorESM1-M', 'DMI-HIRHAM5'): 'DMI-HIRHAM5_NCC-NorESM1-M', + ('IPSL-CM5A-MR', 'WRF331F'): 'IPSL-INERIS-WRF331F_IPSL-IPSL-CM5A-MR', + ('EC-EARTH', 'RCA4'): 'SMHI-RCA4_ICHEC-EC-EARTH', + ('IPSL-CM5A-MR', 'RCA4'): 'SMHI-RCA4_IPSL-IPSL-CM5A-MR', + ('HadGEM2-ES', 'RCA4'): 'SMHI-RCA4_MOHC-HadGEM2-ES', + ('MPI-ESM-LR', 'RCA4'): 'SMHI-RCA4_MPI-M-MPI-ESM-LR', + + + ('MPI-ESM-LR', 'REMO2009'): 'MPI-CSC-REMO2009_MPI-M-MPI-ESM-LR', + + +} diff --git a/extreme_data/meteo_france_data/adamont_data/deprecated/__init__.py b/extreme_data/meteo_france_data/adamont_data/deprecated/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/extreme_data/meteo_france_data/adamont_data/ensemble_simulation.py b/extreme_data/meteo_france_data/adamont_data/deprecated/ensemble_simulation.py similarity index 97% rename from extreme_data/meteo_france_data/adamont_data/ensemble_simulation.py rename to extreme_data/meteo_france_data/adamont_data/deprecated/ensemble_simulation.py index 1731a81dec752a557c57707f4c27b82337a25b9d..bde64857e9a074cb94c17c2ca1e8c03c2c6d7398 100644 --- a/extreme_data/meteo_france_data/adamont_data/ensemble_simulation.py +++ b/extreme_data/meteo_france_data/adamont_data/deprecated/ensemble_simulation.py @@ -5,7 +5,7 @@ import os.path as op import numpy as np from cached_property import cached_property -from extreme_data.meteo_france_data.adamont_data.single_simulation import SingleSimulation +from extreme_data.meteo_france_data.adamont_data.deprecated.single_simulation import SingleSimulation ADAMONT_PATH = r"/home/erwan/Documents/projects/spatiotemporalextremes/local/spatio_temporal_datasets/ADAMONT" diff --git a/extreme_data/meteo_france_data/adamont_data/single_simulation.py b/extreme_data/meteo_france_data/adamont_data/deprecated/single_simulation.py similarity index 100% rename from extreme_data/meteo_france_data/adamont_data/single_simulation.py rename to extreme_data/meteo_france_data/adamont_data/deprecated/single_simulation.py diff --git a/extreme_data/meteo_france_data/adamont_data/download_adamont.py b/extreme_data/meteo_france_data/adamont_data/download_adamont.py deleted file mode 100644 index 1b75a25d3523c3055ce467f7895b8fd4c41df250..0000000000000000000000000000000000000000 --- a/extreme_data/meteo_france_data/adamont_data/download_adamont.py +++ /dev/null @@ -1,44 +0,0 @@ -import subprocess - -""" -Go to: https://drias-prod.meteo.fr/ -On the top left, select "simulation au format netcdf" instead of "simulation au format csv" -Then, select the fact that you want to url -""" - -requests = """https://climatedata.umr-cnrm.fr/public/dcsc/projects/DRIAS/ADAMONT2017/Alpes/CNRM-CM5/ALADIN53/rcp8.5/day/snow/Snow_FORCING_CNRM-ALADIN53_CNRM-CERFACS-CNRM-CM5_RCP85_alp_2005080106_2100080106_daysum.nc -https://climatedata.umr-cnrm.fr/public/dcsc/projects/DRIAS/ADAMONT2017/Alpes/IPSL-CM5A/WRF331F/rcp8.5/day/snow/Snow_FORCING_IPSL-INERIS-WRF331F_IPSL-IPSL-CM5A-MR_RCP85_alp_2005080106_2100080106_daysum.nc -https://climatedata.umr-cnrm.fr/public/dcsc/projects/DRIAS/ADAMONT2017/Alpes/CNRM-CM5/RCA4/rcp8.5/day/snow/Snow_FORCING_SMHI-RCA4_CNRM-CERFACS-CNRM-CM5_RCP85_alp_2005080106_2100080106_daysum.nc -https://climatedata.umr-cnrm.fr/public/dcsc/projects/DRIAS/ADAMONT2017/Alpes/EC-EARTH/RCA4/rcp8.5/day/snow/Snow_FORCING_SMHI-RCA4_ICHEC-EC-EARTH_RCP85_alp_2005080106_2100080106_daysum.nc -https://climatedata.umr-cnrm.fr/public/dcsc/projects/DRIAS/ADAMONT2017/Alpes/MOHC-HadGEM2/RCA4/rcp8.5/day/snow/Snow_FORCING_SMHI-RCA4_MOHC-HadGEM2-ES_RCP85_alp_2005080106_2099080106_daysum.nc -https://climatedata.umr-cnrm.fr/public/dcsc/projects/DRIAS/ADAMONT2017/Alpes/IPSL-CM5A/RCA4/rcp8.5/day/snow/Snow_FORCING_SMHI-RCA4_IPSL-IPSL-CM5A-MR_RCP85_alp_2005080106_2100080106_daysum.nc -https://climatedata.umr-cnrm.fr/public/dcsc/projects/DRIAS/ADAMONT2017/Alpes/MPI-ESM-LR/RCA4/rcp8.5/day/snow/Snow_FORCING_SMHI-RCA4_MPI-M-MPI-ESM-LR_RCP85_alp_2005080106_2100080106_daysum.nc -https://climatedata.umr-cnrm.fr/public/dcsc/projects/DRIAS/ADAMONT2017/Alpes/MOHC-HadGEM2/RACMO22E/rcp8.5/day/snow/Snow_FORCING_KNMI-RACMO22E_MOHC-HadGEM2-ES_RCP85_alp_2005080106_2099080106_daysum.nc -https://climatedata.umr-cnrm.fr/public/dcsc/projects/DRIAS/ADAMONT2017/Alpes/CNRM-CM5/CCLM4-8-17/rcp8.5/day/snow/Snow_FORCING_CLMcom-CCLM4-8-17_CNRM-CERFACS-CNRM-CM5_RCP85_alp_2005080106_2100080106_daysum.nc -https://climatedata.umr-cnrm.fr/public/dcsc/projects/DRIAS/ADAMONT2017/Alpes/EC-EARTH/CCLM4-8-17/rcp8.5/day/snow/Snow_FORCING_CLMcom-CCLM4-8-17_ICHEC-EC-EARTH_RCP85_alp_2005080106_2100080106_daysum.nc -https://climatedata.umr-cnrm.fr/public/dcsc/projects/DRIAS/ADAMONT2017/Alpes/MOHC-HadGEM2/CCLM4-8-17/rcp8.5/day/snow/Snow_FORCING_CLMcom-CCLM4-8-17_MOHC-HadGEM2-ES_RCP85_alp_2005080106_2099080106_daysum.nc -https://climatedata.umr-cnrm.fr/public/dcsc/projects/DRIAS/ADAMONT2017/Alpes/MPI-ESM-LR/CCLM4-8-17/rcp8.5/day/snow/Snow_FORCING_CLMcom-CCLM4-8-17_MPI-M-MPI-ESM-LR_RCP85_alp_2005080106_2100080106_daysum.nc -https://climatedata.umr-cnrm.fr/public/dcsc/projects/DRIAS/ADAMONT2017/Alpes/MPI-ESM-LR/REMO019/rcp8.5/day/snow/Snow_FORCING_MPI-CSC-REMO2009_MPI-M-MPI-ESM-LR_RCP85_alp_2005080106_2100080106_daysum.nc -https://climatedata.umr-cnrm.fr/public/dcsc/projects/DRIAS/ADAMONT2017/Alpes/NorESM1/HIRHAM5/rcp8.5/day/snow/Snow_FORCING_DMI-HIRHAM5_NCC-NorESM1-M_RCP85_alp_2005080106_2100080106_daysum.nc -""" - -# requests = """https://climatedata.umr-cnrm.fr/public/dcsc/projects/DRIAS/ADAMONT2017/Alpes/CNRM-CM5/ALADIN53/historical/day/snowswe/SNOWSWE_PRO_CNRM-ALADIN53_CNRM-CERFACS-CNRM-CM5_HISTO_alp_1950080106_2005073106_6h.nc -# https://climatedata.umr-cnrm.fr/public/dcsc/projects/DRIAS/ADAMONT2017/Alpes/IPSL-CM5A/WRF331F/historical/day/snowswe/SNOWSWE_PRO_IPSL-INERIS-WRF331F_IPSL-IPSL-CM5A-MR_HISTO_alp_1951080106_2005073106_6h.nc -# https://climatedata.umr-cnrm.fr/public/dcsc/projects/DRIAS/ADAMONT2017/Alpes/CNRM-CM5/RCA4/historical/day/snowswe/SNOWSWE_PRO_SMHI-RCA4_CNRM-CERFACS-CNRM-CM5_HISTO_alp_1970080106_2005073106_6h.nc -# https://climatedata.umr-cnrm.fr/public/dcsc/projects/DRIAS/ADAMONT2017/Alpes/EC-EARTH/RCA4/historical/day/snowswe/SNOWSWE_PRO_SMHI-RCA4_ICHEC-EC-EARTH_HISTO_alp_1970080106_2005073106_6h.nc -# https://climatedata.umr-cnrm.fr/public/dcsc/projects/DRIAS/ADAMONT2017/Alpes/MOHC-HadGEM2/RCA4/historical/day/snowswe/SNOWSWE_PRO_SMHI-RCA4_MOHC-HadGEM2-ES_HISTO_alp_1981080106_2005073106_6h.nc -# https://climatedata.umr-cnrm.fr/public/dcsc/projects/DRIAS/ADAMONT2017/Alpes/IPSL-CM5A/RCA4/historical/day/snowswe/SNOWSWE_PRO_SMHI-RCA4_IPSL-IPSL-CM5A-MR_HISTO_alp_1970080106_2005073106_6h.nc -# https://climatedata.umr-cnrm.fr/public/dcsc/projects/DRIAS/ADAMONT2017/Alpes/MPI-ESM-LR/RCA4/historical/day/snowswe/SNOWSWE_PRO_SMHI-RCA4_MPI-M-MPI-ESM-LR_HISTO_alp_1970080106_2005073106_6h.nc -# https://climatedata.umr-cnrm.fr/public/dcsc/projects/DRIAS/ADAMONT2017/Alpes/MOHC-HadGEM2/RACMO22E/historical/day/snowswe/SNOWSWE_PRO_KNMI-RACMO22E_MOHC-HadGEM2-ES_HISTO_alp_1981080106_2005073106_6h.nc -# https://climatedata.umr-cnrm.fr/public/dcsc/projects/DRIAS/ADAMONT2017/Alpes/CNRM-CM5/CCLM4-8-17/historical/day/snowswe/SNOWSWE_PRO_CLMcom-CCLM4-8-17_CNRM-CERFACS-CNRM-CM5_HISTO_alp_1950080106_2005073106_6h.nc -# https://climatedata.umr-cnrm.fr/public/dcsc/projects/DRIAS/ADAMONT2017/Alpes/EC-EARTH/CCLM4-8-17/historical/day/snowswe/SNOWSWE_PRO_CLMcom-CCLM4-8-17_ICHEC-EC-EARTH_HISTO_alp_1950080106_2005073106_6h.nc -# https://climatedata.umr-cnrm.fr/public/dcsc/projects/DRIAS/ADAMONT2017/Alpes/MOHC-HadGEM2/CCLM4-8-17/historical/day/snowswe/SNOWSWE_PRO_CLMcom-CCLM4-8-17_MOHC-HadGEM2-ES_HISTO_alp_1981080106_2005073106_6h.nc -# https://climatedata.umr-cnrm.fr/public/dcsc/projects/DRIAS/ADAMONT2017/Alpes/MPI-ESM-LR/CCLM4-8-17/historical/day/snowswe/SNOWSWE_PRO_CLMcom-CCLM4-8-17_MPI-M-MPI-ESM-LR_HISTO_alp_1950080106_2005073106_6h.nc -# https://climatedata.umr-cnrm.fr/public/dcsc/projects/DRIAS/ADAMONT2017/Alpes/MPI-ESM-LR/REMO019/historical/day/snowswe/SNOWSWE_PRO_MPI-CSC-REMO2009_MPI-M-MPI-ESM-LR_HISTO_alp_1950080106_2005073106_6h.nc -# https://climatedata.umr-cnrm.fr/public/dcsc/projects/DRIAS/ADAMONT2017/Alpes/NorESM1/HIRHAM5/historical/day/snowswe/SNOWSWE_PRO_DMI-HIRHAM5_NCC-NorESM1-M_HISTO_alp_1951080106_2005073106_6h.nc -# """ - -for request in requests.split('\n')[:]: - command_line = 'wget {}'.format(request) - print(command_line) - subprocess.run(command_line, shell=True) \ No newline at end of file diff --git a/extreme_data/meteo_france_data/adamont_data/snowfall_simulation.py b/extreme_data/meteo_france_data/adamont_data/snowfall_simulation.py deleted file mode 100644 index e9d990ae26bfa84e7e3aafa8c544d9f4f130f838..0000000000000000000000000000000000000000 --- a/extreme_data/meteo_france_data/adamont_data/snowfall_simulation.py +++ /dev/null @@ -1,34 +0,0 @@ -import numpy as np - -from extreme_data.meteo_france_data.adamont_data.abstract_simulation_study import SimulationStudy -from extreme_data.meteo_france_data.scm_models_data.abstract_study import YEAR_MIN, YEAR_MAX -from extreme_data.meteo_france_data.scm_models_data.abstract_variable import AbstractVariable -from extreme_data.meteo_france_data.scm_models_data.utils import Season, FrenchRegion - - -class SafranSnowfallSimulationVariable(AbstractVariable): - UNIT = 'kg $m^{-2}$' - - - @property - def daily_time_serie_array(self) -> np.ndarray: - return self.variable_array - - @classmethod - def keyword(cls): - return 'SNOW' - - -class SafranSnowfallSimulationRCP85(SimulationStudy): - - def __init__(self, altitude: int = 1800, year_min=YEAR_MIN, year_max=YEAR_MAX, - multiprocessing=True, orientation=None, slope=20.0, season=Season.annual, - french_region=FrenchRegion.alps, split_years=None, ensemble_idx=0): - super().__init__(SafranSnowfallSimulationVariable, altitude, year_min, year_max, multiprocessing, orientation, - slope, - season, french_region, split_years, "RCP85", ensemble_idx) - - -if __name__ == '__main__': - study = SafranSnowfallSimulationRCP85(altitude=1800) - print(study.year_to_annual_maxima) diff --git a/extreme_data/meteo_france_data/adamont_data/utils/__init__.py b/extreme_data/meteo_france_data/adamont_data/utils/__init__.py new file mode 100644 index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 diff --git a/extreme_data/meteo_france_data/adamont_data/utils/download_adamont.py b/extreme_data/meteo_france_data/adamont_data/utils/download_adamont.py new file mode 100644 index 0000000000000000000000000000000000000000..7cc10d7f89f8a72553c83787f9ff3447ba8164d4 --- /dev/null +++ b/extreme_data/meteo_france_data/adamont_data/utils/download_adamont.py @@ -0,0 +1,59 @@ +import subprocess + +""" +Go to: https://drias-prod.meteo.fr/ +On the top left, select "simulation au format netcdf" instead of "simulation au format csv" +Then, select the fact that you want to url +""" + +# requests = """https://climatedata.umr-cnrm.fr/public/dcsc/projects/DRIAS/ADAMONT2017/Alpes/CNRM-CM5/ALADIN53/rcp8.5/day/snow/Snow_FORCING_CNRM-ALADIN53_CNRM-CERFACS-CNRM-CM5_RCP85_alp_2005080106_2100080106_daysum.nc +# https://climatedata.umr-cnrm.fr/public/dcsc/projects/DRIAS/ADAMONT2017/Alpes/IPSL-CM5A/WRF331F/rcp8.5/day/snow/Snow_FORCING_IPSL-INERIS-WRF331F_IPSL-IPSL-CM5A-MR_RCP85_alp_2005080106_2100080106_daysum.nc +# https://climatedata.umr-cnrm.fr/public/dcsc/projects/DRIAS/ADAMONT2017/Alpes/CNRM-CM5/RCA4/rcp8.5/day/snow/Snow_FORCING_SMHI-RCA4_CNRM-CERFACS-CNRM-CM5_RCP85_alp_2005080106_2100080106_daysum.nc +# https://climatedata.umr-cnrm.fr/public/dcsc/projects/DRIAS/ADAMONT2017/Alpes/EC-EARTH/RCA4/rcp8.5/day/snow/Snow_FORCING_SMHI-RCA4_ICHEC-EC-EARTH_RCP85_alp_2005080106_2100080106_daysum.nc +# https://climatedata.umr-cnrm.fr/public/dcsc/projects/DRIAS/ADAMONT2017/Alpes/MOHC-HadGEM2/RCA4/rcp8.5/day/snow/Snow_FORCING_SMHI-RCA4_MOHC-HadGEM2-ES_RCP85_alp_2005080106_2099080106_daysum.nc +# https://climatedata.umr-cnrm.fr/public/dcsc/projects/DRIAS/ADAMONT2017/Alpes/IPSL-CM5A/RCA4/rcp8.5/day/snow/Snow_FORCING_SMHI-RCA4_IPSL-IPSL-CM5A-MR_RCP85_alp_2005080106_2100080106_daysum.nc +# https://climatedata.umr-cnrm.fr/public/dcsc/projects/DRIAS/ADAMONT2017/Alpes/MPI-ESM-LR/RCA4/rcp8.5/day/snow/Snow_FORCING_SMHI-RCA4_MPI-M-MPI-ESM-LR_RCP85_alp_2005080106_2100080106_daysum.nc +# https://climatedata.umr-cnrm.fr/public/dcsc/projects/DRIAS/ADAMONT2017/Alpes/MOHC-HadGEM2/RACMO22E/rcp8.5/day/snow/Snow_FORCING_KNMI-RACMO22E_MOHC-HadGEM2-ES_RCP85_alp_2005080106_2099080106_daysum.nc +# https://climatedata.umr-cnrm.fr/public/dcsc/projects/DRIAS/ADAMONT2017/Alpes/CNRM-CM5/CCLM4-8-17/rcp8.5/day/snow/Snow_FORCING_CLMcom-CCLM4-8-17_CNRM-CERFACS-CNRM-CM5_RCP85_alp_2005080106_2100080106_daysum.nc +# https://climatedata.umr-cnrm.fr/public/dcsc/projects/DRIAS/ADAMONT2017/Alpes/EC-EARTH/CCLM4-8-17/rcp8.5/day/snow/Snow_FORCING_CLMcom-CCLM4-8-17_ICHEC-EC-EARTH_RCP85_alp_2005080106_2100080106_daysum.nc +# https://climatedata.umr-cnrm.fr/public/dcsc/projects/DRIAS/ADAMONT2017/Alpes/MOHC-HadGEM2/CCLM4-8-17/rcp8.5/day/snow/Snow_FORCING_CLMcom-CCLM4-8-17_MOHC-HadGEM2-ES_RCP85_alp_2005080106_2099080106_daysum.nc +# https://climatedata.umr-cnrm.fr/public/dcsc/projects/DRIAS/ADAMONT2017/Alpes/MPI-ESM-LR/CCLM4-8-17/rcp8.5/day/snow/Snow_FORCING_CLMcom-CCLM4-8-17_MPI-M-MPI-ESM-LR_RCP85_alp_2005080106_2100080106_daysum.nc +# https://climatedata.umr-cnrm.fr/public/dcsc/projects/DRIAS/ADAMONT2017/Alpes/MPI-ESM-LR/REMO019/rcp8.5/day/snow/Snow_FORCING_MPI-CSC-REMO2009_MPI-M-MPI-ESM-LR_RCP85_alp_2005080106_2100080106_daysum.nc +# https://climatedata.umr-cnrm.fr/public/dcsc/projects/DRIAS/ADAMONT2017/Alpes/NorESM1/HIRHAM5/rcp8.5/day/snow/Snow_FORCING_DMI-HIRHAM5_NCC-NorESM1-M_RCP85_alp_2005080106_2100080106_daysum.nc +# """ + +requests = """https://climatedata.umr-cnrm.fr/public/dcsc/projects/DRIAS/ADAMONT2017/Alpes/CNRM-CM5/ALADIN53/rcp4.5/day/snow/Snow_FORCING_CNRM-ALADIN53_CNRM-CERFACS-CNRM-CM5_RCP45_alp_2005080106_2100080106_daysum.nc +https://climatedata.umr-cnrm.fr/public/dcsc/projects/DRIAS/ADAMONT2017/Alpes/IPSL-CM5A/WRF331F/rcp4.5/day/snow/Snow_FORCING_IPSL-INERIS-WRF331F_IPSL-IPSL-CM5A-MR_RCP45_alp_2005080106_2100080106_daysum.nc +https://climatedata.umr-cnrm.fr/public/dcsc/projects/DRIAS/ADAMONT2017/Alpes/CNRM-CM5/RCA4/rcp4.5/day/snow/Snow_FORCING_SMHI-RCA4_CNRM-CERFACS-CNRM-CM5_RCP45_alp_2005080106_2100080106_daysum.nc +https://climatedata.umr-cnrm.fr/public/dcsc/projects/DRIAS/ADAMONT2017/Alpes/EC-EARTH/RCA4/rcp4.5/day/snow/Snow_FORCING_SMHI-RCA4_ICHEC-EC-EARTH_RCP45_alp_2005080106_2100080106_daysum.nc +https://climatedata.umr-cnrm.fr/public/dcsc/projects/DRIAS/ADAMONT2017/Alpes/MOHC-HadGEM2/RCA4/rcp4.5/day/snow/Snow_FORCING_SMHI-RCA4_MOHC-HadGEM2-ES_RCP45_alp_2005080106_2099080106_daysum.nc +https://climatedata.umr-cnrm.fr/public/dcsc/projects/DRIAS/ADAMONT2017/Alpes/IPSL-CM5A/RCA4/rcp4.5/day/snow/Snow_FORCING_SMHI-RCA4_IPSL-IPSL-CM5A-MR_RCP45_alp_2005080106_2100080106_daysum.nc +https://climatedata.umr-cnrm.fr/public/dcsc/projects/DRIAS/ADAMONT2017/Alpes/MPI-ESM-LR/RCA4/rcp4.5/day/snow/Snow_FORCING_SMHI-RCA4_MPI-M-MPI-ESM-LR_RCP45_alp_2005080106_2100080106_daysum.nc +https://climatedata.umr-cnrm.fr/public/dcsc/projects/DRIAS/ADAMONT2017/Alpes/MOHC-HadGEM2/RACMO22E/rcp4.5/day/snow/Snow_FORCING_KNMI-RACMO22E_MOHC-HadGEM2-ES_RCP45_alp_2005080106_2099080106_daysum.nc +https://climatedata.umr-cnrm.fr/public/dcsc/projects/DRIAS/ADAMONT2017/Alpes/CNRM-CM5/CCLM4-8-17/rcp4.5/day/snow/Snow_FORCING_CLMcom-CCLM4-8-17_CNRM-CERFACS-CNRM-CM5_RCP45_alp_2005080106_2100080106_daysum.nc +https://climatedata.umr-cnrm.fr/public/dcsc/projects/DRIAS/ADAMONT2017/Alpes/EC-EARTH/CCLM4-8-17/rcp4.5/day/snow/Snow_FORCING_CLMcom-CCLM4-8-17_ICHEC-EC-EARTH_RCP45_alp_2005080106_2100080106_daysum.nc +https://climatedata.umr-cnrm.fr/public/dcsc/projects/DRIAS/ADAMONT2017/Alpes/MOHC-HadGEM2/CCLM4-8-17/rcp4.5/day/snow/Snow_FORCING_CLMcom-CCLM4-8-17_MOHC-HadGEM2-ES_RCP45_alp_2005080106_2099080106_daysum.nc +https://climatedata.umr-cnrm.fr/public/dcsc/projects/DRIAS/ADAMONT2017/Alpes/MPI-ESM-LR/CCLM4-8-17/rcp4.5/day/snow/Snow_FORCING_CLMcom-CCLM4-8-17_MPI-M-MPI-ESM-LR_RCP45_alp_2005080106_2100080106_daysum.nc +https://climatedata.umr-cnrm.fr/public/dcsc/projects/DRIAS/ADAMONT2017/Alpes/MPI-ESM-LR/REMO019/rcp4.5/day/snow/Snow_FORCING_MPI-CSC-REMO2009_MPI-M-MPI-ESM-LR_RCP45_alp_2005080106_2100080106_daysum.nc +https://climatedata.umr-cnrm.fr/public/dcsc/projects/DRIAS/ADAMONT2017/Alpes/NorESM1/HIRHAM5/rcp4.5/day/snow/Snow_FORCING_DMI-HIRHAM5_NCC-NorESM1-M_RCP45_alp_2005080106_2100080106_daysum.nc""" + +# requests = """https://climatedata.umr-cnrm.fr/public/dcsc/projects/DRIAS/ADAMONT2017/Alpes/CNRM-CM5/ALADIN53/historical/day/snowswe/SNOWSWE_PRO_CNRM-ALADIN53_CNRM-CERFACS-CNRM-CM5_HISTO_alp_1950080106_2005073106_6h.nc +# https://climatedata.umr-cnrm.fr/public/dcsc/projects/DRIAS/ADAMONT2017/Alpes/IPSL-CM5A/WRF331F/historical/day/snowswe/SNOWSWE_PRO_IPSL-INERIS-WRF331F_IPSL-IPSL-CM5A-MR_HISTO_alp_1951080106_2005073106_6h.nc +# https://climatedata.umr-cnrm.fr/public/dcsc/projects/DRIAS/ADAMONT2017/Alpes/CNRM-CM5/RCA4/historical/day/snowswe/SNOWSWE_PRO_SMHI-RCA4_CNRM-CERFACS-CNRM-CM5_HISTO_alp_1970080106_2005073106_6h.nc +# https://climatedata.umr-cnrm.fr/public/dcsc/projects/DRIAS/ADAMONT2017/Alpes/EC-EARTH/RCA4/historical/day/snowswe/SNOWSWE_PRO_SMHI-RCA4_ICHEC-EC-EARTH_HISTO_alp_1970080106_2005073106_6h.nc +# https://climatedata.umr-cnrm.fr/public/dcsc/projects/DRIAS/ADAMONT2017/Alpes/MOHC-HadGEM2/RCA4/historical/day/snowswe/SNOWSWE_PRO_SMHI-RCA4_MOHC-HadGEM2-ES_HISTO_alp_1981080106_2005073106_6h.nc +# https://climatedata.umr-cnrm.fr/public/dcsc/projects/DRIAS/ADAMONT2017/Alpes/IPSL-CM5A/RCA4/historical/day/snowswe/SNOWSWE_PRO_SMHI-RCA4_IPSL-IPSL-CM5A-MR_HISTO_alp_1970080106_2005073106_6h.nc +# https://climatedata.umr-cnrm.fr/public/dcsc/projects/DRIAS/ADAMONT2017/Alpes/MPI-ESM-LR/RCA4/historical/day/snowswe/SNOWSWE_PRO_SMHI-RCA4_MPI-M-MPI-ESM-LR_HISTO_alp_1970080106_2005073106_6h.nc +# https://climatedata.umr-cnrm.fr/public/dcsc/projects/DRIAS/ADAMONT2017/Alpes/MOHC-HadGEM2/RACMO22E/historical/day/snowswe/SNOWSWE_PRO_KNMI-RACMO22E_MOHC-HadGEM2-ES_HISTO_alp_1981080106_2005073106_6h.nc +# https://climatedata.umr-cnrm.fr/public/dcsc/projects/DRIAS/ADAMONT2017/Alpes/CNRM-CM5/CCLM4-8-17/historical/day/snowswe/SNOWSWE_PRO_CLMcom-CCLM4-8-17_CNRM-CERFACS-CNRM-CM5_HISTO_alp_1950080106_2005073106_6h.nc +# https://climatedata.umr-cnrm.fr/public/dcsc/projects/DRIAS/ADAMONT2017/Alpes/EC-EARTH/CCLM4-8-17/historical/day/snowswe/SNOWSWE_PRO_CLMcom-CCLM4-8-17_ICHEC-EC-EARTH_HISTO_alp_1950080106_2005073106_6h.nc +# https://climatedata.umr-cnrm.fr/public/dcsc/projects/DRIAS/ADAMONT2017/Alpes/MOHC-HadGEM2/CCLM4-8-17/historical/day/snowswe/SNOWSWE_PRO_CLMcom-CCLM4-8-17_MOHC-HadGEM2-ES_HISTO_alp_1981080106_2005073106_6h.nc +# https://climatedata.umr-cnrm.fr/public/dcsc/projects/DRIAS/ADAMONT2017/Alpes/MPI-ESM-LR/CCLM4-8-17/historical/day/snowswe/SNOWSWE_PRO_CLMcom-CCLM4-8-17_MPI-M-MPI-ESM-LR_HISTO_alp_1950080106_2005073106_6h.nc +# https://climatedata.umr-cnrm.fr/public/dcsc/projects/DRIAS/ADAMONT2017/Alpes/MPI-ESM-LR/REMO019/historical/day/snowswe/SNOWSWE_PRO_MPI-CSC-REMO2009_MPI-M-MPI-ESM-LR_HISTO_alp_1950080106_2005073106_6h.nc +# https://climatedata.umr-cnrm.fr/public/dcsc/projects/DRIAS/ADAMONT2017/Alpes/NorESM1/HIRHAM5/historical/day/snowswe/SNOWSWE_PRO_DMI-HIRHAM5_NCC-NorESM1-M_HISTO_alp_1951080106_2005073106_6h.nc +# """ + +for request in requests.split('\n')[:]: + command_line = 'wget {}'.format(request) + print(command_line) + subprocess.run(command_line, shell=True) \ No newline at end of file diff --git a/extreme_data/meteo_france_data/adamont_data/utils/utils.py b/extreme_data/meteo_france_data/adamont_data/utils/utils.py new file mode 100644 index 0000000000000000000000000000000000000000..a1fceb85eea62a1382366a9a33c8be8e62a8b7d0 --- /dev/null +++ b/extreme_data/meteo_france_data/adamont_data/utils/utils.py @@ -0,0 +1,33 @@ +from enum import Enum + + +def _massif_number_to_massif_name(): + # from adamont_data metadata + s = """1 Chablais + 2 Aravis + 3 Mont-Blanc + 4 Bauges + 5 Beaufortain + 6 Haute-Tarentaise + 7 Chartreuse + 8 Belledonne + 9 Maurienne + 10 Vanoise + 11 Haute-Maurienne + 12 Grandes-Rousses + 13 Thabor + 14 Vercors + 15 Oisans + 16 Pelvoux + 17 Queyras + 18 Devoluy + 19 Champsaur + 20 Parpaillon + 21 Ubaye + 22 Haut_Var-Haut_Verdon + 23 Mercantour""" + l = s.split('\n') + return {int(k): m for k, m in dict([e.split() for e in l]).items()} + + +massif_number_to_massif_name = _massif_number_to_massif_name() diff --git a/extreme_data/meteo_france_data/scm_models_data/abstract_study.py b/extreme_data/meteo_france_data/scm_models_data/abstract_study.py index c3bf33a42519e7c1385e7178bf526d3dff73f3b0..24432d063fd0c4c7b2bdf808420a8db526e43794 100644 --- a/extreme_data/meteo_france_data/scm_models_data/abstract_study.py +++ b/extreme_data/meteo_france_data/scm_models_data/abstract_study.py @@ -1,5 +1,4 @@ import datetime -from enum import Enum from matplotlib.lines import Line2D import io diff --git a/extreme_data/meteo_france_data/scm_models_data/utils.py b/extreme_data/meteo_france_data/scm_models_data/utils.py index 0502267efe9fb99f7d435f740cd2c100b2e97b41..bbde7b7d48cbe95cfeddd9a9d4a42347c2e60e87 100644 --- a/extreme_data/meteo_france_data/scm_models_data/utils.py +++ b/extreme_data/meteo_france_data/scm_models_data/utils.py @@ -36,6 +36,13 @@ class FrenchRegion(Enum): pyrenees = 2 +def french_region_to_str(french_region): + if french_region is FrenchRegion.alps: + return 'alp' + else: + raise NotImplementedError() + + season_to_start_day_and_last_day = { Season.annual: ('08-01', '07-31'), Season.winter_extended: ('11-01', '05-31'), diff --git a/extreme_data/meteo_france_data/scm_models_data/visualization/main_study_visualizer.py b/extreme_data/meteo_france_data/scm_models_data/visualization/main_study_visualizer.py index b67ca98fc9692eb89e6cc57a9bb74ccdd652428d..f5bd8d100be8d135220e6c8c6838dfb48de64eb0 100644 --- a/extreme_data/meteo_france_data/scm_models_data/visualization/main_study_visualizer.py +++ b/extreme_data/meteo_france_data/scm_models_data/visualization/main_study_visualizer.py @@ -2,7 +2,7 @@ import time from collections import OrderedDict from typing import List -from extreme_data.meteo_france_data.adamont_data.snowfall_simulation import SafranSnowfallSimulationRCP85 +from extreme_data.meteo_france_data.adamont_data.adamont.adamont_snowfall import AdamontSnowfall from extreme_data.meteo_france_data.scm_models_data.abstract_study import AbstractStudy from extreme_data.meteo_france_data.scm_models_data.crocus.crocus import CrocusDepth, CrocusSweTotal, \ ExtendedCrocusDepth, \ @@ -57,7 +57,7 @@ SCM_STUDY_CLASS_TO_ABBREVIATION = { CrocusSnowDepthDifference: 'max HS - HS at max of GSL', CrocusSnowDepthAtMaxofSwe: 'HS at max of GSL', CrocusSnowDensity: 'Density', - SafranSnowfallSimulationRCP85: 'SF1 RCP85 projections', + SafranSnowfall: 'SF1 RCP85 projections', SafranDateFirstSnowfall: 'SF1 first date' } @@ -155,7 +155,7 @@ def extended_visualization(): def annual_mean_vizu_compare_durand_study(safran=True, take_mean_value=True, altitude=1800): if safran: - for study_class in [SafranPrecipitation, SafranRainfall, SafranSnowfall, SafranTemperature][-1:]: + for study_class in [SafranPrecipitation, SafranRainfall, AdamontSnowfall, SafranTemperature][-1:]: study = study_class(altitude=altitude, year_min=1958, year_max=2001) study_visualizer = StudyVisualizer(study) study_visualizer.visualize_annual_mean_values(take_mean_value=True) @@ -173,7 +173,7 @@ def all_normal_vizu(): def case_study(): - for study in study_iterator(study_class=SafranSnowfall, only_first_one=False, altitudes=[2100], + for study in study_iterator(study_class=AdamontSnowfall, only_first_one=False, altitudes=[2100], nb_consecutive_days=3): study_visualizer = StudyVisualizer(study, save_to_file=False, temporal_non_stationarity=False) study_visualizer.visualize_all_mean_and_max_graphs() diff --git a/projects/altitude_spatial_model/altitudes_fit/plots/plot_histogram_altitude_studies.py b/projects/altitude_spatial_model/altitudes_fit/plots/plot_histogram_altitude_studies.py index b49429882bcafcb7df591790caad083a8e1d8af7..7f1461ac0b7ccf0de76a5a4970e1fd3c34e48c95 100644 --- a/projects/altitude_spatial_model/altitudes_fit/plots/plot_histogram_altitude_studies.py +++ b/projects/altitude_spatial_model/altitudes_fit/plots/plot_histogram_altitude_studies.py @@ -122,7 +122,8 @@ def plot_shoe_plot_changes_against_altitude(massif_names, visualizer_list: List[ all_changes = [v.all_changes(massif_names, relative=relative) for v in visualizer_list] all_changes = list(zip(*all_changes)) - labels = ['All models', 'Temporally non-stationary models', 'Temporally non-stationary models which are significant'] + labels = ['All models', 'Temporally non-stationary models', + 'Temporally non-stationary models which are significant'] colors = ['darkgreen', 'forestgreen', 'limegreen'] nb_massifs = [len(v.get_valid_names(massif_names)) for v in visualizer_list] @@ -134,7 +135,6 @@ def plot_shoe_plot_changes_against_altitude(massif_names, visualizer_list: List[ labelsize = 10 linewidth = 3 - x = np.array([4 * width * (i + 1) for i in range(len(nb_massifs))]) for j, (changes, label, color) in enumerate(list(zip(all_changes, labels, colors)), -1): positions = x + j * width diff --git a/projects/projection_snow_load/main_difference_between_reanalysis_and_simulations.py b/projects/projection_snow_load/main_difference_between_reanalysis_and_simulations.py index 40930a83fb70fe985b777758f21cf65b776e9538..d35eb536c88574885169ba12a0b3981192f8266d 100644 --- a/projects/projection_snow_load/main_difference_between_reanalysis_and_simulations.py +++ b/projects/projection_snow_load/main_difference_between_reanalysis_and_simulations.py @@ -1,4 +1,4 @@ -from extreme_data.meteo_france_data.adamont_data.ensemble_simulation import EnsembleSimulation +from extreme_data.meteo_france_data.adamont_data.deprecated.ensemble_simulation import EnsembleSimulation from extreme_data.meteo_france_data.scm_models_data.crocus.crocus import CrocusSnowLoad3Days, \ CrocusSweTotal from extreme_data.meteo_france_data.scm_models_data.visualization.study_visualizer import \ diff --git a/test/test_extreme_data/test_meteo_france_data/test_SCM_study.py b/test/test_extreme_data/test_meteo_france_data/test_SCM_study.py index f098eadea20552278960b2de69f65f9572c54342..de34379a7b6156c73f18f6795778002a2afbb368 100644 --- a/test/test_extreme_data/test_meteo_france_data/test_SCM_study.py +++ b/test/test_extreme_data/test_meteo_france_data/test_SCM_study.py @@ -5,7 +5,7 @@ from random import sample import pandas as pd -from extreme_data.meteo_france_data.adamont_data.abstract_simulation_study import SimulationStudy +from extreme_data.meteo_france_data.adamont_data.abstract_adamont_study import AbstractAdamontStudy from extreme_data.meteo_france_data.scm_models_data.crocus.crocus import CrocusSnowLoad3Days from extreme_data.meteo_france_data.scm_models_data.safran.cumulated_study import NB_DAYS from extreme_data.meteo_france_data.scm_models_data.safran.safran import SafranSnowfall, SafranTemperature, \ @@ -64,9 +64,7 @@ class TestSCMAllStudy(unittest.TestCase): def test_variables(self): for study_class in SCM_STUDY_CLASS_TO_ABBREVIATION.keys(): study = study_class(year_max=1959) - if not issubclass(study_class, SimulationStudy): - print(study_class) - _ = study.year_to_annual_maxima[1959] + _ = study.year_to_annual_maxima[1959] self.assertTrue(True) diff --git a/test/test_extreme_data/test_meteo_france_data/test_adamont_study.py b/test/test_extreme_data/test_meteo_france_data/test_adamont_study.py index 4f72286be42c8d1f92c015aefb786106fc7d8fc9..d72ae3c95a754890b0168b1bd0a699d92d93d16e 100644 --- a/test/test_extreme_data/test_meteo_france_data/test_adamont_study.py +++ b/test/test_extreme_data/test_meteo_france_data/test_adamont_study.py @@ -1,13 +1,26 @@ import unittest -from extreme_data.meteo_france_data.adamont_data.snowfall_simulation import SafranSnowfallSimulationRCP85 +from extreme_data.meteo_france_data.adamont_data.adamont_scenario import AdamontScenario, gcm_rcm_couple_to_full_name +from extreme_data.meteo_france_data.adamont_data.adamont.adamont_snowfall import AdamontSnowfall class TestAdamontStudy(unittest.TestCase): - def test_year_to_date(self): - study = SafranSnowfallSimulationRCP85(altitude=900) + def test_load_adamont_snowfall(self): + study_list = [ + AdamontSnowfall(altitude=900), + AdamontSnowfall(altitude=1800) + ] + study_list.extend([AdamontSnowfall(altitude=900, scenario=AdamontScenario.rcp45), + AdamontSnowfall(altitude=900, scenario=AdamontScenario.rcp85)]) + study_list.extend([AdamontSnowfall(altitude=900, gcm_rcm_couple=gcm_rcm_couple) + for gcm_rcm_couple in gcm_rcm_couple_to_full_name.keys()]) + for study in study_list: + annual_maxima_for_year_min = study.year_to_annual_maxima[study.year_min] + # print(study.altitude, study.scenario_name, study.gcm_rcm_couple) + # print(annual_maxima_for_year_min) self.assertTrue(True) + if __name__ == '__main__': - unittest.main() \ No newline at end of file + unittest.main()