S.Sénési for Météo-France - sept 2019 to march 2021
experiments=["historical","ssp126","ssp245","ssp585","ssp119"]
#experiments=["piControl","historical","ssp126","ssp245","ssp585","ssp119"]
#experiments=["ssp126"]#,"ssp245","ssp585","ssp119"]
variables={
"Amon": ["pr","tas","prw","evspsbl"],
"Lmon": ["mrro","mrso","mrsos"],
"Omon": ["sos"],
"yr" : ["dday","drain"]
#"day" : ["pr"]
}
# Which field statistics and tme statistics should be computed (CDO syntax)
fld_stats=[ "fldpctl,5", "fldpctl,50", "fldpctl,95"]
tim_stats=[ "timmean"]
excluded_models = []
included_models = None # If this is a list, only listed models will be used
data_versions_tag = "20200918_plus_derived"
data_versions_dir = "/data/ssenesi/CAMMAC/data/select_data_versions"
# Define location of derived variables (yearly stats of daily precip)
derived_variables_pattern = "/data/ssenesi/CMIP6_derived_variables/${variable}"
derived_variables_pattern += "/${variable}_${table}_${model}_${experiment}_${realization}_${grid}_${version}_${PERIOD}.nc"
do_test=True
if do_test :
experiments=["historical","ssp126"]
#experiments=["ssp245"]
#experiments=["piControl"]
#variables={"Amon": ["pr"]}
#fld_stats=[ "fldpctl,50"]
#tim_stats=[ "timmean"]
included_models= ["CNRM-CM6-1"]
from IPython.core.display import display, HTML, Image
display(HTML("<style>.container { width:100% !important; }</style>"))
import requests # use pip or conda to install it if needed
import json
import glob
import re
import os
import sys
from CAMMAClib.ancillary import feed_dic, amail
from CAMMAClib.mips_et_al import table_for_var_and_experiment, project_for_experiment, project_for_model,\
institute_for_model, mip_for_experiment, models_for_experiments, models_for_experiments_multi_var, \
read_versions_dictionnary
from climaf.api import *
from climaf.period import firstyears
# Load some user settings, if available
settings_file=os.getenv("CAMMAC_USER_PYTHON_CODE_DIR",".")+'/cammac_user_settings.py'
if os.path.exists(settings_file) :
exec(compile(open(settings_file).read(),settings_file,'exec'))
def period_of_experiment(experiment,dperiod):
if experiment[0:3]=="ssp" : return "2081-2100"
if experiment=="historical": return "1995-2014"
if experiment=="piControl" : return firstyears(dperiod,100)
raise ValueError("Cannot handle exeriment %s"%experiment)
data_versions=read_versions_dictionnary(data_versions_tag, data_versions_dir)
stats=dict()
models=set()
deep=False
do_print=True
# Compute stats and oragnize dict as :
# stats[table][variable][experiment][tsat][fstat][model]
for experiment in experiments :
for table in variables :
for variable in variables[table] :
if do_print :
print experiment,table,variable,
models_variants=models_for_experiments_multi_var(data_versions,[(variable,table)],[experiment],excluded_models,included_models)
#print table,variable, models_variants
for model,variant in models_variants :
if do_print : print model,
project="CMIP6"
#print experiment,table,variable,model,variant
grid,version,dperiod=data_versions[experiment][variable][table][model][variant]
base_dict=dict(project=project, experiment=experiment,
model=model, institute=institute_for_model(model),
period=period_of_experiment(experiment,dperiod), variable=variable, table=table,
version=version, grid=grid,realization=variant)
#
# Compute stats
for fstat in fld_stats :
for tstat in tim_stats :
if table != "Lmon" :
sfield=ccdo(ds(**base_dict),operator="%s -%s"%(tstat,fstat))
else:
sftlf_dict=base_dict.copy()
sftlf_dict.update(experiment="piControl", mip="CMIP",table="fx",period="fx",variable="sftlf")
sftlf=ds(**sftlf_dict)
cfile(sftlf,deep=deep)
#print sftlf.baseFiles()
#print ds(**base_dict).baseFiles()
sfield=ccdo2_flip(ds(**base_dict),sftlf,operator="%s -%s -ifthen -setvrange,100,110"%(tstat,fstat))
feed_dic(stats,cvalue(sfield,deep=deep),table,variable,experiment,tstat,fstat,model)
cdrop(sfield)
models.add(model)
if do_print : print
models=list(models)
models.sort()
for table in sorted(stats.keys()):
for variable in variables[table] :
for tstat in tim_stats:
print "\n",table,variable,tstat
print 50*"-"
print "%21s "%(21*" "),
for experiment in experiments :
print "|",
print "%-10s"%experiment,
for fld_stat in fld_stats[0:-1] :
print "%9s "%(9*" "),
print
print "%21s "%(21*" "),
for experiment in experiments :
print "|",
for fld_stat in fld_stats :
l=len(fld_stat)
if l > 9 : f=fld_stat[l-9:]
else : f=fld_stat
print "%9s "%f,
print
for model in models :
print "%-20s "%model,
for experiment in experiments :
print "|",
d=stats[table][variable][experiment][tstat]
for fld_stat in fld_stats :
if model in d[fld_stat]:
print "%9.2e "%d[fld_stat][model],
else:
print "%9s "%(9*" "),
print
print
#stats