Zum Inhalt

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')