An error occurred while loading the file. Please try again.
-
unknown authored9c6d0581
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
from enum import Enum
from extreme_data.meteo_france_data.adamont_data.adamont_gcm_rcm_couples import get_gcm_rcm_couple_adamont_to_full_name
SEPARATOR_STR = ' / '
class AdamontScenario(Enum):
histo = 0
rcp26 = 1
rcp45 = 2
rcp85 = 3
rcp26_extended = 4
rcp45_extended = 5
rcp85_extended = 6
adamont_scenarios_real = [AdamontScenario.histo, AdamontScenario.rcp26, AdamontScenario.rcp45, AdamontScenario.rcp85]
rcp_scenarios = [AdamontScenario.rcp26, AdamontScenario.rcp45, AdamontScenario.rcp85]
rcm_scenarios_extended = [AdamontScenario.rcp26_extended, AdamontScenario.rcp45_extended,
AdamontScenario.rcp85_extended]
def get_linestyle_from_scenario(adamont_scenario):
assert isinstance(adamont_scenario, AdamontScenario)
if adamont_scenario is AdamontScenario.rcp26:
return 'dashed'
elif adamont_scenario is AdamontScenario.rcp45:
return 'dashdot'
elif adamont_scenario is AdamontScenario.rcp85:
return 'dotted'
else:
return 'solid'
def get_year_min_and_year_max_from_scenario(adamont_scenario, gcm_rcm_couple):
assert isinstance(adamont_scenario, AdamontScenario)
year_min = get_year_min(adamont_scenario, gcm_rcm_couple)
year_max = get_year_max(adamont_scenario, gcm_rcm_couple)
return year_min, year_max
def get_year_max(adamont_scenario, gcm_rcm_couple):
real_adamont_scenarios = scenario_to_real_scenarios(adamont_scenario)
gcm, rcm = gcm_rcm_couple
if any([scenario is not AdamontScenario.histo for scenario in real_adamont_scenarios]):
if gcm == 'HadGEM2-ES':
year_max = 2099
else:
year_max = 2100
else:
year_max = 2005
return year_max
def get_year_min(adamont_scenario, gcm_rcm_couple):
real_adamont_scenarios = scenario_to_real_scenarios(adamont_scenario)
gcm, rcm = gcm_rcm_couple
if AdamontScenario.histo in real_adamont_scenarios:
if gcm == 'HadGEM2-ES':
year_min = 1982
elif rcm == 'RCA4':
year_min = 1971
elif gcm_rcm_couple in [('NorESM1-M', 'HIRHAM5'), ('IPSL-CM5A-MR', 'WRF331F'), ('CNRM-CM5', 'ALADIN63'),
('IPSL-CM5A-MR', 'WRF381P')]:
year_min = 1952
else:
year_min = 1951
else:
year_min = 2006
return year_min
def get_gcm_rcm_couples(adamont_scenario=AdamontScenario.histo, adamont_version=2):
# Get real scenario
real_adamont_scenario = scenario_to_real_scenarios(adamont_scenario)[-1]
# Remove some couples for each scenario for ADAMONT v2
gcm_rcm_couples = list(get_gcm_rcm_couple_adamont_to_full_name(adamont_version=adamont_version).keys())
if adamont_version == 1:
if real_adamont_scenario is AdamontScenario.rcp26:
gcm_rcm_couples = []
if adamont_version == 2:
scenario_to_list_to_remove = {
AdamontScenario.histo: [],
AdamontScenario.rcp26: [('EC-EARTH', 'CCLM4-8-17'), ('CNRM-CM5', 'ALADIN53'), ('CNRM-CM5', 'RCA4'),
('MPI-ESM-LR', 'RCA4'), ('HadGEM2-ES', 'CCLM4-8-17'), ('IPSL-CM5A-MR', 'RCA4'),
('CNRM-CM5', 'CCLM4-8-17'), ('IPSL-CM5A-MR', 'WRF381P'), ('NorESM1-M', 'HIRHAM5'),
('IPSL-CM5A-MR', 'WRF331F'), ('HadGEM2-ES', 'RCA4')],
AdamontScenario.rcp45: [('NorESM1-M', 'REMO2015'), ('HadGEM2-ES', 'RegCM4-6')],
AdamontScenario.rcp85: [],
}
for couple_to_remove in scenario_to_list_to_remove[real_adamont_scenario]:
gcm_rcm_couples.remove(couple_to_remove)
return list(gcm_rcm_couples)
def get_gcm_list(adamont_version):
s = set([gcm for gcm, _ in get_gcm_rcm_couples(adamont_version=adamont_version)])
return list(s)
def get_suffix_for_the_nc_file(adamont_scenario, gcm_rcm_couple):
assert isinstance(adamont_scenario, AdamontScenario)
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 '+'.join([str(real_adamont_scenario).split('.')[-1].upper()
for real_adamont_scenario in scenario_to_real_scenarios(adamont_scenario)])
def str_to_scenario(str_scenario):
if '26' in str_scenario:
return AdamontScenario.rcp26
elif '45' in str_scenario:
return AdamontScenario.rcp45
elif '85' in str_scenario:
return AdamontScenario.rcp85
elif 'HISTO' in str_scenario:
raise NotImplementedError('No global temperatures defined for histo')
else:
raise NotImplementedError(str_scenario)
def scenario_to_real_scenarios(adamont_scenario):
if adamont_scenario in adamont_scenarios_real:
return [adamont_scenario]
else:
if adamont_scenario is AdamontScenario.rcp85_extended:
return [AdamontScenario.histo, AdamontScenario.rcp85]
elif adamont_scenario is AdamontScenario.rcp45_extended:
return [AdamontScenario.histo, AdamontScenario.rcp45]
elif adamont_scenario is AdamontScenario.rcp26_extended:
return [AdamontScenario.histo, AdamontScenario.rcp26]
else:
raise NotImplementedError
def gcm_rcm_couple_to_str(gcm_rcm_couple):
return SEPARATOR_STR.join(gcm_rcm_couple)