S.Sénési for Météo-France - sept 2019 to march 2021
import sys
import json
from IPython.core.display import display, HTML, Image
display(HTML("<style>.container { width:100% !important; }</style>"))
preferred_grids={ "GFDL-CM4":"gr1"}
preferred_variants={ }
preferred_versions={ }
piControl_period={
"CESM2-WACCM":"0001-0499",
"CNRM-ESM2-1":"1850-2349",
"GFDL-ESM4":"0001-0500",
"IPSL-CM6A-LR" : "1850-3049",
"GFDL-CM4":"0151-0650",
}
def basic_data_versions(variable,models) :
variables=[variable]
experiments=["historical","ssp126","ssp245","ssp585"]
#
data_versions=dict()
for model in models :
grid=preferred_grids.get(model,"g*")
variant=preferred_variants.get(model,"r1i1p1f*")
version=preferred_versions.get(model,"latest")
for variable in variables :
# For SSPs, do not include the period
quadruplet=(grid,variant,version,"*")
for exp in experiments :
feed_dic(data_versions,quadruplet,exp,variable,model)
# For piControl, do include the period
quadruplet=(grid,variant,version,piControl_period[model])
feed_dic(data_versions,quadruplet,"piControl",variable,model)
return data_versions
def write_versions_dic(d,tag) :
jsfile="Data_versions_selection_%s.json"%tag
with open(jsfile,"w") as f :
json.dump(d,f,separators=(',', ': '),indent=3,ensure_ascii=True)
print "Data versions dictionnary written as "+jsfile
models=piControl_period.keys()
d=basic_data_versions("pr",models)
write_versions_dic(d,"5models")
# Use original per experiment dict and merge all models
models_to_plot_by_var={
"ssp585": ["BCC-CSM2-MR", "CAMS-CSM1-0","CanESM5", "CNRM-ESM2-1",
"IPSL-CM6A-LR",
"MIROC-ES2L","MIROC6", "UKESM1-0-LL","MRI-ESM2-0",
"CESM2","CESM2-WACCM", "GFDL-CM4","GFDL-ESM4"],
"ssp245": ["BCC-CSM2-MR", "CAMS-CSM1-0","CanESM5", "CNRM-ESM2-1",
"IPSL-CM6A-LR",
"MIROC-ES2L","MIROC6", "UKESM1-0-LL","MRI-ESM2-0", "HadGEM3-GC31-LL",
"CESM2","CESM2-WACCM", "GFDL-CM4","GFDL-ESM4"],
"ssp126": ["BCC-CSM2-MR", "CAMS-CSM1-0","CanESM5", "CNRM-ESM2-1",
"IPSL-CM6A-LR",
"MIROC-ES2L","MIROC6","UKESM1-0-LL","MRI-ESM2-0",
"CESM2","CESM2-WACCM", "GFDL-ESM4"],
}
# Merge model names across SSPs in all_models
ens=set()
for e in models_to_plot_by_var :
for m in models_to_plot_by_var[e] :
ens.add(m)
all_models=list(ens)
all_models.sort()
# Read dictionnary used for the february 2019 version of the figure
full_dic=read_versions_dictionnary("20200219","./")
# Feed a dictionnary with same content, but restricted to models in all_models
short_dic=dict()
for m in all_models :
for exp in ["ssp126","ssp245","ssp585", "piControl","historical"] :
try :
feed_dic(short_dic,full_dic[exp]["evspsbl"][m],exp,"evspsbl",m)
except :
print "No entry for %s and %s"%(exp,m)
write_versions_dic(short_dic,"20200219_short_ssp585_evspsbl")