示例#1
0
def mean_year_gp(data):
    mean_gp = np.zeros((130, np.shape(data)[1], np.shape(data)[2]), 'f')
    year = np.arange(1971, 2101)
    day_month = np.array([31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31])
    end = 0
    for iyear in year:
        if (schaltjahr(iyear)):
            day_month[1] = 29
        else:
            day_month[1] = 28
        start = end
        end = sum(day_month) + end
        index = iyear - 1971
        mean_gp[index] = np.mean(data[start:end, :, :], axis=0)
    mean_gp = ct.niedersachsen(mean_gp)
    return (mean_gp)
示例#2
0
def extrem(data, o, v, ee):
    fm = ma.array(np.zeros((3, np.shape(data)[1], np.shape(data)[2]), 'f'))
    days_year = ma.array(
        np.zeros((130, np.shape(data)[1], np.shape(data)[2]), 'f'))
    year = np.arange(1971, 2101)
    spatial_mean = np.zeros((130), 'f')
    day_month = np.array([31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31])
    print(len(data))
    end = 0
    if (v == 'tas' or v == 'tasmin' or v == 'tasmax'):
        data += (-273.15)
    elif (v == 'pr'):
        data = data * 60 * 60 * 24
    # betrachte jedes jahr einzeln und rechne for this year extremereignisse aus
    for index, iyear in enumerate(year):
        if (schaltjahr(iyear)):
            day_month[1] = 29
        else:
            day_month[1] = 28

        start = end
        april = np.sum(day_month[0:3])
        sept = np.sum(day_month[0:8])
        end = np.sum(day_month) + end
        if ee == 'hp':
            days_year[index] = heatperiod(data[start:end, :, :])
        elif ee == 'vp':
            days_year[index] = vegetationsphase(data[start:end, :, :])
        elif ee == 'jm':
            days_year[index] = jahresmittel(data[start:end, :, :], v)
        elif ee == 'tp':
            days_year[index] = trockenperiode(data[start:end, :, :], april,
                                              sept)
        elif ee == 'ft':
            days_year[index] = frosttage(data[start:end, :, :], april)
        elif ee == 'sft':
            days_year[index] = speatfrost(data[start:end, :, :], april)
        print(index)

    if o == 'ts':
        # Ausgabe Zeitreihe mit yearly Werten
        # hier region wahlen, die man betrachten will
        # kann auch zeitreihe mit taeglichen werten ausgeben
        if ee == 'day':
            return (np.mean(np.mean(ct.niedersachsen(data), axis=1), axis=1))
        else:
            spatial_mean = np.mean(np.mean(ct.niedersachsen(days_year),
                                           axis=1),
                                   axis=1)
            return (spatial_mean)
    elif o == 'spat':
        # klimasignale ref, 21, 71
        for j in range(3):
            fm[j, :, :] = np.mean(ct.niedersachsen(
                days_year[(0 + j * 50):(30 + j * 50), :, :]),
                                  axis=0)

        if v == 'tas':
            fm[1, :, :] = fm[1, :, :] - fm[0, :, :]
            fm[2, :, :] = fm[2, :, :] - fm[0, :, :]
            #fm[0,:,:] = fm[0,:,:] - 273.15
            #fm = ct.niedersachsen(fm)
        elif v == 'pr':
            #fm[0,:,:] = fm[0,:,:]/12
            fm[1, :, :] = (fm[1, :, :] / fm[0, :, :] - 1) * 100
            fm[2, :, :] = (fm[2, :, :] / fm[0, :, :] - 1) * 100
            #fm[0,:,:] = fm[1,:,:]/fm[0,:,:]-1)*100
        return (fm)
    else:
        sys.exit('wrong option in extrem')
示例#3
0
def extrem(data, o, v, ee, jz):
    fm = ma.array(np.zeros((3,np.shape(data)[1],np.shape(data)[2]),'f'))
    days_year = ma.array(np.zeros((130,np.shape(data)[1],np.shape(data)[2]), 'f'))
    vp = ma.array(np.zeros((3,130,np.shape(data)[1],np.shape(data)[2]), 'f'))
    month = ma.array(np.zeros((130*12,np.shape(data)[1],np.shape(data)[2]), 'f'))
    monjz = ma.array(np.zeros((130*3,np.shape(data)[1],np.shape(data)[2]), 'f'))    
    spatial_mean = np.zeros((130), 'f')    
    if ( v == 'tas' or v == 'tasmin' or v == 'tasmax'):
        data += (-273.15)
    elif ( v == 'pr' ):
        data = data*60*60*24 
    ind = index_data(data,'day')  
    
    # betrachte jedes jahr einzeln und rechne for this year extremereignisse aus
    for i, iyear in enumerate(np.arange(1971,2101)):
        print(iyear)
        index=jz_index(jz,iyear,ind)
        if ee == 'wp':
            days_year[i] = heatperiod(data[index,:,:], 25)
        elif ee == 'hp':
            days_year[i] = heatperiod(data[index,:,:], 30)
        elif ee == 'vp':   
            days_year[i] = vegetationsphase(data[index,:,:])
        elif ee == 'vp2':   
            days_year[i] = vegetationsphase2(data[index,:,:])
        elif ee == 'st':   
            days_year[i] = countbigger(data[index,:,:], 25)
        elif ee == 'ht':
            days_year[i] = countbigger(data[index,:,:], 30)
        elif ee == 'tt':   
            days_year[i] = countsmaller(data[index,:,:], 1)
        elif ee == 'snt':
            days_year[i] = countbigger(data[index,:,:], 20)
        elif ee == 'jm':
            days_year[i] = jahresmittel(data[index,:,:], v)
        elif ee == 'tp':
            days_year[i] = trockenperiode(data[ind['{}-04'.format(iyear):'{}-08'.format(iyear)],:,:])
        elif ee == 'ft':
            days_year[i] = frosttage(data[ind['{}-01'.format(iyear):'{}-03'.format(iyear)],:,:],
                                     data[ind['{}-08'.format(iyear):'{}-12'.format(iyear)],:,:])
        elif ee == 'sft':    
            days_year[i] = countsmaller(data[ind['{}-04'.format(iyear):'{}-07'.format(iyear)],:,:],0)
        elif ee == 'month':
            for mon in range(12):
                month[mon+(i*12)] = jahresmittel(data[ind['{}-{}'.format(iyear,mon+1)],:,:],v)
        '''
        elif ee == 'djf':
            days_year[i] = jahresmittel(data[ind['{}-12'.format(iyear):'{}-02'.format(iyear+1)],:,:],v)
        elif ee == 'jja':
            days_year[i] = jahresmittel(data[ind['{}-06'.format(iyear):'{}-08'.format(iyear)],:,:],v)
        elif ee == 'mam':
            days_year[i] = jahresmittel(data[ind['{}-03'.format(iyear):'{}-05'.format(iyear)],:,:],v)
        elif ee == 'son':
            days_year[i] = jahresmittel(data[ind['{}-09'.format(iyear):'{}-11'.format(iyear)],:,:],v)
        '''
            
    if o == 'ts':
        # Ausgabe Zeitreihe mit yearly Werten
        # hier region wahlen, die man betrachten will
        # kann auch zeitreihe mit taeglichen werten ausgeben
        if ee == 'day':
            return(np.mean(np.mean(ct.niedersachsen(data),axis=1),axis=1))
        elif ee == 'month':
            return(np.mean(np.mean(ct.niedersachsen(month),axis=1),axis=1))
        #elif ee == 'vp':
        #    spatial_mean = np.mean(np.mean(ct.niedersachsen(vp),axis=2),axis=2)
        #    return(spatial_mean)
        else:
            spatial_mean = np.mean(np.mean(ct.niedersachsen(days_year),axis=1),axis=1)
            return(spatial_mean)
    elif o == 'sp' or o == 'spatex':
        return ct.niedersachsen(days_year)
    elif o == 'spatday':
        return ct.niedersachsen(data)
    elif o == 'spat':
        # klimasignale ref, 21, 71    
        for j in range(3):
            fm[j,:,:] = np.mean(ct.niedersachsen(days_year[(0+j*50):(30+j*50),:,:]),axis=0)
        
        if v == 'tas' or ee == 'vp' or ee == 'vp2':
            fm[1,:,:] = fm[1,:,:] - fm[0,:,:]
            fm[2,:,:] = fm[2,:,:] - fm[0,:,:]
            #fm[0,:,:] = fm[0,:,:] - 273.15
            #fm = ct.niedersachsen(fm)
        else:
            #fm[0,:,:] = fm[0,:,:]/12
            fm[1,:,:] = (fm[1,:,:]/fm[0,:,:]-1)*100
            fm[2,:,:] = (fm[2,:,:]/fm[0,:,:]-1)*100
            #fm[0,:,:] = fm[1,:,:]/fm[0,:,:]-1)*100
        return(fm) 
    else:
        sys.exit('wrong option in extrem')
示例#4
0
    elif opt == 'testspatex':
        # brauche: ensemblewert, jährlichen wert an jedem gp und für jeden modell käs an jedem gp

        #jz = sys.argv[3]

        fm = 'spat_fm_pr_tp'
        year = 'spatex_pr_tp_year'
        em = 'spat_em_pr_tp'

        year, lons, lats, rlons, rlats = readdata(year, var, False)
        fm, lons, lats, rlons, rlats = readdata(fm, var, False)
        em, lons, lats, rlons, rlats = readdata(em, var, False)

        jm = ma.array(np.zeros((2, 31, 34), 'f'))
        jm = ct.niedersachsen(jm)
        ind = pd.date_range('1971', '2100', freq='As')
        cols = ['cm0', 'cm1', 'cm2', 'cm3', 'cm4', 'cm5', 'cm6', 'cm7', 'cm8']

        for i, period in enumerate([2021, 2071]):
            print(period)
            for lon in range(31):
                print(lon)
                for lat in range(34):
                    ref = year[0, 0:2, lon, lat]
                    if ~ref.mask[0]:
                        #< erstellt dataframe, in dem alle hv aller modelle sind

                        t = pd.DataFrame(np.transpose(year[:, :, lon, lat]),
                                         columns=cols,
                                         index=ind)
示例#5
0
    #----- rotierte lon und lat einlesen -------------------------
    f = Dataset(data[0], 'r')
    rlats = f.variables['rlat'][:]
    rlons = f.variables['rlon'][:]

    #----- calculate lons, lats in gographical coordinates ------
    lon_lat_r = np.meshgrid(rlons, rlats)
    lons, lats = ct.coord_traf(2, lon_lat_r[0], lon_lat_r[1])

    #----- Niedersachsen Data jedes Modells ----------------------
    #nied = [ct.niedersachsen(ca.read_data(ifile, var)) for ifile in data]

    nied = ma.array(np.zeros((9, 1560, 31, 34), 'f'))
    #nied = np.zeros((9,1560,31,34),'f')
    for i, ifile in enumerate(data):
        nied[i] = ct.niedersachsen(ca.read_data(ifile, var))

    #------ Datenaufbereitung --------------------------------------
    '''
    if (var == 'pr' ):
        day_month = np.array([31,28,31,30,31,30,31,31,30,31,30,31])
        for i in range(9):
            for j in range(1560):
                nied[i,j,:,:] =  nied[i,j,:,:] * day_month[j%12]*60*60*24
    '''
    #----- Gebietsmittel 30 years berechnen -------------------------------
    if (opt == "ts"):
        jz = sys.argv[4]

        fm = ca.floating_mean_ts(nied, jz, var)
        ym = ca.year_mean(nied, jz)
示例#6
0
        for i in range(len(data)):
            result[i] = ca.extrem(data[i],opt,var,ee)
        em = ma.array(np.zeros((3,lon_count,lat_count),'f'))
        for i in range(3):
            em[i] = np.mean(result[:,i,:,:], axis=0)
        '''
        result = ma.array(np.zeros((mod_count, 130, lon_count, lat_count),
                                   'f'))
        #result = ca.Data(data,var,ee).calc()
        for i in range(len(data)):
            result[i] = ca.Data(data[i], var, ee).calc()

        min_gp = 0
        max_gp = 15

        cas.plot_basemap(ct.niedersachsen(result[1, 1, :, :]), lons, lats,
                         min_gp, max_gp, var)

        #ca.plot_basemap(em[2], lons, lats, min_gp, max_gp, var)

        #ca.writing_nc(em, "spat_{}.nc".format(var), var, rlats, rlons)

    elif (opt == 'ts'):
        # Zeitreihen Extremereignisse aller Modelle einlesen for every year, mean over niedersachsen
        if ee == 'day':
            index = pd.date_range('1971-01-01', '2100-12-31', freq='D')
        else:
            index = pd.date_range('1971', '2100', freq='AS')

        result = pd.DataFrame()