Modellwetter
Häufigkeitsverteilung von Großwetterlagen in Ensembles von Globalmodellen
Leseprobe¶
Mittels struktureller Bilderkennung wurden bekannte Atmosphärenfelder in Reanalysedaten mit unbekannten Atmosphärenfeldern in Klimasimulationen verglichen, um für jedem Tag im Klimamodell den ähnlichsten Tag in den Beobachtungen zuzuordnen. Der ähnlichste Tag bekommt dann die gleiche Großwetterlage zugeordnet, da sich die Zirkulationsformen stark ähneln.
Basierend darauf können globale Klimamodellsimulationen hinsichtlich der Großwetterlagen (also dynamischer Eigenschaften) bewertet werden. Die folgenden Charts zeigen mittlere Häufigkeitsverteilungen von Großwetterlagen in 5 verschiedenen Globalmodellen in der Historie (1971-2000, blau) und der Zukunft (2061-2090,rot).
Ergebnis¶
Gesamtjahr¶
Sommerhalbjahr¶
Code¶
Module
import numpy as N
import pylab as P
P.style.use('bmh')
params = {'font.family':'serif','legend.fontsize': 10}
P.rcParams.update(params)
Reading
dd0 = []
mm0 = []
jj0 = []
gg0 = []
for mod in ['NCEP-NCAR']:
file = '../dat/'+mod+'.dat'
tt=N.genfromtxt(file,usecols=(0),skip_header=0,delimiter=';',dtype="S")
gw=N.genfromtxt(file,usecols=(3),skip_header=0,delimiter=';',dtype="S")
nt = len(tt)
do = N.arange(1,31,1)
go = N.array(list(set(gw)))
for t in range(nt):
jj0.append(int(tt[t][0:4]))
mm0.append(int(tt[t][5:7]))
dd0.append(int(tt[t][8:10]))
gg0.append(gw[t])
dd0 = N.array(dd0)
mm0 = N.array(mm0)
jj0 = N.array(jj0)
gg0 = N.array(gg0)
gw0 = gg0
dd = []
mm = []
jj = []
gg = []
mods = ['MPI-ESM-LR','MIROC5','HadGEM2-ES','EC-EARTH','CNRM-CM5','NorESM1-M']
nm = len(mods)
for mod in mods:
#for mod in ['CanESM2']:
file = '../dat/'+mod+'.dat'
tt=N.genfromtxt(file,usecols=(0),skip_header=0,delimiter=';',dtype="S")
gw=N.genfromtxt(file,usecols=(3),skip_header=0,delimiter=';',dtype="S")
nt = len(tt)
do = N.arange(1,31,1)
go = N.array(list(set(gw)))
for t in range(nt):
jj.append(int(tt[t][0:4]))
mm.append(int(tt[t][5:7]))
dd.append(int(tt[t][8:10]))
gg.append(gw[t])
dd = N.array(dd)
mm = N.array(mm)
jj = N.array(jj)
gg = N.array(gg)
gw = gg
Options
jz = 'ja'; tit = 'Januar-Dezember'
#jz = 'so'; tit = 'April-September'
Plotting
P.figure(figsize=(9,4))
no = []
for ig in go:
if(jz=='ja'): ind = N.where((jj0>=1971)&(jj0<=2000)&(gw0==ig))[0]
if(jz=='so'): ind = N.where((jj0>=1971)&(jj0<=2000)&(gw0==ig)&(mm0>=4)&(mm0<=9))[0]
no.append(len(ind)/30.)
no = N.array(no)
imd = N.argsort(no)
imd = imd[::-1]
P.bar(do,no[imd],0.9,color='gray',alpha=0.5,edgecolor='k',label='NCEP-NCAR')
no = []
for ig in go:
if(jz=='ja'): ind = N.where((jj>=1971)&(jj<=2000)&(gw==ig))[0]
if(jz=='so'): ind = N.where((jj>=1971)&(jj<=2000)&(gw==ig)&(mm>=4)&(mm<=9))[0]
no.append(len(ind)/30.)
no = N.array(no)
#imd = N.argsort(no)
#imd = imd[::-1]
P.bar(do-0.15,no[imd]/float(nm),0.3,color='b',alpha=0.5,edgecolor='k',label='1971-2000')
no = []
for ig in go:
if(jz=='ja'): ind = N.where((jj>=2061)&(jj<=2090)&(gw==ig))[0]
if(jz=='so'): ind = N.where((jj>=2061)&(jj<=2090)&(gw==ig)&(mm>=4)&(mm<=9))[0]
no.append(len(ind)/30.)
no = N.array(no)
P.bar(do+0.15,no[imd]/float(nm),0.3,color='r',alpha=0.5,edgecolor='k',label='2061-2090')
P.legend(loc=0,shadow='True')
P.tick_params(direction='out')
P.xticks(do,go[imd],rotation=45,weight='bold',fontsize=8)
P.xlim(0,31)
P.ylabel('Haeufigkeit [Tage pro Jahr]',fontsize=14,weight='bold')
P.xlabel('Grosswetterlagen Europa',fontsize=18,weight='bold')
P.title(tit,fontsize=18,weight='bold')
P.savefig('./img/gwl_frequency_'+jz+'.png',dpi=240,bbox_inches='tight')