diff --git a/extreme_data/meteo_france_data/adamont_data/get_list_gcm_rcm_couples_adamont_v2.py b/extreme_data/meteo_france_data/adamont_data/get_list_gcm_rcm_couples_adamont_v2.py new file mode 100644 index 0000000000000000000000000000000000000000..e46fafbc73b67d81c0b52c62d733cb3cafbaea78 --- /dev/null +++ b/extreme_data/meteo_france_data/adamont_data/get_list_gcm_rcm_couples_adamont_v2.py @@ -0,0 +1,117 @@ + +links = """ +CLMcom-CCLM4-8-17_CNRM-CERFACS-CNRM-CM5_HISTORICAL/ +CLMcom-CCLM4-8-17_CNRM-CERFACS-CNRM-CM5_RCP45/ +CLMcom-CCLM4-8-17_CNRM-CERFACS-CNRM-CM5_RCP85/ +CLMcom-CCLM4-8-17_ICHEC-EC-EARTH_HISTORICAL/ +CLMcom-CCLM4-8-17_ICHEC-EC-EARTH_RCP45/ +CLMcom-CCLM4-8-17_ICHEC-EC-EARTH_RCP85/ +CLMcom-CCLM4-8-17_MOHC-HadGEM2-ES_HISTORICAL/ +CLMcom-CCLM4-8-17_MOHC-HadGEM2-ES_RCP45/ +CLMcom-CCLM4-8-17_MOHC-HadGEM2-ES_RCP85/ +CLMcom-CCLM4-8-17_MPI-M-MPI-ESM-LR_HISTORICAL/ +CLMcom-CCLM4-8-17_MPI-M-MPI-ESM-LR_RCP26/ +CLMcom-CCLM4-8-17_MPI-M-MPI-ESM-LR_RCP45/ +CLMcom-CCLM4-8-17_MPI-M-MPI-ESM-LR_RCP85/ +CNRM-ALADIN53_CNRM-CERFACS-CNRM-CM5_HISTORICAL/ +CNRM-ALADIN53_CNRM-CERFACS-CNRM-CM5_RCP45/ +CNRM-ALADIN53_CNRM-CERFACS-CNRM-CM5_RCP85/ +CNRM-ALADIN62_ECMWF-ERAINT_HISTORICAL/ +CNRM-ALADIN63_CNRM-CERFACS-CNRM-CM5_HISTORICAL/ +CNRM-ALADIN63_CNRM-CERFACS-CNRM-CM5_RCP26/ +CNRM-ALADIN63_CNRM-CERFACS-CNRM-CM5_RCP45/ +CNRM-ALADIN63_CNRM-CERFACS-CNRM-CM5_RCP85/ +DMI-HIRHAM5_NCC-NorESM1-M_HISTORICAL/ +DMI-HIRHAM5_NCC-NorESM1-M_RCP45/ +DMI-HIRHAM5_NCC-NorESM1-M_RCP85/ +GERICS-REMO2015_NCC-NorESM1-M_HISTORICAL/ +GERICS-REMO2015_NCC-NorESM1-M_RCP26/ +GERICS-REMO2015_NCC-NorESM1-M_RCP85/ +ICTP-RegCM4-6_MOHC-HadGEM2-ES_HISTORICAL/ +ICTP-RegCM4-6_MOHC-HadGEM2-ES_RCP26/ +ICTP-RegCM4-6_MOHC-HadGEM2-ES_RCP85/ +IPSL-INERIS-WRF331F_IPSL-IPSL-CM5A-MR_HISTORICAL/ +IPSL-INERIS-WRF331F_IPSL-IPSL-CM5A-MR_RCP45/ +IPSL-INERIS-WRF331F_IPSL-IPSL-CM5A-MR_RCP85/ +IPSL-WRF381P_IPSL-IPSL-CM5A-MR_HISTORICAL/ +IPSL-WRF381P_IPSL-IPSL-CM5A-MR_RCP45/ +IPSL-WRF381P_IPSL-IPSL-CM5A-MR_RCP85/ +KNMI-RACMO22E_CNRM-CERFACS-CNRM-CM5_HISTORICAL/ +KNMI-RACMO22E_CNRM-CERFACS-CNRM-CM5_RCP26/ +KNMI-RACMO22E_CNRM-CERFACS-CNRM-CM5_RCP45/ +KNMI-RACMO22E_CNRM-CERFACS-CNRM-CM5_RCP85/ +KNMI-RACMO22E_ICHEC-EC-EARTH_HISTORICAL/ +KNMI-RACMO22E_ICHEC-EC-EARTH_RCP26/ +KNMI-RACMO22E_ICHEC-EC-EARTH_RCP45/ +KNMI-RACMO22E_ICHEC-EC-EARTH_RCP85/ +KNMI-RACMO22E_MOHC-HadGEM2-ES_HISTORICAL/ +KNMI-RACMO22E_MOHC-HadGEM2-ES_RCP26/ +KNMI-RACMO22E_MOHC-HadGEM2-ES_RCP45/ +KNMI-RACMO22E_MOHC-HadGEM2-ES_RCP85/ +MPI-CSC-REMO2009_MPI-M-MPI-ESM-LR_HISTORICAL/ +MPI-CSC-REMO2009_MPI-M-MPI-ESM-LR_RCP26/ +MPI-CSC-REMO2009_MPI-M-MPI-ESM-LR_RCP45/ +MPI-CSC-REMO2009_MPI-M-MPI-ESM-LR_RCP85/ +SAFRAN_2019/ +SAFRAN_2020/ +SMHI-RCA4_CNRM-CERFACS-CNRM-CM5_HISTORICAL/ +SMHI-RCA4_CNRM-CERFACS-CNRM-CM5_RCP45/ +SMHI-RCA4_CNRM-CERFACS-CNRM-CM5_RCP85/ +SMHI-RCA4_ICHEC-EC-EARTH_HISTORICAL/ +SMHI-RCA4_ICHEC-EC-EARTH_RCP26/ +SMHI-RCA4_ICHEC-EC-EARTH_RCP45/ +SMHI-RCA4_ICHEC-EC-EARTH_RCP85/ +SMHI-RCA4_IPSL-IPSL-CM5A-MR_HISTORICAL/ +SMHI-RCA4_IPSL-IPSL-CM5A-MR_RCP45/ +SMHI-RCA4_IPSL-IPSL-CM5A-MR_RCP85/ +SMHI-RCA4_MOHC-HadGEM2-ES_HISTORICAL/ +SMHI-RCA4_MOHC-HadGEM2-ES_RCP45/ +SMHI-RCA4_MOHC-HadGEM2-ES_RCP85/ +SMHI-RCA4_MPI-M-MPI-ESM-LR_HISTORICAL/ +SMHI-RCA4_MPI-M-MPI-ESM-LR_RCP45/ +SMHI-RCA4_MPI-M-MPI-ESM-LR_RCP85/""" + +s = set() +for l in links.split('\n'): + print(l) + if '_' in l and 'SAFRAN' not in l: + gcm, rcm, _ = l.split('_') + s.add((gcm, rcm)) +print(len(s)) +for c in s: + print(c) + +""" +('SMHI-RCA4', 'ICHEC-EC-EARTH') +('CLMcom-CCLM4-8-17', 'CNRM-CERFACS-CNRM-CM5') +('SMHI-RCA4', 'MOHC-HadGEM2-ES') +('GERICS-REMO2015', 'NCC-NorESM1-M') +('CLMcom-CCLM4-8-17', 'MPI-M-MPI-ESM-LR') +('KNMI-RACMO22E', 'CNRM-CERFACS-CNRM-CM5') +('IPSL-WRF381P', 'IPSL-IPSL-CM5A-MR') +('MPI-CSC-REMO2009', 'MPI-M-MPI-ESM-LR') +('CNRM-ALADIN62', 'ECMWF-ERAINT') +('CLMcom-CCLM4-8-17', 'ICHEC-EC-EARTH') +('SMHI-RCA4', 'CNRM-CERFACS-CNRM-CM5') +('CNRM-ALADIN63', 'CNRM-CERFACS-CNRM-CM5') +('CLMcom-CCLM4-8-17', 'MOHC-HadGEM2-ES') +('CNRM-ALADIN53', 'CNRM-CERFACS-CNRM-CM5') +('KNMI-RACMO22E', 'ICHEC-EC-EARTH') +('SMHI-RCA4', 'MPI-M-MPI-ESM-LR') +('SMHI-RCA4', 'IPSL-IPSL-CM5A-MR') +('IPSL-INERIS-WRF331F', 'IPSL-IPSL-CM5A-MR') +('KNMI-RACMO22E', 'MOHC-HadGEM2-ES') +('DMI-HIRHAM5', 'NCC-NorESM1-M') +('ICTP-RegCM4-6', 'MOHC-HadGEM2-ES') + +""" + +def get_year_min_and_year_max_used_to_compute_quantile(rcm): + if rcm == 'MOHC-HadGEM2-ES': + reanalysis_years = (1988, 2011) + model_year = (1982, 2005) + else: + reanalysis_years = (1981, 2011) + model_year = (1975, 2005) + return reanalysis_years, model_year + diff --git a/projects/projected_snowfall/comparison_with_scm/main_comparison_on_quantile_period.py b/projects/projected_snowfall/comparison_with_scm/main_comparison_on_quantile_period.py new file mode 100644 index 0000000000000000000000000000000000000000..d3259716a44e7504ac2f6d2ef9fb3cd5c5100cbd --- /dev/null +++ b/projects/projected_snowfall/comparison_with_scm/main_comparison_on_quantile_period.py @@ -0,0 +1,81 @@ +import numpy as np +import matplotlib + +from extreme_data.meteo_france_data.adamont_data.adamont.adamont_snowfall import AdamontSnowfall +from extreme_data.meteo_france_data.adamont_data.adamont_scenario import AdamontScenario, gcm_rcm_couple_to_color, \ + gcm_rcm_couple_to_str +from extreme_data.meteo_france_data.scm_models_data.safran.safran_max_snowf import SafranSnowfall2020 +from extreme_data.meteo_france_data.adamont_data.get_list_gcm_rcm_couples_adamont_v2 import get_year_min_and_year_max_used_to_compute_quantile + +matplotlib.use('Agg') + +import matplotlib.pyplot as plt +from extreme_data.meteo_france_data.scm_models_data.visualization.main_study_visualizer import \ + STUDY_CLASS_TO_ABBREVIATION +from projects.altitude_spatial_model.altitudes_fit.altitudes_studies import AltitudesStudies + + +def compute_bias_and_display_it(ax, + altitude_studies_reanalysis: AltitudesStudies, + adamont_altitude_studies: AltitudesStudies, + gcm_rcm_couple + ): + bias_in_the_mean_maxima = [] + altitudes = [] + for altitude, study_reanalysis in altitude_studies_reanalysis.altitude_to_study.items(): + altitudes.append(altitude) + adamont_study = adamont_altitude_studies.altitude_to_study[altitude] + mean_maxima_adamont = adamont_study.mean_annual_maxima + mean_maxima_reanalysis = study_reanalysis.mean_annual_maxima + bias = mean_maxima_adamont - mean_maxima_reanalysis + bias_in_the_mean_maxima.append(bias) + + color = gcm_rcm_couple_to_color[gcm_rcm_couple] + label = gcm_rcm_couple_to_str(gcm_rcm_couple) + ax.plot(bias_in_the_mean_maxima, altitudes, label=label, color=color) + + return np.array(bias_in_the_mean_maxima) + + +def main_comparaison_plot(): + altitudes = [600, 900, 1200, 1500, 1800, 2100, 2400, 2700, 3000, 3300, 3600] + ax = plt.gca() + gcm_rcm_couples = [] + + bias_in_the_mean = [] + for gcm_rcm_couple in gcm_rcm_couples: + gcm, rcm = gcm_rcm_couple + years_reanalysis, years_model = get_year_min_and_year_max_used_to_compute_quantile(rcm) + reanalysis_altitude_studies = AltitudesStudies(study_class=SafranSnowfall2020, + altitudes=altitudes, + year_min=years_reanalysis[0], + year_max=years_reanalysis[1]) + adamont_altitude_studies = AltitudesStudies(study_class=AdamontSnowfall, + altitudes=altitudes, + year_min=years_model[0], + year_max=years_model[1], + scenario=AdamontScenario.histo, + gcm_rcm_couple=gcm_rcm_couple) + bias_in_the_mean.extend(compute_bias_and_display_it(ax, reanalysis_altitude_studies, + adamont_altitude_studies, gcm_rcm_couple)) + + bias_in_the_mean = np.array(bias_in_the_mean) + min_bias, median_bias, max_bias = [f(bias_in_the_mean, axis=0) for f in [np.min, np.median, np.max]] + + # Plot the range for the bias, and the median + ax.yaxis.set_ticks(altitudes) + color = 'k' + ax.plot(median_bias, altitudes, label='Median bias', color=color) + ax.fill_betweenx(altitudes, min_bias, max_bias, label='Range for the bias', alpha=0.2, color=color) + ax.vlines(0, ymin=altitudes[0], ymax=altitudes[-1], color='k') + study_str = STUDY_CLASS_TO_ABBREVIATION[type(reanalysis_altitude_studies.study)] + plot_name = 'Bias for {}\n' \ + '(on the period used for the quantile correction)'.format(study_str) + ax.set_ylim(top=altitudes[-1] + 500) + ax.legend() + reanalysis_altitude_studies.show_or_save_to_file(plot_name=plot_name) + plt.close() + + +if __name__ == '__main__': + main_comparaison_plot()