Exemple #1
0
    def plotter(pdata, colormax=1, colormin=-999, title=''):
        lon = ncread('/network/aopp/hera/mad/bakerh/HAPPI/HadAM3P-N96/All-Hist/mon/tas/item3236_monthly_mean_a011_2006-01_2016-12.nc', 'longitude0')
        lat = ncread('/network/aopp/hera/mad/bakerh/HAPPI/HadAM3P-N96/All-Hist/mon/tas/item3236_monthly_mean_a011_2006-01_2016-12.nc', 'latitude0')
        #lat = ncread('/network/aopp/hera/mad/bakerh/HAPPI/HadAM3P-N96/Plus15-Future_LCO2/day/ua/item15201_daily_mean_a00b_2090-01_2100-12.nc', 'latitude1')   
        if colormin == -999:
            colormin = -colormax
        pdata, lon = shiftgrid(180., pdata, lon, start=False)
        pdata, lon = addcyclic(pdata, lon)
        meshlon, meshlat = np.meshgrid(lon, lat)

        m = Basemap(projection='cyl', llcrnrlat=-90, urcrnrlat=90,
                    llcrnrlon=-180, urcrnrlon=180, resolution='c')
        m.drawcoastlines()
        m.drawmapboundary()
        x, y = m(meshlon, meshlat)
        mycmap2 = plt.cm.YlOrRd(np.arange(256))
        mycmap1 = plt.cm.Blues_r(np.arange(256))
        my_cmap = np.concatenate((mycmap1, mycmap2), axis=0)
        my_cmap[230:282, :] = 1
        if precip == 'yes':
            my_cmap = my_cmap[::-1]
        newcmap = mpl.colors.LinearSegmentedColormap.from_list("newjet", my_cmap)
        ctrs = np.linspace(colormin, colormax, 17)
        plot = m.contourf(x, y, pdata, ctrs,
                          cmap=newcmap, vmin=np.min(ctrs), vmax=np.max(ctrs),
                          extend='both')

        plt.title(title, y=1)
        plt.show()
        return plot
Exemple #2
0
def stat_rossC(u):
    '''
    This treatment makes the regions of reflection (beta<0 and u_m>0)
    and regions of absorption (beta>0 and u_m<0) indistinguishable.
    These regions of absorption can be identified separately by
    plotting the easterlies.
    '''
    from netcdfread import ncread
    lon = ncread(
        '/network/aopp/hera/mad/bakerh/HAPPI/CAM4-2degree/All-Hist/mon/va/va_Amon_CAM4-2degree_All-Hist_est1_v1-0_ens0000_200601-201512.nc',
        'lon')
    lat = ncread(
        '/network/aopp/hera/mad/bakerh/HAPPI/CAM4-2degree/All-Hist/mon/va/va_Amon_CAM4-2degree_All-Hist_est1_v1-0_ens0000_200601-201512.nc',
        'lat')
    meshlon, meshlat = np.meshgrid(lon, lat)
    phi = meshlat * np.pi / 180
    cs_phi = np.cos(phi)
    dphi = 1.25 * np.pi / 180
    omega = 7.29e-5
    a = 6.371e6
    u_m = u / (a * cs_phi)
    u_1opp = np.gradient(u_m * cs_phi**2, dphi, axis=0) / cs_phi
    u_2opp = np.gradient(u_1opp, dphi, axis=0) / cs_phi
    beta = (2 * omega - u_2opp) * cs_phi**2 / a
    ks = np.sqrt(a * beta / u_m)
    return ks
Exemple #3
0
def maplot(pdata, colormax=1, colormin=-999, mask='no', title='', precip='no'):
    """
    Plots input grid with map of world overlaid

    Parameters
    ----------
    plotdata: array
        data being plotted
    title: str
        optional title
    """
    from mpl_toolkits.basemap import Basemap, shiftgrid, addcyclic
    import numpy as np
    import matplotlib as mpl
    import matplotlib.pyplot as plt
    from netcdfread import ncread
    if colormin == -999:
        colormin = -colormax
    lon = ncread('/network/aopp/hera/mad/bakerh/HAPPI/HadAM3P-N96/All-Hist/mon/tas/item3236_monthly_mean_a011_2006-01_2016-12.nc', 'longitude0')
    lat = ncread('/network/aopp/hera/mad/bakerh/HAPPI/HadAM3P-N96/All-Hist/mon/tas/item3236_monthly_mean_a011_2006-01_2016-12.nc', 'latitude0')
    #lat = ncread('/network/aopp/hera/mad/bakerh/HAPPI/HadAM3P-N96/Plus15-Future_LCO2/day/ua/item15201_daily_mean_a00b_2090-01_2100-12.nc', 'latitude1')   
    plt.figure()
    if mask == 'yes':
        lsm = ncread('/home/bakerh/Documents/DPhil/CPDN/\
Weather-at-Home_ancilmaker-master/lsm_n96_add.nc', 'lsm')[0, 0, :]
        pdata = np.ma.masked_array(pdata, mask=np.logical_not(lsm))
    pdata, lon = shiftgrid(180., pdata, lon, start=False)
    pdata, lon = addcyclic(pdata, lon)
    meshlon, meshlat = np.meshgrid(lon, lat)

    m = Basemap(projection='cyl', llcrnrlat=-90, urcrnrlat=90,
                llcrnrlon=-180, urcrnrlon=180, resolution='c')
    m.drawcoastlines()
    m.drawmapboundary()
    x, y = m(meshlon, meshlat)
    mycmap2 = plt.cm.YlOrRd(np.arange(256))
    mycmap1 = plt.cm.Blues_r(np.arange(256))
    my_cmap = np.concatenate((mycmap1, mycmap2), axis=0)
    my_cmap[230:282, :] = 1
    if precip == 'yes':
        my_cmap = my_cmap[::-1]
    newcmap = mpl.colors.LinearSegmentedColormap.from_list("newjet", my_cmap)
    ctrs = np.linspace(colormin, colormax, 17)
    plot = m.contourf(x, y, pdata, ctrs,
                      cmap=newcmap, vmin=np.min(ctrs), vmax=np.max(ctrs),
                      extend='both')
    b = plt.colorbar(plot, orientation='horizontal',
                     aspect=50, shrink=0.75, spacing='proportional')
    b.set_label(label=r'pr (mm day$^{-1}$)')
    parallels = m.drawparallels(np.arange(-90., 91., 15.))
    meridians = m.drawmeridians(np.arange(-180., 181., 30))
    m.drawparallels(parallels, labels=[True, True, True, True])
    m.drawmeridians(meridians, labels=[True, True, True, True])
    plt.title(title, y=1.08)
    plt.show()
Exemple #4
0
def regressnao(eof):
    from scipy import stats
    lat = np.arange(80, 18.75, -1.25)
    lon = np.linspace(-90, 39.375, 70)
    both = compare('item16222_monthly_mean')
    lst = dbase()
    anom = np.zeros((len(both), 145, 192))
    NAOinds = np.zeros((2, len(both)))
    for i, item in enumerate(both):
        anom[i, :] = ncread(
            '/network/aopp/hera/mad/bakerh/RPM/SSTpatches/sst_HadOIBl_bc_N96_clim_pert'
            + lst[item] + '_c040926.nc', 'SST'
        )[0, :] - ncread(
            '/home/bakerh/Documents/DPhil/CPDN/RPM/SSTfiles/sst_HadOIBl_bc_N96_clim_c040926_25months.nc',
            'SST_cpl')[0, :]
        mslp_control = ncread(
            '/network/aopp/hera/mad/bakerh/RPM/cpdn_extract_scripts-master/extracted_data/batch_577/atmos/item16222_monthly_mean/item16222_monthly_mean_'
            + both[i] + '_1999-01_2000-12.nc',
            'item16222_monthly_mean')[:, 0, :] / 100
        mslp = ncread(
            '/network/aopp/hera/mad/bakerh/RPM/cpdn_extract_scripts-master/extracted_data/batch_578/atmos/item16222_monthly_mean/item16222_monthly_mean_'
            + both[i] + '_1999-01_2000-12.nc',
            'item16222_monthly_mean')[:, 0, :] / 100
        mslp_cw, mslp_cs = nao_region_hadam3p(mslp_control)
        mslp_w, mslp_s = nao_region_hadam3p(mslp)
        nao_cw = eof_response(np.expand_dims(mslp_cw, axis=0), eof[0], lat,
                              lon)
        nao_cs = eof_response(np.expand_dims(mslp_cs, axis=0), eof[1], lat,
                              lon)
        nao_w = eof_response(np.expand_dims(mslp_w, axis=0), eof[0], lat, lon)
        nao_s = eof_response(np.expand_dims(mslp_s, axis=0), eof[1], lat, lon)
        NAOinds[0, i] = nao_w - nao_cw
        NAOinds[1, i] = nao_s - nao_cs
        print('Done: ' + str(i + 1) + ' out of ' + str(len(both)))
    anom = anom[:, ::-1, :]
    regmap_smoothed = np.zeros((2, 145, 192))
    regmap_smoothed_sig = np.zeros((2, 145, 192))
    regmap_smoothed_sig[:] = np.NAN
    for i in range(99):
        for j in range(192):
            for a in range(2):
                regmap_smoothed[a, i + 23, j] = np.cov(
                    anom[:, i + 23, j],
                    NAOinds[a, :])[0, 1] * 3 / (4 * 6371**2 * 1.25 * 1.875 *
                                                (np.pi / 180)**2)
                r = np.cov(anom[:, i + 23, j], NAOinds[a, :])[0, 1] / np.sqrt(
                    np.cov(anom[:, i + 23, j], NAOinds[a, :])[1, 1] *
                    np.cov(anom[:, i + 23, j], NAOinds[a, :])[0, 0])
                t = r * np.sqrt((len(both) - 2) / (1 - r**2))
                p = 1 - stats.norm.cdf(np.abs(t))
                sig = np.greater_equal(5, p * 100 * 2).astype(int)
                if sig == 1:
                    regmap_smoothed_sig[a, i + 23,
                                        j] = regmap_smoothed[a, i + 23, j]
    return regmap_smoothed, regmap_smoothed_sig
Exemple #5
0
def maplotM(pdata, colormax=1, mask='no', title='', precip='no'):
    """
    Plots input grid with map of world overlaid

    Parameters
    ----------
    plotdata: array
        data being plotted
    title: str
        optional title
    """
    from mpl_toolkits.basemap import Basemap, shiftgrid
    import numpy as np
    import matplotlib as mpl
    import matplotlib.pyplot as plt
    from netcdfread import ncread
    lat = ncread('/network/aopp/hera/mad/bakerh/HAPPI/MIROC5/All-Hist/day/tas/tas_Aday_MIROC5_All-Hist_est1_v2-0_run001_20060101-20161231.nc','lat')
    lon = np.arange(0, 360, 360/256)
    plt.figure()
    if mask == 'yes':
        lsm = ncread('/home/bakerh/Documents/DPhil/Python/lsm_n72.nc', 'lsm')
        pdata = np.ma.masked_array(pdata, mask=np.logical_not(lsm))
    pdata, lon = shiftgrid(180., pdata, lon, start=False)
    meshlon, meshlat = np.meshgrid(lon, lat)

    m = Basemap(projection='cyl', llcrnrlat=-90, urcrnrlat=90,
                llcrnrlon=-180, urcrnrlon=180, resolution='c')
    m.drawcoastlines()
    m.drawmapboundary()
    x, y = m(meshlon, meshlat)
    mycmap2 = plt.cm.YlOrRd(np.arange(256))
    mycmap1 = plt.cm.Blues_r(np.arange(256))
    my_cmap = np.concatenate((mycmap1, mycmap2), axis=0)
    my_cmap[230:282, :] = 1
    if precip == 'yes':
        my_cmap = my_cmap[::-1]
    newcmap = mpl.colors.LinearSegmentedColormap.from_list("newjet", my_cmap)
    ctrs = np.linspace(-colormax, colormax, 17)
    plot = m.contourf(x, y, pdata, ctrs,
                      cmap=newcmap, vmin=np.min(ctrs), vmax=np.max(ctrs),
                      extend='both')
    b = plt.colorbar(plot, orientation='horizontal',
                     aspect=50, shrink=0.75, spacing='proportional')
    b.set_label(label=r'-$\mathbf{v}_\chi\cdot\nabla\zeta$ (10$^{-12}$ s$^{-2}$)')
    parallels = m.drawparallels(np.arange(-90., 91., 15.))
    meridians = m.drawmeridians(np.arange(-180., 181., 30))
    m.drawparallels(parallels, labels=[True, True, True, True])
    m.drawmeridians(meridians, labels=[True, True, True, True])
    plt.title(title, y=1.08)
    plt.show()
Exemple #6
0
def sphr2cart(grid):
    from scipy import interpolate
    import numpy as np
    from netcdfread import ncread
    r = 6.371e6
    x_tot = 2*np.pi * r * np.cos(60*np.pi/180)
    lon = ncread('/network/aopp/hera/mad/bakerh/HAPPI/batch_518/atmos/item3236_monthly_mean/item3236_monthly_mean_a011_2006-01_2016-12.nc', 'longitude0')
    lat = ncread('/network/aopp/hera/mad/bakerh/HAPPI/batch_518/atmos/item3236_monthly_mean/item3236_monthly_mean_a011_2006-01_2016-12.nc', 'latitude0')
    lon_r = np.radians(lon)
    lat_r = np.radians(lat)
    meshlon, meshlat = np.meshgrid(lon_r, lat_r)
    meshx = r * meshlon / 2
    meshy = r * meshlat
    f = interpolate.interp2d(lon_r, lat_r, grid)
    x = meshx[0, :]
    y = meshy[:, 0]
    grid_cart = f(x*lon_r.max()/x.max(), y*lat_r.max()/y.max())
    return x, y, grid_cart
Exemple #7
0
def sens():
    import numpy as np
    from netcdfread import ncread
    import glob
    a = sorted(
        glob.glob('/network/aopp/hera/mad/bakerh/BTmodel_COR/main/sens/*'))
    v = np.zeros((36, 26, 64, 128))
    for i in range(36):
        v[i] = ncread(a[i], 'V')
    return v
Exemple #8
0
def jet_clim_indices():
    import glob
    from netcdfread import ncread
    a = glob.glob(
        '/network/aopp/hera/mad/bakerh/RPM/cpdn_extract_scripts-master/extracted_data/batch_577/atmos/item15201_daily_mean/*'
    )
    lat = ncread(
        '/network/aopp/hera/mad/bakerh/RPM/cpdn_extract_scripts-master/extracted_data/batch_577/atmos/item15201_daily_mean/item15201_daily_mean_b01f_1999-01_2000-12.nc',
        'latitude0')
    lon = ncread(
        '/network/aopp/hera/mad/bakerh/RPM/cpdn_extract_scripts-master/extracted_data/batch_577/atmos/item15201_daily_mean/item15201_daily_mean_b01f_1999-01_2000-12.nc',
        'longitude0')
    ji = np.zeros((2, 2, len(a)))
    for i in range(len(a)):
        ucontrol = ncread(a[i], 'item15201_daily_mean')[:, 0, :]
        u_djf = ucontrol[300:450]
        u_jja = ucontrol[480:630]
        ji[0, 0, i], ji[0, 1, i] = jetind(u_djf, lat, lon)
        ji[1, 0, i], ji[1, 1, i] = jetind(u_jja, lat, lon)
        print(str(i))
    return ji
Exemple #9
0
def lsc(tbar, r1, r2):
    from netcdfread import ncread
    import numpy as np
    lsm = ncread(
        '/home/bakerh/Documents/DPhil/CPDN/Weather-at-Home_ancilmaker-master/lsm_n96_add.nc',
        'lsm')[0, 0, :]
    lsm1 = np.ones((145, 192))
    for i in range(145):
        for j in range(192):
            if lsm[i, j] == 0:
                lsm1[i, j] = 0
    t_nat = np.mean(tbar['All-Nat'], axis=0)
    t_sst = np.mean(tbar['GHG-Nat'], axis=0)
    t_ghg = np.mean(tbar['SST-Nat'], axis=0)
    lon = ncread(
        '/network/aopp/hera/mad/bakerh/HAPPI/HadAM3P-N96/All-Hist/mon/tas/item3236_monthly_mean_a011_2006-01_2016-12.nc',
        'longitude0')
    lat = ncread(
        '/network/aopp/hera/mad/bakerh/HAPPI/HadAM3P-N96/All-Hist/mon/tas/item3236_monthly_mean_a011_2006-01_2016-12.nc',
        'latitude0')
    meshlat = np.zeros([np.ma.size(lon), np.ma.size(lat)])
    meshlat[:, :] = lat
    meshlatweight = np.transpose(np.cos(meshlat * np.pi / 180))

    t_nat_w = t_nat * meshlatweight
    t_sst_w = t_sst * meshlatweight
    t_ghg_w = t_ghg * meshlatweight

    def lscalc(t_w, lsm1, meshlatweight, r1=56, r2=89):
        lsm1 = lsm1[r1:r2, :]
        t_w = t_w[r1:r2, :]
        meshlatweight = meshlatweight[r1:r2, :]
        t_l = np.mean(t_w[lsm1 > 0.5]) / np.mean(meshlatweight[lsm1 > 0.5])
        t_o = np.mean(t_w[lsm1 < 0.5]) / np.mean(meshlatweight[lsm1 < 0.5])
        return t_l, t_o

    t_nat_l, t_nat_o = lscalc(t_nat_w, lsm1, meshlatweight, r1, r2)
    t_sst_l, t_sst_o = lscalc(t_sst_w, lsm1, meshlatweight, r1, r2)
    t_ghg_l, t_ghg_o = lscalc(t_ghg_w, lsm1, meshlatweight, r1, r2)
    return t_nat_l, t_nat_o, t_sst_l, t_sst_o, t_ghg_l, t_ghg_o
Exemple #10
0
def maplot_c(pdata, pdata1, title='', precip='no'):
    """
    Plots input grid with map of world overlaid

    Parameters
    ----------
    plotdata: array
        data being plotted
    title: str
        optional title
    """
    from mpl_toolkits.basemap import Basemap, shiftgrid
    import numpy as np
    import matplotlib.pyplot as plt
    from netcdfread import ncread
    lon = ncread('/network/aopp/hera/mad/bakerh/HAPPI/batch_518/atmos/item3236_monthly_mean/item3236_monthly_mean_a011_2006-01_2016-12.nc', 'longitude0')
    lat = ncread('/network/aopp/hera/mad/bakerh/HAPPI/batch_518/atmos/item3236_monthly_mean/item3236_monthly_mean_a011_2006-01_2016-12.nc', 'latitude0')
    plt.figure()

    pdata, lon1 = shiftgrid(180., pdata, lon, start=False)
    pdata1, lon = shiftgrid(180., pdata1, lon, start=False)
    meshlon, meshlat = np.meshgrid(lon, lat)

    m = Basemap(projection='cyl', llcrnrlat=-90, urcrnrlat=90,
                llcrnrlon=-180, urcrnrlon=180, resolution='c')
    m.drawcoastlines()
    m.drawmapboundary()
    x, y = m(meshlon, meshlat)
    plot = m.contour(x, y, pdata, [4, 5, 6], colors='k')
    plt.clabel(plot, inline=1, fontsize=10)
    plot1 = m.contour(x, y, pdata1, [4, 5, 6], colors='r', linestyles='--')
    plt.clabel(plot, inline=1, fontsize=10)
    parallels = m.drawparallels(np.arange(-90., 91., 15.))
    meridians = m.drawmeridians(np.arange(-180., 181., 30))
    m.drawparallels(parallels, labels=[True, True, True, True])
    m.drawmeridians(meridians, labels=[True, True, True, True])
    plt.title(title, y=1.08)
    plt.show()
Exemple #11
0
def mean_4xco2(var='va'):
    from scipy import interpolate
    from netcdfread import ncread
    import glob
    import numpy as np
    from btmodel import maplot_ll
    lat_n96 = ncread(
        '/home/bakerh/Documents/DPhil/CPDN/Weather-at-Home_ancilmaker-master/lsm_n96_add.nc',
        'latitude')
    lon_n96 = ncread(
        '/home/bakerh/Documents/DPhil/CPDN/Weather-at-Home_ancilmaker-master/lsm_n96_add.nc',
        'longitude')
    a = sorted(
        glob.glob('/network/aopp/hera/mad/bakerh/HAPPI/CMIP5/AMIP/' + var +
                  '/*'))
    b = sorted(
        glob.glob('/network/aopp/hera/mad/bakerh/HAPPI/CMIP5/AMIP4xCO2/' +
                  var + '/*'))
    sindices = np.zeros((30 * 3))
    for i in range(30):
        sindices[3 * i:3 * (i + 1)] = [5 + 12 * i, 6 + 12 * i, 7 + 12 * i]
    sindices = sindices.astype(int)
    v_means = np.zeros((9, 145, 192))
    for i in range(9):
        st = 0
        if i == 3:
            st = 4
        if i == 1:
            st = 348
        if var == 'pr':
            v_c = ncread(a[i], var)[st + sindices]
            v_f = ncread(b[i], var)[st + sindices]
        else:
            v_c = ncread(a[i], var)[st + sindices, 9]
            v_f = ncread(b[i], var)[st + sindices, 9]
        dv = np.mean(v_f - v_c, axis=0)
        lat = ncread(a[i], 'lat')
        lon = ncread(b[i], 'lon')
        maplot_ll(dv, lat, lon, 3)
        f = interpolate.interp2d(lon, lat[::-1], dv)
        v_res = f(lon_n96, lat_n96)
        v_means[i] = v_res
    return v_means
Exemple #12
0
def stat_rossM(u):
    '''
    This treatment makes the regions of reflection (beta<0 and u_m>0)
    and regions of absorption (beta>0 and u_m<0) indistinguishable.
    These regions of absorption can be identified separately by
    plotting the easterlies.
    '''
    from netcdfread import ncread
    lat = ncread('/network/aopp/hera/mad/bakerh/HAPPI/MIROC5/All-Hist/day/tas/tas_Aday_MIROC5_All-Hist_est1_v2-0_run001_20060101-20161231.nc','lat')
    lon = np.arange(0, 360, 360/256)
    meshlon, meshlat = np.meshgrid(lon, lat)
    phi = meshlat*np.pi/180
    cs_phi = np.cos(phi)
    dphi = 1.25*np.pi/180
    omega = 7.29e-5
    a = 6.371e6
    u_m = u / (a*cs_phi)
    u_1opp = np.gradient(u_m*cs_phi**2, dphi, axis=0) / cs_phi
    u_2opp = np.gradient(u_1opp, dphi, axis=0) / cs_phi
    beta = (2*omega - u_2opp)*cs_phi**2/a
    ks = np.sqrt(a*beta/u_m)
    return ks
Exemple #13
0
def trop():
    from netCDF4 import Dataset
    from netcdfread import ncread
    import glob

    def lapserate(t, z17):
        """
        Produces plot of lapse rate of T data
        """
        import numpy as np
        k = 287.058 / 0.718
        L = np.zeros((17, 145))
        for i in range(16):
            L[i, :] = k * 9.81 * ((t[i+1, :] - t[i, :]) * (z17[i+1] + z17[i])) / (287.058*(t[i+1, :] + t[i, :]) * (z17[i+1] - z17[i]))
        return L

    sindices = np.zeros((11*3))
    windices = np.zeros((11*3))
    for i in range(11):
        sindices[3*i:3*(i+1)] = [5+12*i, 6+12*i, 7+12*i]
    for i in range(11):
        windices[3*i:3*(i+1)] = [12*i, 1+12*i, 11+12*i]
    sindices = sindices.astype(int)
    windices = windices.astype(int)

    z = ncread('/network/aopp/hera/mad/bakerh/HAPPI/HadAM3P-N96/All-Hist/mon/ta/item16203_monthly_mean_a011_2006-01_2016-12.nc', 'z9')
    a = glob.glob('/network/aopp/hera/mad/bakerh/HAPPI/HadAM3P-N96/' +
                  'All-Hist/mon/ta/*')
    tbar = np.zeros((np.ma.size(z), 145))

    for e, d in enumerate(a):
        nc_fid = Dataset(d, 'r')
        tbar += np.mean(nc_fid.variables['item16203_monthly_mean'][sindices, :],
                        axis=(0, 3))
        print('Done ' + str(e+1))
    tbar /= np.ma.size(a)
    L = lapserate(tbar, z)
    return tbar, L
Exemple #14
0
def circ_patternM(d_v, v_anom, f_anom, r=[0, 128, 0, 256]):
    from statsmodels.api import OLS
    lat = ncread('/network/aopp/hera/mad/bakerh/HAPPI/MIROC5/present/tas/tas_Aday_MIROC5_All-Hist_est1_v2-0_run001_20060101-20161231.nc','lat')
    lon = np.arange(0, 360, 360/256)
    meshlat = np.zeros((256, 128))
    meshlat[:, :] = lat
    meshlat = np.transpose(meshlat)
    mlw = (np.cos(meshlat * np.pi/180))

    v_coef = np.zeros((np.ma.size(v_anom, axis=0)))
    v_anom_w = v_anom * mlw
    dv = d_v * mlw
    dv_sub = np.ndarray.flatten(dv[r[0]:r[1], r[2]:r[3]])
    v_anom_sub = np.transpose(np.reshape(v_anom_w[:, r[0]:r[1], r[2]:r[3]],
                                         (np.ma.size(v_anom, axis=0),
                                          (r[1]-r[0])*(r[3]-r[2]))))
    model = OLS(dv_sub, v_anom_sub).fit()
    v_coef = model._results.params
    field_circ = np.zeros((np.ma.size(v_anom, axis=0), 128, 256))

    for a in range(np.ma.size(v_anom, axis=0)):
        field_circ[a, :] = v_coef[a] * f_anom[a, :]
    field_circ = np.sum(field_circ, axis=0)
    return field_circ
Exemple #15
0
def rws_fprime(ua200, va200):
    from windspharm.standard import VectorWind
    from netcdfread import ncread, ncsave
    from scipy import interpolate

    lon42 = ncread(
        '/network/aopp/hera/mad/bakerh/BTmodel_COR/main/inputs/forcing_ghg.nc',
        'lon')
    lat42 = ncread(
        '/network/aopp/hera/mad/bakerh/BTmodel_COR/main/inputs/forcing_ghg.nc',
        'lat')
    lon = ncread(
        '/network/aopp/hera/mad/bakerh/HAPPI/HadAM3P-N96/All-Hist/mon/tas/item3236_monthly_mean_a011_2006-01_2016-12.nc',
        'longitude0')
    lat = ncread(
        '/network/aopp/hera/mad/bakerh/HAPPI/HadAM3P-N96/Plus15-Future_LCO2/day/ua/item15201_daily_mean_a00b_2090-01_2100-12.nc',
        'latitude1')

    u = ua200['All-Nat']  #[1]
    v = va200['All-Nat']  #[1]
    u_sst = ua200['GHG-Nat']  #[1]
    v_sst = va200['GHG-Nat']  #[1]
    u_ghg = ua200['SST-Nat']  #[1]
    v_ghg = va200['SST-Nat']  #[1]

    v = w5rem(v)
    u = w5rem(u)

    uwnd = np.zeros((64, 128, len(u)))
    vwnd = np.zeros((64, 128, len(v)))
    uwnd_sst = np.zeros((64, 128, len(u_sst)))
    vwnd_sst = np.zeros((64, 128, len(u_sst)))
    uwnd_ghg = np.zeros((64, 128, len(u_ghg)))
    vwnd_ghg = np.zeros((64, 128, len(u_ghg)))

    u = np.transpose(u, (1, 2, 0))
    v = np.transpose(v, (1, 2, 0))
    u_sst = np.transpose(u_sst, (1, 2, 0))
    v_sst = np.transpose(v_sst, (1, 2, 0))
    u_ghg = np.transpose(u_ghg, (1, 2, 0))
    v_ghg = np.transpose(v_ghg, (1, 2, 0))

    for i in range(np.ma.size(uwnd, axis=2)):
        h = interpolate.interp2d(lon, lat[::-1], u[:, :, i])
        uwnd[:, :, i] = h(lon42, lat42[::-1])
        g = interpolate.interp2d(lon, lat[::-1], v[:, :, i])
        vwnd[:, :, i] = g(lon42, lat42[::-1])
    for i in range(np.ma.size(uwnd_sst, axis=2)):
        h = interpolate.interp2d(lon, lat[::-1], u_sst[:, :, i])
        uwnd_sst[:, :, i] = h(lon42, lat42[::-1])
        g = interpolate.interp2d(lon, lat[::-1], v_sst[:, :, i])
        vwnd_sst[:, :, i] = g(lon42, lat42[::-1])
    for i in range(np.ma.size(uwnd_ghg, axis=2)):
        h = interpolate.interp2d(lon, lat[::-1], u_ghg[:, :, i])
        uwnd_ghg[:, :, i] = h(lon42, lat42[::-1])
        g = interpolate.interp2d(lon, lat[::-1], v_ghg[:, :, i])
        vwnd_ghg[:, :, i] = g(lon42, lat42[::-1])

    w = VectorWind(uwnd, vwnd)
    w_sst = VectorWind(uwnd_sst, vwnd_sst)
    w_ghg = VectorWind(uwnd_ghg, vwnd_ghg)

    eta = w.absolutevorticity()
    eta_sst = w_sst.absolutevorticity()
    eta_ghg = w_ghg.absolutevorticity()

    div = w.divergence()
    div_sst = w_sst.divergence()
    div_ghg = w_ghg.divergence()

    uchi, vchi = w.irrotationalcomponent()
    uchi_sst, vchi_sst = w_sst.irrotationalcomponent()
    uchi_ghg, vchi_ghg = w_ghg.irrotationalcomponent()

    etax, etay = w.gradient(eta)
    # etax_sst, etay_sst = w_sst.gradient(eta_sst)
    # etax_ghg, etay_ghg = w_ghg.gradient(eta_ghg)

    eta = np.transpose(eta, (2, 0, 1))
    eta_sst = np.transpose(eta_sst, (2, 0, 1))
    eta_ghg = np.transpose(eta_ghg, (2, 0, 1))

    div = np.transpose(div, (2, 0, 1))
    div_sst = np.transpose(div_sst, (2, 0, 1))
    div_ghg = np.transpose(div_ghg, (2, 0, 1))

    etax = np.transpose(etax, (2, 0, 1))
    etay = np.transpose(etay, (2, 0, 1))

    uchi = np.transpose(uchi, (2, 0, 1))
    uchi_sst = np.transpose(uchi_sst, (2, 0, 1))
    uchi_ghg = np.transpose(uchi_ghg, (2, 0, 1))
    vchi = np.transpose(vchi, (2, 0, 1))
    vchi_sst = np.transpose(vchi_sst, (2, 0, 1))
    vchi_ghg = np.transpose(vchi_ghg, (2, 0, 1))

    #f_ghg = -eta.mean(axis=0)*(div_ghg-div.mean(axis=0))-(uchi_ghg-uchi.mean(axis=0))*etax.mean(axis=0)-(vchi_ghg-vchi.mean(axis=0))*etay.mean(axis=0)
    #f_sst = -eta.mean(axis=0)*(div_sst-div.mean(axis=0))-(uchi_sst-uchi.mean(axis=0))*etax.mean(axis=0)-(vchi_sst-vchi.mean(axis=0))*etay.mean(axis=0)

    f_ghg = -eta * (div_ghg - div) - ((uchi_ghg - uchi) * etax +
                                      (vchi_ghg - vchi) * etay)
    f_sst = -eta * (div_sst - div) - ((uchi_sst - uchi) * etax +
                                      (vchi_sst - vchi) * etay)

    meshlon, meshlat = np.meshgrid(lon42, lat42)
    '''
    ncsave('/home/bakerh/Downloads/vort200_control', lat42, lon42, eta.mean(axis=0)-2*np.sin(meshlat*np.pi/180)*7.2921e-5, 'vorticity')
    ncsave('/home/bakerh/Downloads/vort200_sst', lat42, lon42, eta_sst.mean(axis=0)-2*np.sin(meshlat*np.pi/180)*7.2921e-5, 'vorticity')
    ncsave('/home/bakerh/Downloads/vort200_ghg', lat42, lon42, eta_ghg.mean(axis=0)-2*np.sin(meshlat*np.pi/180)*7.2921e-5, 'vorticity')
    ncsave('/home/bakerh/Downloads/forcing_ghg', lat42, lon42, f_ghg.mean(axis=0), 'forcing')
    ncsave('/home/bakerh/Downloads/forcing_sst', lat42, lon42, f_sst.mean(axis=0), 'forcing')
    '''
    month = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
    ncsave('/home/bakerh/Downloads/vort200_control', month, lat42, lon42,
           eta - 2 * np.sin(meshlat * np.pi / 180) * 7.2921e-5, 'vorticity')
    ncsave('/home/bakerh/Downloads/vort200_sst', month, lat42, lon42,
           eta_sst - 2 * np.sin(meshlat * np.pi / 180) * 7.2921e-5,
           'vorticity')
    ncsave('/home/bakerh/Downloads/vort200_ghg', month, lat42, lon42,
           eta_ghg - 2 * np.sin(meshlat * np.pi / 180) * 7.2921e-5,
           'vorticity')
    ncsave('/home/bakerh/Downloads/forcing_ghg', month, lat42, lon42, f_ghg,
           'forcing')
    ncsave('/home/bakerh/Downloads/forcing_sst', month, lat42, lon42, f_sst,
           'forcing')
Exemple #16
0
def main(var, global_tas):
    from scipy import interpolate
    from netcdfread import ncread
    import glob
    sindices = np.zeros((95 * 3))
    for i in range(95):
        sindices[3 * i:3 * (i + 1)] = [5 + 12 * i, 6 + 12 * i, 7 + 12 * i]
    sindices = sindices.astype(int)
    lat_n96 = ncread(
        '/home/bakerh/Documents/DPhil/CPDN/Weather-at-Home_ancilmaker-master/lsm_n96_add.nc',
        'latitude')
    lon_n96 = ncread(
        '/home/bakerh/Documents/DPhil/CPDN/Weather-at-Home_ancilmaker-master/lsm_n96_add.nc',
        'longitude')

    concs = {}
    concs['inmcm4'] = 1084.44
    concs['MIROC-ESM'] = 533.57
    concs['CanESM2'] = 532.45
    concs['MPI-ESM-LR'] = 555.37
    concs['GFDL-ESM2M'] = 778.35
    concs['HadGEM2-CC'] = 759.01
    concs['bcc-csm1-1'] = 675.27
    concs['IPSL-CM5A-MR'] = 656.68
    concs['GFDL-ESM2G'] = 770.60
    concs['IPSL-CM5B-LR'] = 666.95
    concs['MIROC-ESM-CHEM'] = 537.12
    concs['IPSL-CM5A-LR'] = 604.38
    concs['HadGEM2-ES'] = 740.65

    yrs = {}
    # yrs['CESM1-BGC'] = 2019.6038556835267
    yrs['CanESM2'] = 2015.6501388153354
    yrs['GFDL-ESM2G'] = 2040.2726255644302
    yrs['GFDL-ESM2M'] = 2038.4461621682028
    yrs['HadGEM2-CC'] = 2030.5237032804
    yrs['HadGEM2-ES'] = 2028.1144760733512
    yrs['IPSL-CM5A-LR'] = 2013.7490131087695
    yrs['IPSL-CM5A-MR'] = 2018.568003728501
    yrs['IPSL-CM5B-LR'] = 2025.1511344273508
    yrs['MIROC-ESM'] = 2021.3187712711444
    yrs['MIROC-ESM-CHEM'] = 2018.89262095655
    yrs['MPI-ESM-LR'] = 2020.0421238126532
    # yrs['NorESM1-ME'] = 2034.3684277126238
    yrs['bcc-csm1-1'] = 2022.8345355891056
    yrs['inmcm4'] = 2045.194355545509

    yrs2 = {}

    # yrs2['CESM1-BGC'] = 2034.7262797142157,
    yrs2['CanESM2'] = 2028.6584559023813,
    yrs2['GFDL-ESM2G'] = 2056.5526316368,
    yrs2['GFDL-ESM2M'] = 2053.6514333101513,
    yrs2['HadGEM2-CC'] = 2043.093047747961,
    yrs2['HadGEM2-ES'] = 2039.480727397444,
    yrs2['IPSL-CM5A-LR'] = 2029.344424079118,
    yrs2['IPSL-CM5A-MR'] = 2032.351689422151,
    yrs2['IPSL-CM5B-LR'] = 2039.2780954952768,
    yrs2['MIROC-ESM'] = 2031.144339409215,
    yrs2['MIROC-ESM-CHEM'] = 2030.7223697396423,
    yrs2['MPI-ESM-LR'] = 2039.3393134034848,
    # yrs2['NorESM1-ME'] = 2047.8103280489413,
    yrs2['bcc-csm1-1'] = 2038.2589979997997,
    yrs2['inmcm4'] = 2058.6460082149406

    tcr = {}
    # tcr['CESM1-BGC'] = 1.7
    tcr['CanESM2'] = 2.4
    tcr['GFDL-ESM2G'] = 1.1
    tcr['GFDL-ESM2M'] = 1.3
    tcr['HadGEM2-CC'] = np.nan
    tcr['HadGEM2-ES'] = 2.5
    tcr['IPSL-CM5A-LR'] = 2
    tcr['IPSL-CM5A-MR'] = 2
    tcr['IPSL-CM5B-LR'] = 1.5
    tcr['MIROC-ESM'] = 2.2
    tcr['MIROC-ESM-CHEM'] = np.nan
    tcr['MPI-ESM-LR'] = 2.0
    # tcr['NorESM1-ME'] = 1.6
    tcr['bcc-csm1-1'] = 1.7
    tcr['inmcm4'] = 1.3

    tcre = {}
    # tcre['CESM1-BGC'] = 1.7
    tcre['CanESM2'] = 2.375
    tcre['GFDL-ESM2G'] = 0.825
    tcre['GFDL-ESM2M'] = 1.075
    tcre['HadGEM2-CC'] = np.nan
    tcre['HadGEM2-ES'] = 2.1
    tcre['IPSL-CM5A-LR'] = 1.6
    tcre['IPSL-CM5A-MR'] = 1.575
    tcre['IPSL-CM5B-LR'] = 1.2
    tcre['MIROC-ESM'] = 2.15
    tcre['MIROC-ESM-CHEM'] = np.nan
    tcre['MPI-ESM-LR'] = 1.6
    # tcre['NorESM1-ME'] = 1.6
    tcre['bcc-csm1-1'] = 1.4
    tcre['inmcm4'] = 1

    tx90p_n96 = {}
    tx90p_n96_2 = {}
    items = []
    tx90p_MID = []
    tx90p_TROP = []
    ts_tx90p_MID = []
    ts_tx90p_TROP = []
    emissions = []
    years = []
    tcrs = []
    tcres = []
    global_tass = []
    a = glob.glob('/network/aopp/hera/mad/bakerh/HAPPI/climdex/CMIP5/rcp85/' +
                  var + '/*')
    #a1 = a[0]
    #a[0] = a[1]
    #a[1] = a1
    for i in a:
        items.append(i[78 + 2 * len(var) - 10:-30])
    for i in items:
        print(i)
        if i == 'HadGEM2-CC':
            tx90p = np.array(
                ncread(
                    '/network/aopp/hera/mad/bakerh/HAPPI/climdex/CMIP5/rcp85/'
                    + var + '/' + var + 'ETCCDI_mon_' + str(i) +
                    '_rcp85_r1i1p1_200501-210012.nc', var + 'ETCCDI')[12:, :])
            lat = ncread(
                '/network/aopp/hera/mad/bakerh/HAPPI/climdex/CMIP5/rcp85/' +
                var + '/' + var + 'ETCCDI_mon_' + str(i) +
                '_rcp85_r1i1p1_200501-210012.nc', 'lat')
            lon = ncread(
                '/network/aopp/hera/mad/bakerh/HAPPI/climdex/CMIP5/rcp85/' +
                var + '/' + var + 'ETCCDI_mon_' + str(i) +
                '_rcp85_r1i1p1_200501-210012.nc', 'lon')
        elif i == 'HadGEM2-ES':
            tx90p = np.array(
                ncread(
                    '/network/aopp/hera/mad/bakerh/HAPPI/climdex/CMIP5/rcp85/'
                    + var + '/' + var + 'ETCCDI_mon_' + str(i) +
                    '_rcp85_r1i1p1_200501-229912.nc',
                    var + 'ETCCDI')[12:1152, :])
            lat = ncread(
                '/network/aopp/hera/mad/bakerh/HAPPI/climdex/CMIP5/rcp85/' +
                var + '/' + var + 'ETCCDI_mon_' + str(i) +
                '_rcp85_r1i1p1_200501-229912.nc', 'lat')
            lon = ncread(
                '/network/aopp/hera/mad/bakerh/HAPPI/climdex/CMIP5/rcp85/' +
                var + '/' + var + 'ETCCDI_mon_' + str(i) +
                '_rcp85_r1i1p1_200501-229912.nc', 'lon')
        elif i == 'bcc-csm1-1':
            tx90p = ncread(
                '/network/aopp/hera/mad/bakerh/HAPPI/climdex/CMIP5/rcp85/' +
                var + '/' + var + 'ETCCDI_mon_' + str(i) +
                '_rcp85_r1i1p1_200601-230012.nc', var + 'ETCCDI')[:1140, :]
            lat = ncread(
                '/network/aopp/hera/mad/bakerh/HAPPI/climdex/CMIP5/rcp85/' +
                var + '/' + var + 'ETCCDI_mon_' + str(i) +
                '_rcp85_r1i1p1_200601-230012.nc', 'lat')
            lon = ncread(
                '/network/aopp/hera/mad/bakerh/HAPPI/climdex/CMIP5/rcp85/' +
                var + '/' + var + 'ETCCDI_mon_' + str(i) +
                '_rcp85_r1i1p1_200601-230012.nc', 'lon')
        elif i == 'IPSL-CM5A-LR':
            tx90p = ncread(
                '/network/aopp/hera/mad/bakerh/HAPPI/climdex/CMIP5/rcp85/' +
                var + '/' + var + 'ETCCDI_mon_' + str(i) +
                '_rcp85_r1i1p1_200601-230012.nc', var + 'ETCCDI')[:1140, :]
            lat = ncread(
                '/network/aopp/hera/mad/bakerh/HAPPI/climdex/CMIP5/rcp85/' +
                var + '/' + var + 'ETCCDI_mon_' + str(i) +
                '_rcp85_r1i1p1_200601-230012.nc', 'lat')
            lon = ncread(
                '/network/aopp/hera/mad/bakerh/HAPPI/climdex/CMIP5/rcp85/' +
                var + '/' + var + 'ETCCDI_mon_' + str(i) +
                '_rcp85_r1i1p1_200601-230012.nc', 'lon')
        elif i == 'MPI-ESM-LR':
            tx90p = ncread(
                '/network/aopp/hera/mad/bakerh/HAPPI/climdex/CMIP5/rcp85/' +
                var + '/' + var + 'ETCCDI_mon_' + str(i) +
                '_rcp85_r1i1p1_200601-230012.nc', var + 'ETCCDI')[:1140, :]
            lat = ncread(
                '/network/aopp/hera/mad/bakerh/HAPPI/climdex/CMIP5/rcp85/' +
                var + '/' + var + 'ETCCDI_mon_' + str(i) +
                '_rcp85_r1i1p1_200601-230012.nc', 'lat')
            lon = ncread(
                '/network/aopp/hera/mad/bakerh/HAPPI/climdex/CMIP5/rcp85/' +
                var + '/' + var + 'ETCCDI_mon_' + str(i) +
                '_rcp85_r1i1p1_200601-230012.nc', 'lon')
        else:
            tx90p = ncread(
                '/network/aopp/hera/mad/bakerh/HAPPI/climdex/CMIP5/rcp85/' +
                var + '/' + var + 'ETCCDI_mon_' + str(i) +
                '_rcp85_r1i1p1_200601-210012.nc', var + 'ETCCDI')[:1140, :]
            lat = ncread(
                '/network/aopp/hera/mad/bakerh/HAPPI/climdex/CMIP5/rcp85/' +
                var + '/' + var + 'ETCCDI_mon_' + str(i) +
                '_rcp85_r1i1p1_200601-210012.nc', 'lat')
            lon = ncread(
                '/network/aopp/hera/mad/bakerh/HAPPI/climdex/CMIP5/rcp85/' +
                var + '/' + var + 'ETCCDI_mon_' + str(i) +
                '_rcp85_r1i1p1_200601-210012.nc', 'lon')
        tx90p = tx90p[sindices]
        tx90p2 = np.copy(tx90p)
        ts_tx90p = np.copy(tx90p)
        # idx = (np.abs(conversion_0[:, 2]-concs[i])).argmin()
        # yr = conversion_0[idx, 0]
        yr = int(np.round(yrs[i]))
        yr2 = int(np.round(yrs2[i]))
        tx90p = np.mean(tx90p[3 * (yr - 2010):3 * (yr - 2000), :], axis=0)
        tx90p2 = np.mean(tx90p2[3 * (yr2 - 2010):3 * (yr2 - 2000), :], axis=0)
        f = interpolate.interp2d(lon, lat[::-1], tx90p)
        f2 = interpolate.interp2d(lon, lat[::-1], tx90p2)
        ts_tx90p = np.reshape(ts_tx90p, (95, 3, len(lat), len(lon)))
        ts_tx90p = np.mean(ts_tx90p, axis=1)
        ts_tx90p_mid = np.zeros((95))
        ts_tx90p_trop = np.zeros((95))
        '''
        for j in range(95):
            g = interpolate.interp2d(lon, lat[::-1], ts_tx90p[j])
            ts_tx90p_mid[j] = latweightmean(g(lon_n96, lat_n96), msk='MID')
            ts_tx90p_trop[j] = latweightmean(g(lon_n96, lat_n96), msk='TROP')
        ts_tx90p_MID.append(ts_tx90p_mid)
        ts_tx90p_TROP.append(ts_tx90p_trop)
        '''
        tx90p_n96[i] = f(lon_n96, lat_n96)
        tx90p_n96_2[i] = f2(lon_n96, lat_n96)
        emissions.append(concs[i])
        tcres.append(tcre[i])
        tcrs.append(tcr[i])
        years.append(yrs[i])
        global_tass.append(global_tas[i + '_r1i1p1'])
        tx90p_MID.append(latweightmean(f(lon_n96, lat_n96), msk='MID'))
        tx90p_TROP.append(latweightmean(f(lon_n96, lat_n96), msk='TROP'))
    if var == 'tx90p':
        d = 0.9
    else:
        d = 1
    t_l = (tx90p_n96['CanESM2'] + tx90p_n96['MIROC-ESM-CHEM'] +
           tx90p_n96['IPSL-CM5A-LR']) * d / 3
    t_h = (tx90p_n96['GFDL-ESM2G'] + tx90p_n96['inmcm4'] +
           tx90p_n96['HadGEM2-CC']) * d / 3
    t2 = (tx90p_n96_2['CanESM2'] + tx90p_n96_2['MIROC-ESM-CHEM'] +
          tx90p_n96_2['IPSL-CM5A-LR'] + tx90p_n96_2['GFDL-ESM2G'] +
          tx90p_n96_2['inmcm4'] + tx90p_n96_2['HadGEM2-CC']) * d / 6
    t15 = (tx90p_n96['CanESM2'] + tx90p_n96['MIROC-ESM-CHEM'] +
           tx90p_n96['IPSL-CM5A-LR'] + tx90p_n96['GFDL-ESM2G'] +
           tx90p_n96['inmcm4'] + tx90p_n96['HadGEM2-CC']) * d / 6
    '''
    for i in range(len(years)):
        ts_tx90p_MID[i] *= d
        ts_tx90p_TROP[i] *= d
        tx90p_MID[i] *= d
        tx90p_TROP[i] *= d
    '''
    return t_l, t_h, t15, t2, tcrs, tcres, emissions, years, global_tass  #, ts_tx90p_MID, ts_tx90p_TROP
Exemple #17
0
def cmiptas():
    from scipy import interpolate
    from netcdfread import ncread
    import glob
    import numpy as np

    def lscalc(t_w, lsm1, meshlatweight, r1=56, r2=89):
        lsm1 = lsm1[r1:r2, :]
        t_w = t_w[r1:r2, :]
        meshlatweight = meshlatweight[r1:r2, :]
        t_l = np.mean(t_w[lsm1 > 0.5]) / np.mean(meshlatweight[lsm1 > 0.5])
        t_o = np.mean(t_w[lsm1 < 0.5]) / np.mean(meshlatweight[lsm1 < 0.5])
        return t_l, t_o

    lsm = ncread(
        '/home/bakerh/Documents/DPhil/CPDN/Weather-at-Home_ancilmaker-master/lsm_n96_add.nc',
        'lsm')[0, 0, :]
    lsm1 = np.ones((145, 192))
    for i in range(145):
        for j in range(192):
            if lsm[i, j] == 0:
                lsm1[i, j] = 0
    lat_n96 = ncread(
        '/home/bakerh/Documents/DPhil/CPDN/Weather-at-Home_ancilmaker-master/lsm_n96_add.nc',
        'latitude')
    lon_n96 = ncread(
        '/home/bakerh/Documents/DPhil/CPDN/Weather-at-Home_ancilmaker-master/lsm_n96_add.nc',
        'longitude')
    meshlat = np.zeros([np.ma.size(lon_n96), np.ma.size(lat_n96)])
    meshlat[:, :] = lat_n96
    meshlatweight = np.transpose(np.cos(meshlat * np.pi / 180))
    models = [
        'ACCESS1-0_', 'ACCESS1-3_', 'bcc-csm1-1_', 'bcc-csm1-1-m_', 'BNU-ESM_',
        'CanESM2_', 'CCSM4_', 'CNRM-CM5_', 'CSIRO-Mk3-6-0_', 'EC-EARTH_',
        'FGOALS-g2_', 'FGOALS-s2_', 'GFDL-CM3_', 'GFDL-ESM2G_', 'GFDL-ESM2M_',
        'GISS-E2-H_', 'GISS-E2-R_', 'HadGEM2-ES', 'inmcm4_', 'IPSL-CM5A-LR_',
        'IPSL-CM5A-MR_', 'IPSL-CM5B-LR_', 'MPI-ESM-LR_', 'MPI-ESM-MR_',
        'MPI-ESM-P_', 'NorESM1-M_'
    ]
    dT = np.zeros(26)
    aT = np.zeros(26)
    aTt = np.zeros(26)
    for j, model in enumerate(models):
        a = glob.glob(
            '/network/aopp/hera/mad/bakerh/HAPPI/CMIP5/abrupt4xco2/tas_Amon_' +
            model + '*')
        b = glob.glob(
            '/network/aopp/hera/mad/bakerh/HAPPI/CMIP5/piControl/tas_Amon_' +
            model + '*')
        data4 = ncread(a[0], 'tas')
        datac = ncread(b[0], 'tas')
        if len(a) > 1:
            for i in range(len(a) - 1):
                data4 = np.concatenate((data4, ncread(a[i + 1], 'tas')),
                                       axis=0)
        if len(b) > 1:
            for i in range(len(b) - 1):
                datac = np.concatenate((datac, ncread(b[i + 1], 'tas')),
                                       axis=0)
        data4 = np.squeeze(np.mean(data4[1200:1800], axis=0))
        datac = np.squeeze(np.mean(datac[1200:], axis=0))
        lat = ncread(a[0], 'lat')
        lon = ncread(a[0], 'lon')
        f = interpolate.interp2d(lon, lat[::-1], data4)
        g = interpolate.interp2d(lon, lat[::-1], datac)
        data4_n96_w = f(lon_n96, lat_n96) * meshlatweight
        datac_n96_w = g(lon_n96, lat_n96) * meshlatweight
        t4 = np.mean(data4_n96_w) / np.mean(meshlatweight)
        tc = np.mean(datac_n96_w) / np.mean(meshlatweight)
        dt = t4 - tc
        t4_l, t4_o = lscalc(data4_n96_w, lsm1, meshlatweight, 0, 145)
        tc_l, tc_o = lscalc(datac_n96_w, lsm1, meshlatweight, 0, 145)
        t4t_l, t4t_o = lscalc(data4_n96_w, lsm1, meshlatweight, 56, 89)
        tct_l, tct_o = lscalc(datac_n96_w, lsm1, meshlatweight, 56, 89)
        ta = (t4_l - tc_l) - (t4_o - tc_o)
        tat = (t4t_l - tct_l) - (t4t_o - tct_o)
        dT[j] = dt
        aT[j] = ta
        aTt[j] = tat
        print(model)
    return dT, aT, aTt
Exemple #18
0
def plotall(data_l,
            data_h,
            colorlimit,
            mask='yes',
            precip='no',
            pltlbl='RCP8.5 TX90p'):
    from netcdfread import ncread
    import matplotlib as mpl
    from matplotlib import pyplot as plt
    from mpl_toolkits.basemap import Basemap, shiftgrid, addcyclic
    lon = ncread(
        '/network/aopp/hera/mad/bakerh/HAPPI/batch_518/atmos/item3236_monthly_mean/item3236_monthly_mean_a011_2006-01_2016-12.nc',
        'longitude0')
    lat = ncread(
        '/network/aopp/hera/mad/bakerh/HAPPI/batch_518/atmos/item3236_monthly_mean/item3236_monthly_mean_a011_2006-01_2016-12.nc',
        'latitude0')
    summer = data_h - data_l
    fig = plt.figure(facecolor='w', edgecolor='k', linewidth=2)
    if mask == 'yes':
        lsm = ncread(
            '/home/bakerh/Documents/DPhil/CPDN/\
Weather-at-Home_ancilmaker-master/lsm_n96_add.nc', 'lsm')[0, 0, :]
        summer = np.ma.masked_array(summer, mask=np.logical_not(lsm))

    summer, lon3 = shiftgrid(180., summer, lon, start=False)
    summer, lon3 = addcyclic(summer, lon3)

    meshlon, meshlat = np.meshgrid(lon3, lat)
    ctrs = np.linspace(-colorlimit, colorlimit, 17)
    mycmap2 = plt.cm.YlOrRd(np.arange(256))
    mycmap1 = plt.cm.Blues_r(np.arange(256))
    my_cmap = np.concatenate((mycmap1, mycmap2), axis=0)
    if precip == 'yes':
        my_cmap = my_cmap[::-1]
    my_cmap[230:282, :] = 1
    newcmap = mpl.colors.LinearSegmentedColormap.from_list("nj", my_cmap)
    cmp = newcmap

    ax1 = fig.add_subplot(1, 1, 1)
    m = Basemap(projection='moll', lon_0=0, resolution='c')
    m.drawcoastlines()
    m.drawcountries()
    m.drawmapboundary(linewidth=2)
    x, y = m(meshlon, meshlat)
    plot = m.contourf(x,
                      y,
                      summer,
                      ctrs,
                      cmap=cmp,
                      vmin=np.min(ctrs),
                      vmax=np.max(ctrs),
                      extend='both')

    hfont = {'fontname': 'Arial'}
    c = fig.colorbar(plot,
                     ax=ax1,
                     orientation='horizontal',
                     spacing='proportional',
                     aspect=50)
    c.set_label(label='Difference (days season$\mathregular{^{-1}}$)', size=20)
    #cl = ax1.getp(c, 'xmajorticklabels')
    c.ax.tick_params(labelsize=20)

    pad = 15  # in points

    ax1.annotate(pltlbl,
                 xy=(0, 0.5),
                 xytext=(-ax1.yaxis.labelpad - pad, 0),
                 fontsize=32,
                 fontname='Arial',
                 xycoords=ax1.yaxis.label,
                 textcoords='offset points',
                 ha='right',
                 va='center',
                 rotation=90)

    plt.show()
    plt.subplots_adjust(hspace=0,
                        wspace=0.05,
                        top=.97,
                        bottom=0.15,
                        left=.05,
                        right=.95)
Exemple #19
0
def latweightmean(data, msk='no'):
    from netcdfread import ncread
    lsm = ncread(
        '/home/bakerh/Documents/DPhil/CPDN/Weather-at-Home_ancilmaker-master/lsm_n96_add.nc',
        'lsm')[0, 0, :]
    lsm1 = np.ones((145, 192))
    for i in range(145):
        for j in range(192):
            if lsm[i, j] == 0:
                lsm1[i, j] = 0
    lon = ncread(
        '/network/aopp/hera/mad/bakerh/HAPPI/batch_518/atmos/item3236_monthly_mean/item3236_monthly_mean_a011_2006-01_2016-12.nc',
        'longitude0')
    lat = ncread(
        '/network/aopp/hera/mad/bakerh/HAPPI/batch_518/atmos/item3236_monthly_mean/item3236_monthly_mean_a011_2006-01_2016-12.nc',
        'latitude0')
    meshlat = np.zeros([np.ma.size(lon), np.ma.size(lat)])
    meshlat[:, :] = lat
    meshlatweight = np.transpose(np.cos(meshlat * np.pi / 180))
    weighted = data * meshlatweight
    if msk == 'yes':
        mask = np.zeros((145, 192))
        mask[:] = lsm1
        meaned = np.mean(weighted[mask > 0.5]) / np.mean(
            meshlatweight[lsm1 > 0.5])
    elif msk == 'NH':
        mask = np.zeros((73, 192))
        lsm1 = lsm1[:73, :]
        mask[:] = lsm1
        weighted = weighted[:73, :]
        meshlatweight = meshlatweight[:73, :]
        meaned = np.mean(weighted[mask > 0.5]) / np.mean(
            meshlatweight[lsm1 > 0.5])
    elif msk == 'TROP':
        mask = np.zeros((49, 192))
        lsm1 = lsm1[48:97, :]
        mask[:] = lsm1
        weighted = weighted[48:97, :]
        meshlatweight = meshlatweight[48:97, :]
        meaned = np.mean(weighted[mask > 0.5]) / np.mean(
            meshlatweight[lsm1 > 0.5])
    elif msk == 'MID':
        mask = np.zeros((48, 192))
        lsm1 = lsm1[:48, :]
        mask[:] = lsm1
        weighted = weighted[:48, :]
        meshlatweight = meshlatweight[:48, :]
        meaned = np.mean(weighted[mask > 0.5]) / np.mean(
            meshlatweight[lsm1 > 0.5])
    elif msk == 'no':
        meaned = np.mean(weighted) / np.mean(meshlatweight)
    elif np.ma.size(msk) == 5:
        mask = np.zeros((msk[2] - msk[1], 192 + msk[4] - msk[3]))
        lsm1 = np.concatenate(
            (lsm1[msk[1]:msk[2], msk[3]:], lsm1[msk[1]:msk[2], :msk[4]]),
            axis=1)
        mask[:] = lsm1
        weighted = np.concatenate(
            (weighted[msk[1]:msk[2],
                      msk[3]:], weighted[:, msk[1]:msk[2], :msk[4]]),
            axis=2)
        meshlatweight = np.concatenate(
            (meshlatweight[msk[1]:msk[2],
                           msk[3]:], meshlatweight[msk[1]:msk[2], :msk[4]]),
            axis=1)
        meaned = np.mean(weighted[mask > 0.5]) / np.mean(
            meshlatweight[lsm1 > 0.5])
    else:
        mask = np.zeros((msk[1] - msk[0], msk[3] - msk[2]))
        lsm1 = lsm1[msk[0]:msk[1], msk[2]:msk[3]]
        mask[:] = lsm1
        weighted = weighted[msk[0]:msk[1], msk[2]:msk[3]]
        meshlatweight = meshlatweight[msk[0]:msk[1], msk[2]:msk[3]]
        meaned = np.mean(weighted[mask > 0.5]) / np.mean(
            meshlatweight[lsm1 > 0.5])
    return meaned
Exemple #20
0
def animate_rw(
    data,
    colorlimit=0.5,
    ts=6,
    title='',
    save='no',
    location='/home/bakerh/Documents/DPhil/Figures/Python/BTmodel/animations/new.mp4'
):
    """
    Plots animation of input grid of quantity at sigma and lat coords

    Parameters
    ----------
    data: array
        data being plotted
    sigma: array
        sigma levels of data
    lat: array
        latitudes of data
    title: str
        optional title
    """
    import numpy as np
    import matplotlib as mpl
    import matplotlib.pyplot as plt
    import matplotlib.animation as animation
    from netcdfread import ncread
    from mpl_toolkits.basemap import Basemap, shiftgrid, addcyclic
    lon = ncread(
        '/network/aopp/hera/mad/bakerh/BTmodel_COR/main/inputs/forcing_ghg.nc',
        'lon')
    lat = ncread(
        '/network/aopp/hera/mad/bakerh/BTmodel_COR/main/inputs/forcing_ghg.nc',
        'lat')

    summer = np.copy(data[::ts])

    fig = plt.figure(facecolor='w', edgecolor='k', linewidth=2)
    summer, lon = shiftgrid(180., summer, lon, start=False)
    summer, lon = addcyclic(summer, lon)
    meshlon, meshlat = np.meshgrid(lon, lat)
    ctrs = np.linspace(-colorlimit, colorlimit, 17)
    mycmap2 = plt.cm.YlOrRd(np.arange(256))
    mycmap1 = plt.cm.Blues_r(np.arange(256))
    my_cmap = np.concatenate((mycmap1, mycmap2), axis=0)
    my_cmap[230:282, :] = 1
    newcmap = mpl.colors.LinearSegmentedColormap.from_list("nj", my_cmap)
    cmp = newcmap

    def updatefig(i):
        fig.clear()

        ax1 = fig.add_subplot(1, 1, 1)
        m = Basemap(projection='cyl',
                    llcrnrlat=-90,
                    urcrnrlat=90,
                    llcrnrlon=-180,
                    urcrnrlon=180,
                    resolution='c')
        m.drawcoastlines()
        m.drawcountries()
        m.drawmapboundary(linewidth=2)
        x, y = m(meshlon, meshlat)
        plot = m.contourf(x,
                          y,
                          summer[i] - summer[0],
                          ctrs,
                          cmap=cmp,
                          vmin=np.min(ctrs),
                          vmax=np.max(ctrs),
                          extend='both')
        # parallels = m.drawparallels(np.arange(-90., 91., 15.))
        # meridians = m.drawmeridians(np.arange(-180., 181., 30.))
        # m.drawparallels(parallels, labels=[True, True, True, True])
        # m.drawmeridians(meridians, labels=[True, True, True, True])
        b = fig.colorbar(plot,
                         aspect=50,
                         shrink=0.75,
                         spacing='proportional',
                         orientation='horizontal',
                         extend='max',
                         pad=0.05)
        b.set_label(label=r'V200 (1x10$^{-6}$ ms$^{-1}$)')
        j = i / (24 / ts)
        ax1.set_title(' t=' + str('%02.3f' % j), loc='left', y=.9)
        plt.subplots_adjust(top=.99, bottom=0.01, left=.05, right=.95)
        plt.suptitle(title, y=.85)
        plt.draw()

    anim = animation.FuncAnimation(fig, updatefig, len(summer))
    if save == 'yes':
        anim.save(location, codec='mpeg4', bitrate=8000, dpi=300)
    return anim
Exemple #21
0
def comp(model, var='tx90p'):
    from scipy import interpolate
    from netcdfread import ncread
    sindices = np.zeros((95 * 3))
    for i in range(95):
        sindices[3 * i:3 * (i + 1)] = [5 + 12 * i, 6 + 12 * i, 7 + 12 * i]
    sindices = sindices.astype(int)
    lat_n96 = ncread(
        '/home/bakerh/Documents/DPhil/CPDN/Weather-at-Home_ancilmaker-master/lsm_n96_add.nc',
        'latitude')
    lon_n96 = ncread(
        '/home/bakerh/Documents/DPhil/CPDN/Weather-at-Home_ancilmaker-master/lsm_n96_add.nc',
        'longitude')

    yrs = {}
    # yrs['CESM1-BGC'] = 2019.6038556835267
    yrs['CanESM2'] = 2015.6501388153354
    yrs['GFDL-ESM2G'] = 2040.2726255644302
    yrs['GFDL-ESM2M'] = 2038.4461621682028
    yrs['HadGEM2-CC'] = 2030.5237032804
    yrs['HadGEM2-ES'] = 2028.1144760733512
    yrs['IPSL-CM5A-LR'] = 2013.7490131087695
    yrs['IPSL-CM5A-MR'] = 2018.568003728501
    yrs['IPSL-CM5B-LR'] = 2025.1511344273508
    yrs['MIROC-ESM'] = 2021.3187712711444
    yrs['MIROC-ESM-CHEM'] = 2018.89262095655
    yrs['MPI-ESM-LR'] = 2020.0421238126532
    # yrs['NorESM1-ME'] = 2034.3684277126238
    yrs['bcc-csm1-1'] = 2022.8345355891056
    yrs['inmcm4'] = 2045.194355545509

    yrs26 = {}
    yrs26['CanESM2'] = 2015.9168461250079
    yrs26['HadGEM2-ES'] = 2031.2511570532158
    yrs26['IPSL-CM5A-LR'] = 2013.6504936554309
    yrs26['IPSL-CM5A-MR'] = 2019.6423318791442
    yrs26['MIROC-ESM'] = 2022.8139042931136
    yrs26['MIROC-ESM-CHEM'] = 2016.8634829024122
    yrs26['MPI-ESM-LR'] = 2025.4963052174598
    # yrs['NorESM1-ME'] = 2044.9730257768917
    yrs26['bcc-csm1-1'] = 2025.1860768601402

    i = model
    if i == 'HadGEM2-CC':
        tx90p = np.array(
            ncread(
                '/network/aopp/hera/mad/bakerh/HAPPI/climdex/CMIP5/rcp85/' +
                var + '/' + var + 'ETCCDI_mon_' + str(i) +
                '_rcp85_r1i1p1_200501-210012.nc', var + 'ETCCDI')[12:, :])
        tx90p26 = np.array(
            ncread(
                '/network/aopp/hera/mad/bakerh/HAPPI/climdex/CMIP5/rcp26/' +
                var + '/' + var + 'ETCCDI_mon_' + str(i) +
                '_rcp26_r1i1p1_200501-210012.nc', var + 'ETCCDI')[12:, :])
        lat = ncread(
            '/network/aopp/hera/mad/bakerh/HAPPI/climdex/CMIP5/rcp85/' + var +
            '/' + var + 'ETCCDI_mon_' + str(i) +
            '_rcp85_r1i1p1_200501-210012.nc', 'lat')
        lon = ncread(
            '/network/aopp/hera/mad/bakerh/HAPPI/climdex/CMIP5/rcp85/' + var +
            '/' + var + 'ETCCDI_mon_' + str(i) +
            '_rcp85_r1i1p1_200501-210012.nc', 'lon')
    elif i == 'HadGEM2-ES':
        tx90p = np.array(
            ncread(
                '/network/aopp/hera/mad/bakerh/HAPPI/climdex/CMIP5/rcp85/' +
                var + '/' + var + 'ETCCDI_mon_' + str(i) +
                '_rcp85_r1i1p1_200501-229912.nc', var + 'ETCCDI')[12:1152, :])
        tx90p26 = np.array(
            ncread(
                '/network/aopp/hera/mad/bakerh/HAPPI/climdex/CMIP5/rcp26/' +
                var + '/' + var + 'ETCCDI_mon_' + str(i) +
                '_rcp26_r1i1p1_200501-229912.nc', var + 'ETCCDI')[12:1152, :])
        lat = ncread(
            '/network/aopp/hera/mad/bakerh/HAPPI/climdex/CMIP5/rcp85/' + var +
            '/' + var + 'ETCCDI_mon_' + str(i) +
            '_rcp85_r1i1p1_200501-229912.nc', 'lat')
        lon = ncread(
            '/network/aopp/hera/mad/bakerh/HAPPI/climdex/CMIP5/rcp85/' + var +
            '/' + var + 'ETCCDI_mon_' + str(i) +
            '_rcp85_r1i1p1_200501-229912.nc', 'lon')
    elif i == 'bcc-csm1-1':
        tx90p = ncread(
            '/network/aopp/hera/mad/bakerh/HAPPI/climdex/CMIP5/rcp85/' + var +
            '/' + var + 'ETCCDI_mon_' + str(i) +
            '_rcp85_r1i1p1_200601-230012.nc', var + 'ETCCDI')[:1140, :]
        tx90p26 = ncread(
            '/network/aopp/hera/mad/bakerh/HAPPI/climdex/CMIP5/rcp26/' + var +
            '/' + var + 'ETCCDI_mon_' + str(i) +
            '_rcp26_r1i1p1_200601-230012.nc', var + 'ETCCDI')[:1140, :]
        lat = ncread(
            '/network/aopp/hera/mad/bakerh/HAPPI/climdex/CMIP5/rcp85/' + var +
            '/' + var + 'ETCCDI_mon_' + str(i) +
            '_rcp85_r1i1p1_200601-230012.nc', 'lat')
        lon = ncread(
            '/network/aopp/hera/mad/bakerh/HAPPI/climdex/CMIP5/rcp85/' + var +
            '/' + var + 'ETCCDI_mon_' + str(i) +
            '_rcp85_r1i1p1_200601-230012.nc', 'lon')
    elif i == 'IPSL-CM5A-LR':
        tx90p = ncread(
            '/network/aopp/hera/mad/bakerh/HAPPI/climdex/CMIP5/rcp85/' + var +
            '/' + var + 'ETCCDI_mon_' + str(i) +
            '_rcp85_r1i1p1_200601-230012.nc', var + 'ETCCDI')[:1140, :]
        tx90p26 = ncread(
            '/network/aopp/hera/mad/bakerh/HAPPI/climdex/CMIP5/rcp26/' + var +
            '/' + var + 'ETCCDI_mon_' + str(i) +
            '_rcp26_r1i1p1_200601-230012.nc', var + 'ETCCDI')[:1140, :]
        lat = ncread(
            '/network/aopp/hera/mad/bakerh/HAPPI/climdex/CMIP5/rcp85/' + var +
            '/' + var + 'ETCCDI_mon_' + str(i) +
            '_rcp85_r1i1p1_200601-230012.nc', 'lat')
        lon = ncread(
            '/network/aopp/hera/mad/bakerh/HAPPI/climdex/CMIP5/rcp85/' + var +
            '/' + var + 'ETCCDI_mon_' + str(i) +
            '_rcp85_r1i1p1_200601-230012.nc', 'lon')
    elif i == 'MPI-ESM-LR':
        tx90p = ncread(
            '/network/aopp/hera/mad/bakerh/HAPPI/climdex/CMIP5/rcp85/' + var +
            '/' + var + 'ETCCDI_mon_' + str(i) +
            '_rcp85_r1i1p1_200601-230012.nc', var + 'ETCCDI')[:1140, :]
        tx90p26 = ncread(
            '/network/aopp/hera/mad/bakerh/HAPPI/climdex/CMIP5/rcp26/' + var +
            '/' + var + 'ETCCDI_mon_' + str(i) +
            '_rcp26_r1i1p1_200601-230012.nc', var + 'ETCCDI')[:1140, :]
        lat = ncread(
            '/network/aopp/hera/mad/bakerh/HAPPI/climdex/CMIP5/rcp85/' + var +
            '/' + var + 'ETCCDI_mon_' + str(i) +
            '_rcp85_r1i1p1_200601-230012.nc', 'lat')
        lon = ncread(
            '/network/aopp/hera/mad/bakerh/HAPPI/climdex/CMIP5/rcp85/' + var +
            '/' + var + 'ETCCDI_mon_' + str(i) +
            '_rcp85_r1i1p1_200601-230012.nc', 'lon')
    else:
        tx90p = ncread(
            '/network/aopp/hera/mad/bakerh/HAPPI/climdex/CMIP5/rcp85/' + var +
            '/' + var + 'ETCCDI_mon_' + str(i) +
            '_rcp85_r1i1p1_200601-210012.nc', var + 'ETCCDI')[:1140, :]
        tx90p26 = ncread(
            '/network/aopp/hera/mad/bakerh/HAPPI/climdex/CMIP5/rcp26/' + var +
            '/' + var + 'ETCCDI_mon_' + str(i) +
            '_rcp26_r1i1p1_200601-210012.nc', var + 'ETCCDI')[:1140, :]
        lat = ncread(
            '/network/aopp/hera/mad/bakerh/HAPPI/climdex/CMIP5/rcp85/' + var +
            '/' + var + 'ETCCDI_mon_' + str(i) +
            '_rcp85_r1i1p1_200601-210012.nc', 'lat')
        lon = ncread(
            '/network/aopp/hera/mad/bakerh/HAPPI/climdex/CMIP5/rcp85/' + var +
            '/' + var + 'ETCCDI_mon_' + str(i) +
            '_rcp85_r1i1p1_200601-210012.nc', 'lon')
    tx90p = tx90p[sindices]
    tx90p26 = tx90p26[sindices]
    # idx = (np.abs(conversion_0[:, 2]-concs[i])).argmin()
    # yr = conversion_0[idx, 0]
    yr = np.round(yrs[i])
    yr26 = np.round(yrs26[i])
    tx90p = np.mean(tx90p[3 * (yr - 2010):3 * (yr - 2000), :], axis=0)
    tx90p26 = np.mean(tx90p26[3 * (yr26 - 2010):3 * (yr26 - 2000), :], axis=0)
    f = interpolate.interp2d(lon, lat[::-1], tx90p)
    f26 = interpolate.interp2d(lon, lat[::-1], tx90p26)
    tx90p_n96 = f(lon_n96, lat_n96) * .9
    tx90p26_n96 = f26(lon_n96, lat_n96) * .9
    plotall(tx90p26_n96,
            tx90p_n96,
            20,
            pltlbl=model + ' RCP8.5 - RCP2.6 TX90p')
Exemple #22
0
def maplotr(pdata, model, colormax=1, colormin=-999, title='', precip='no'):
    """
    Plots input grid with map of world overlaid

    Parameters
    ----------
    plotdata: array
        data being plotted
    title: str
        optional title
    """
    from mpl_toolkits.basemap import Basemap, shiftgrid, addcyclic
    import numpy as np
    import matplotlib as mpl
    import matplotlib.pyplot as plt
    from netcdfread import ncread
    if colormin == -999:
        colormin = -colormax
    if model == 'had':
        lon = ncread(
            '/network/aopp/hera/mad/bakerh/HAPPI/HadAM3P-N96/All-Hist/mon/tas/item3236_monthly_mean_a011_2006-01_2016-12.nc',
            'longitude0')
        lat = ncread(
            '/network/aopp/hera/mad/bakerh/HAPPI/HadAM3P-N96/All-Hist/mon/tas/item3236_monthly_mean_a011_2006-01_2016-12.nc',
            'latitude0')
    if model == 'mir':
        lat = ncread(
            '/network/aopp/hera/mad/bakerh/HAPPI/MIROC5/All-Hist/day/tas/tas_Aday_MIROC5_All-Hist_est1_v2-0_run001_20060101-20161231.nc',
            'lat')
        lon = np.arange(0, 360, 360 / 256)
    if model == 'cam':
        lat = np.linspace(-90, 90, 96)
        lon = np.linspace(0, 357.5, 144)
    plt.figure()
    pdata, lon = shiftgrid(180., pdata, lon, start=False)
    pdata, lon = addcyclic(pdata, lon)
    meshlon, meshlat = np.meshgrid(lon, lat)

    m = Basemap(projection='cyl',
                llcrnrlat=-90,
                urcrnrlat=90,
                llcrnrlon=-180,
                urcrnrlon=180,
                resolution='c')
    m.drawcoastlines()
    m.drawmapboundary()
    x, y = m(meshlon, meshlat)
    mycmap2 = plt.cm.YlOrRd(np.arange(256))
    mycmap1 = plt.cm.Blues_r(np.arange(256))
    my_cmap = np.concatenate((mycmap1, mycmap2), axis=0)
    my_cmap[230:282, :] = 1
    if precip == 'yes':
        my_cmap = my_cmap[::-1]
    newcmap = mpl.colors.LinearSegmentedColormap.from_list("newjet", my_cmap)
    ctrs = np.linspace(colormin, colormax, 17)
    plot = m.contourf(x,
                      y,
                      pdata,
                      ctrs,
                      cmap=newcmap,
                      vmin=np.min(ctrs),
                      vmax=np.max(ctrs),
                      extend='both')
    b = plt.colorbar(plot,
                     orientation='horizontal',
                     aspect=50,
                     shrink=0.75,
                     spacing='proportional')
    b.set_label(label=r'pr (mm day$^{-1}$)')
    parallels = m.drawparallels(np.arange(-90., 91., 15.))
    meridians = m.drawmeridians(np.arange(-180., 181., 30))
    m.drawparallels(parallels, labels=[True, True, True, True])
    m.drawmeridians(meridians, labels=[True, True, True, True])
    plt.title(title, y=1.08)
    plt.show()
Exemple #23
0
def mapplot60(plotdata_sig, plotdata, mask='yes', title=''):
    """
    Plots input grid with map of world overlaid

    Parameters
    ----------
    plotdata: array
        data being plotted
    title: str
        optional title
    """
    from mpl_toolkits.basemap import Basemap
    import numpy as np
    import matplotlib as mpl
    import matplotlib.pyplot as plt
    from netcdfread import ncread
    lat = np.linspace(90, -90, 145)
    lon = np.arange(0, 360, 1.875)
    long = np.concatenate((lon, [360]))
    fig, axs = plt.subplots(2, 2, facecolor='w',
                            edgecolor='k', linewidth=2)
    # fig.suptitle('North Atlantic Jet Sensitivity', fontsize=20, y=0.96)
    for a in range(2):
        for b in range(2):
            if b == 0:
                mx = 1.2
            else:
                mx = .8
            plotdata1 = np.concatenate((plotdata_sig[a, 1-b, :],
                                        np.expand_dims(plotdata_sig[a, 1-b, :, 0],
                                        axis=1)), axis=1) * 1e5
            plotdata3 = np.concatenate((plotdata[a, 1-b, :],
                                        np.expand_dims(plotdata[a, 1-b, :, 0],
                                        axis=1)), axis=1) * 1e5
            if mask == 'yes':
                lsm = ncread('/home/bakerh/Documents/DPhil/CPDN/\
Weather-at-Home_ancilmaker-master/lsm_n96_add.nc', 'lsm')[0, 0, :]
                lsm = np.concatenate((lsm, np.expand_dims(lsm[:, 0], axis=1)),
                                     axis=1)
                plotdata1 = np.ma.masked_array(plotdata1, lsm)
                plotdata3 = np.ma.masked_array(plotdata3, lsm)
            meshlon, meshlat = np.meshgrid(long, lat)
            ax1 = axs[a, b]
            m = Basemap(projection='cyl', llcrnrlat=-60, urcrnrlat=60,
                        llcrnrlon=0, urcrnrlon=360, resolution='c', ax=ax1)
            m.drawcoastlines()
            m.drawmapboundary(linewidth=2)
            x, y = m(meshlon, meshlat)
            mycmap2 = plt.cm.YlOrRd(np.arange(256))
            mycmap1 = plt.cm.Blues_r(np.arange(256))
            my_cmap = np.concatenate((mycmap1, mycmap2), axis=0)
            #my_cmap[239:274, :] = 1
            newcmap = mpl.colors.LinearSegmentedColormap.from_list("newjet",
                                                                   my_cmap)
            caxismin, caxismax, ctrs = -mx, mx, np.linspace(-mx, mx, 17)
            plot = m.contourf(x, y, plotdata1, ctrs,
                              cmap=newcmap, vmin=caxismin, vmax=caxismax,
                              extend='both')
            m.contour(x, y, plotdata3, ctrs, colors='k')
            ax1.set_ylim(-60, 60)
            m.drawparallels(np.arange(-60, 90, 30),
                            labels=[True, False, False, True], linewidth=0)
            m.drawmeridians(np.arange(0, 390, 30),
                            labels=[True, False, False, True], linewidth=0)
            ax1.set_yticks(np.arange(-60., 90., 30.))
            ax1.set_xticks(np.arange(0., 390., 30.))
            ax1.tick_params(labelleft='off', labelbottom='off', which='major',
                            direction='out', length=5, width=2)
            ax1.set_yticks(np.arange(-60., 70., 10.), minor=True)
            ax1.set_xticks(np.arange(0., 370., 10.), minor=True)
            ax1.tick_params(labelleft='off', labelbottom='off', which='minor',
                            direction='out', length=4, width=1)
            if a == 0 and b == 0:
                ax1.set_ylabel('DJF', fontsize=16, labelpad=25)
                ax1.set_title('Latitude', fontsize=16, y=1.08)
            if a == 1 and b == 0:
                c = fig.colorbar(plot, ax=ax1, orientation='horizontal',
                                 spacing='proportional', aspect=50)
                ax1.set_ylabel('JJA', fontsize=16, labelpad=25)
                c.set_label(label='Poleward jet latitude shift ($^\circ$ [$\mathregular{1x10^5km^2}$K]$\mathregular{^{-1}}$)', size=16)
            if a == 0 and b == 1:
                ax1.set_title('Speed', fontsize=16, y=1.08)
            if a == 1 and b == 1:
                c = fig.colorbar(plot, ax=ax1, orientation='horizontal',
                                 spacing='proportional', aspect=50)
                c.set_label(label='Jet speed increase (ms$\mathregular{^{-1}}$ [$\mathregular{1x10^5km^2}$K]$\mathregular{^{-1}}$)', size=16)
    plt.subplots_adjust(hspace=0, wspace=0.1, top=.95, bottom=0.05, left=.05,
                        right=.95)

    plt.show()
Exemple #24
0
def cmipw5(v_had):
    import glob
    from netcdfread import ncread
    from scipy import interpolate
    lat_n96 = ncread(
        '/home/bakerh/Documents/DPhil/CPDN/Weather-at-Home_ancilmaker-master/lsm_n96_add.nc',
        'latitude')
    lon_n96 = ncread(
        '/home/bakerh/Documents/DPhil/CPDN/Weather-at-Home_ancilmaker-master/lsm_n96_add.nc',
        'longitude')

    models = [
        'ACCESS1-0_', 'ACCESS1-3_', 'bcc-csm1-1_', 'bcc-csm1-1-m_', 'BNU-ESM_',
        'CanESM2_', 'CCSM4_', 'CESM1-BGC_', 'CESM1-CAM5_', 'CMCC-CESM_',
        'CMCC-CM_', 'CMCC-CMS_', 'CNRM-CM5_', 'CSIRO-Mk3-6-0_', 'EC-EARTH_',
        'FGOALS-g2_', 'FIO-ESM_', 'GFDL-CM3_', 'GFDL-ESM2G_', 'GFDL-ESM2M_',
        'GISS-E2-H-CC_', 'GISS-E2-H_', 'GISS-E2-R-CC_', 'GISS-E2-R_',
        'HadGEM2-AO_', 'HadGEM2-CC_', 'HadGEM2-ES_', 'inmcm4_',
        'IPSL-CM5A-LR_', 'IPSL-CM5A-MR_', 'IPSL-CM5B-LR_', 'MPI-ESM-LR_',
        'MPI-ESM-MR_', 'NorESM1-ME_', 'NorESM1-M_'
    ]
    indices = {}
    for k, model in enumerate(models):
        a = glob.glob(
            '/network/aopp/hera/mad/bakerh/HAPPI/CMIP5/historical/va/va_Amon_'
            + model + '*')
        b = glob.glob(
            '/network/aopp/hera/mad/bakerh/HAPPI/CMIP5/rcp85/va/va_Amon_' +
            model + '*')
        m = 6
        e = 156
        time = np.arange(1850, 2101)
        if model == 'bcc-csm1-1_':
            time = np.arange(1850, 2301)
        elif model == 'IPSL-CM5A-LR_':
            time = np.arange(1850, 2301)
        elif model == 'CCSM4_':
            time = np.arange(1850, 2301)
        elif model == 'CNRM-CM5_':
            time = np.arange(1850, 2301)
        elif model == 'CSIRO-Mk3-6-0_':
            time = np.arange(1850, 2301)
        elif model == 'GISS-E2-R_':
            time = np.arange(1850, 2301)
        elif model == 'GISS-E2-H_':
            time = np.arange(1850, 2301)
        elif model == 'MPI-ESM-LR_':
            time = np.arange(1850, 2301)
        elif model == 'GFDL-CM3_':
            e = 146
            time = np.arange(1860, 2101)
        elif model == 'GFDL-ESM2G_':
            e = 145
            time = np.arange(1861, 2101)
        elif model == 'GFDL-ESM2M_':
            e = 145
            time = np.arange(1861, 2101)
        elif model == 'HadGEM2-CC_':
            m = 5
            e = 146
            time = np.arange(1860, 2100)
        elif model == 'HadGEM2-AO_':
            e = 146
            time = np.arange(1860, 2100)
        elif model == 'HadGEM2-ES_':
            m = 5
            e = 146
            time = np.arange(1860, 2300)
        elif model == 'FGOALS-g2_':
            m = 6
            e = 106
            time = np.arange(1900, 2102)

        va = ncread(a[0], 'va')[m::12, 9]
        va1 = ncread(b[0], 'va')[m::12, 9]
        if len(a) > 1:
            for i in range(len(a) - 1):
                va = np.concatenate((va, ncread(a[i + 1], 'va')[m::12, 9]),
                                    axis=0)
        if len(b) > 1:
            for i in range(len(b) - 1):
                va1 = np.concatenate((va1, ncread(b[i + 1], 'va')[m::12, 9]),
                                     axis=0)
        lat = ncread(a[0], 'lat')
        lon = ncread(a[0], 'lon')
        va = va[:e]
        va_j2 = np.concatenate((va, va1), axis=0)
        va_j2_96 = np.zeros((len(va_j2), 145, 192))
        for j in range(len(va_j2)):
            f = interpolate.interp2d(lon, lat[::-1], va_j2[j])
            va_j2_96[j] = f(lon_n96, lat_n96)
        meshlat = np.zeros([np.ma.size(lon_n96), np.ma.size(lat_n96)])
        meshlat[:, :] = lat_n96
        meshlatweight = np.cos(meshlat.transpose() * np.pi / 180)
        index_j2 = np.zeros(len(va_j2))
        for i in range(len(va_j2)):
            index_j2[i] = np.sum(
                v_had[12:49] * va_j2_96[i, 12:49] *
                meshlatweight[12:49]) / (np.sqrt(
                    np.sum(v_had[12:49] * v_had[12:49] *
                           meshlatweight[12:49])) * np.sqrt(
                               np.sum(va_j2_96[i, 12:49] * va_j2_96[i, 12:49] *
                                      meshlatweight[12:49])))
        indices[model] = time, index_j2
        print(model)
    return indices
Exemple #25
0
def rws_fprime_co2(ua200, va200):
    from windspharm.standard import VectorWind
    from netcdfread import ncread, ncsave
    from scipy import interpolate

    lon42 = ncread(
        '/network/aopp/hera/mad/bakerh/BTmodel_COR/main/inputs/forcing_ghg.nc',
        'lon')
    lat42 = ncread(
        '/network/aopp/hera/mad/bakerh/BTmodel_COR/main/inputs/forcing_ghg.nc',
        'lat')
    # HadAM3P
    lon = ncread(
        '/network/aopp/hera/mad/bakerh/HAPPI/HadAM3P-N96/All-Hist/mon/tas/item3236_monthly_mean_a011_2006-01_2016-12.nc',
        'longitude0')
    lat = ncread(
        '/network/aopp/hera/mad/bakerh/HAPPI/HadAM3P-N96/Plus15-Future_LCO2/day/ua/item15201_daily_mean_a00b_2090-01_2100-12.nc',
        'latitude1')
    # MIROC5
    # lat = ncread('/network/aopp/hera/mad/bakerh/HAPPI/MIROC5/All-Hist/day/tas/tas_Aday_MIROC5_All-Hist_est1_v2-0_run001_20060101-20161231.nc','lat')
    # lon = np.arange(0, 360, 360/256)
    # CAM4
    #lat = np.linspace(-90, 90, 96)
    #lon = np.linspace(0, 357.5, 144)
    u = ua200['Plus15-Future_LCO2']
    v = va200['Plus15-Future_LCO2']
    u_ghg = ua200['Plus15-Future_HCO2']
    v_ghg = va200['Plus15-Future_HCO2']

    uwnd = np.zeros((64, 128, len(u)))
    vwnd = np.zeros((64, 128, len(v)))
    uwnd_ghg = np.zeros((64, 128, len(u_ghg)))
    vwnd_ghg = np.zeros((64, 128, len(u_ghg)))

    u = np.transpose(u, (1, 2, 0))
    v = np.transpose(v, (1, 2, 0))
    u_ghg = np.transpose(u_ghg, (1, 2, 0))
    v_ghg = np.transpose(v_ghg, (1, 2, 0))

    for i in range(np.ma.size(uwnd, axis=2)):
        h = interpolate.interp2d(lon, lat[::-1], u[:, :, i])
        uwnd[:, :, i] = h(lon42, lat42[::-1])
        g = interpolate.interp2d(lon, lat[::-1], v[:, :, i])
        vwnd[:, :, i] = g(lon42, lat42[::-1])
    for i in range(np.ma.size(uwnd_ghg, axis=2)):
        h = interpolate.interp2d(lon, lat[::-1], u_ghg[:, :, i])
        uwnd_ghg[:, :, i] = h(lon42, lat42[::-1])
        g = interpolate.interp2d(lon, lat[::-1], v_ghg[:, :, i])
        vwnd_ghg[:, :, i] = g(lon42, lat42[::-1])

    w = VectorWind(uwnd, vwnd)
    w_ghg = VectorWind(uwnd_ghg, vwnd_ghg)

    eta = w.absolutevorticity()
    eta_ghg = w_ghg.absolutevorticity()

    div = w.divergence()
    div_ghg = w_ghg.divergence()

    uchi, vchi = w.irrotationalcomponent()
    uchi_ghg, vchi_ghg = w_ghg.irrotationalcomponent()

    etax, etay = w.gradient(eta)
    # etax_ghg, etay_ghg = w_ghg.gradient(eta_ghg)

    eta = np.transpose(eta, (2, 0, 1))
    eta_ghg = np.transpose(eta_ghg, (2, 0, 1))

    div = np.transpose(div, (2, 0, 1))
    div_ghg = np.transpose(div_ghg, (2, 0, 1))

    etax = np.transpose(etax, (2, 0, 1))
    etay = np.transpose(etay, (2, 0, 1))

    uchi = np.transpose(uchi, (2, 0, 1))
    uchi_ghg = np.transpose(uchi_ghg, (2, 0, 1))
    vchi = np.transpose(vchi, (2, 0, 1))
    vchi_ghg = np.transpose(vchi_ghg, (2, 0, 1))

    f_ghg = -eta * (div_ghg - div) - ((uchi_ghg - uchi) * etax +
                                      (vchi_ghg - vchi) * etay)

    meshlon, meshlat = np.meshgrid(lon42, lat42)
    '''
    ncsave('/home/bakerh/Downloads/vort200_control', lat42, lon42, eta.mean(axis=0)-2*np.sin(meshlat*np.pi/180)*7.2921e-5, 'vorticity')
    ncsave('/home/bakerh/Downloads/forcing_ghg', lat42, lon42, f_ghg.mean(axis=0), 'forcing')
    '''
    month = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])
    ncsave('/home/bakerh/Downloads/vort200_control', month, lat42, lon42,
           eta - 2 * np.sin(meshlat * np.pi / 180) * 7.2921e-5, 'vorticity')
    ncsave('/home/bakerh/Downloads/forcing_ghg', month, lat42, lon42, f_ghg,
           'forcing')
Exemple #26
0
def ming_forcing(ua, va, psl):
    from windspharm.standard import VectorWind
    from netcdfread import ncread, ncsave
    from scipy import interpolate

    lon42 = ncread(
        '/network/aopp/hera/mad/bakerh/BTmodel_COR/main/inputs/forcing_ghg.nc',
        'lon')
    lat42 = ncread(
        '/network/aopp/hera/mad/bakerh/BTmodel_COR/main/inputs/forcing_ghg.nc',
        'lat')
    lon = ncread(
        '/network/aopp/hera/mad/bakerh/HAPPI/HadAM3P-N96/All-Hist/mon/tas/item3236_monthly_mean_a011_2006-01_2016-12.nc',
        'longitude0')
    lat = ncread(
        '/network/aopp/hera/mad/bakerh/HAPPI/HadAM3P-N96/Plus15-Future_LCO2/day/ua/item15201_daily_mean_a00b_2090-01_2100-12.nc',
        'latitude1')
    lat145 = ncread(
        '/network/aopp/hera/mad/bakerh/HAPPI/HadAM3P-N96/All-Hist/mon/tas/item3236_monthly_mean_a011_2006-01_2016-12.nc',
        'latitude0')

    u = ua['All-Nat'][1]
    v = va['All-Nat'][1]
    u_sst = ua['GHG-Nat'][1]
    v_sst = va['GHG-Nat'][1]
    u_ghg = ua['SST-Nat'][1]
    v_ghg = va['SST-Nat'][1]
    p = psl['All-Nat'][1]
    p_sst = psl['GHG-Nat'][1]
    p_ghg = psl['SST-Nat'][1]

    uwnd = np.zeros((64, 128, len(u)))
    vwnd = np.zeros((64, 128, len(v)))
    uwnd_sst = np.zeros((64, 128, len(u_sst)))
    vwnd_sst = np.zeros((64, 128, len(u_sst)))
    uwnd_ghg = np.zeros((64, 128, len(u_ghg)))
    vwnd_ghg = np.zeros((64, 128, len(u_ghg)))
    ps = np.zeros((64, 128, len(p)))
    ps_sst = np.zeros((64, 128, len(p_sst)))
    ps_ghg = np.zeros((64, 128, len(p_ghg)))

    u = np.transpose(u, (1, 2, 0))
    v = np.transpose(v, (1, 2, 0))
    u_sst = np.transpose(u_sst, (1, 2, 0))
    v_sst = np.transpose(v_sst, (1, 2, 0))
    u_ghg = np.transpose(u_ghg, (1, 2, 0))
    v_ghg = np.transpose(v_ghg, (1, 2, 0))
    p = np.transpose(p, (1, 2, 0))
    p_sst = np.transpose(p_sst, (1, 2, 0))
    p_ghg = np.transpose(p_ghg, (1, 2, 0))

    for i in range(np.ma.size(uwnd, axis=2)):
        h = interpolate.interp2d(lon, lat[::-1], u[:, :, i])
        uwnd[:, :, i] = h(lon42, lat42[::-1])
        g = interpolate.interp2d(lon, lat[::-1], v[:, :, i])
        vwnd[:, :, i] = g(lon42, lat42[::-1])
        j = interpolate.interp2d(lon, lat145[::-1], p[:, :, i])
        ps[:, :, i] = j(lon42, lat42[::-1])
    for i in range(np.ma.size(uwnd_sst, axis=2)):
        h = interpolate.interp2d(lon, lat[::-1], u_sst[:, :, i])
        uwnd_sst[:, :, i] = h(lon42, lat42[::-1])
        g = interpolate.interp2d(lon, lat[::-1], v_sst[:, :, i])
        vwnd_sst[:, :, i] = g(lon42, lat42[::-1])
        j = interpolate.interp2d(lon, lat145[::-1], p_sst[:, :, i])
        ps_sst[:, :, i] = j(lon42, lat42[::-1])
    for i in range(np.ma.size(uwnd_ghg, axis=2)):
        h = interpolate.interp2d(lon, lat[::-1], u_ghg[:, :, i])
        uwnd_ghg[:, :, i] = h(lon42, lat42[::-1])
        g = interpolate.interp2d(lon, lat[::-1], v_ghg[:, :, i])
        vwnd_ghg[:, :, i] = g(lon42, lat42[::-1])
        j = interpolate.interp2d(lon, lat145[::-1], p_ghg[:, :, i])
        ps_ghg[:, :, i] = j(lon42, lat42[::-1])

    w = VectorWind(uwnd, vwnd)
    w_sst = VectorWind(uwnd_sst, vwnd_sst)
    w_ghg = VectorWind(uwnd_ghg, vwnd_ghg)

    psx, psy = w.gradient(ps)
    psx_sst, psy_sst = w_sst.gradient(ps_sst)
    psx_ghg, psy_ghg = w_ghg.gradient(ps_ghg)

    omega = np.mean(uwnd * psx + vwnd * psy, axis=2)
    omega_sst = uwnd_sst * psx_sst + vwnd_sst * psy_sst
    omega_ghg = uwnd_ghg * psx_ghg + vwnd_ghg * psy_ghg

    omega_sst = np.transpose(omega_sst, (2, 0, 1))
    omega_ghg = np.transpose(omega_ghg, (2, 0, 1))

    oforc_sst = np.mean(omega_sst - omega, axis=0)
    oforc_ghg = np.mean(omega_ghg - omega, axis=0)

    return omega, oforc_sst, oforc_ghg
Exemple #27
0
def main(dataset='ncep2'):
    def nao_region_ncep2(field):
        sindices = np.zeros((3 * (np.shape(field)[0] // 12 - 1)))
        windices = np.zeros((3 * (np.shape(field)[0] // 12 - 1)))
        for i in range((np.shape(field)[0] // 12 - 1)):
            sindices[3 * i:3 *
                     (i + 1)] = [17 + 12 * i, 18 + 12 * i, 19 + 12 * i]
            windices[3 * i:3 *
                     (i + 1)] = [11 + 12 * i, 12 + 12 * i, 13 + 12 * i]
        sindices = sindices.astype(int)
        windices = windices.astype(int)

        field1 = field[:, 4:29, 108:]
        field2 = field[:, 4:29, :17]
        field_r = np.concatenate((field1, field2), axis=2)
        field_w = field_r[windices]
        field_s = field_r[sindices]
        field_w = np.add.reduceat(field_w, range(0, len(field_w), 3)) / 3
        field_s = np.add.reduceat(field_s, range(0, len(field_s), 3)) / 3
        lat_r = np.arange(80, 17.5, -2.5)
        lon_r = np.arange(-90, 42.5, 2.5)
        return field_w, field_s, lat_r, lon_r

    def nao_region_ncar20c(field):
        sindices = np.zeros((3 * (np.shape(field)[0] // 12 - 1)))
        windices = np.zeros((3 * (np.shape(field)[0] // 12 - 1)))
        for i in range((np.shape(field)[0] // 12 - 1)):
            sindices[3 * i:3 *
                     (i + 1)] = [17 + 12 * i, 18 + 12 * i, 19 + 12 * i]
            windices[3 * i:3 *
                     (i + 1)] = [11 + 12 * i, 12 + 12 * i, 13 + 12 * i]
        sindices = sindices.astype(int)
        windices = windices.astype(int)

        field1 = field[:, 5:36, 135:]
        field2 = field[:, 5:36, :21]
        field_r = np.concatenate((field1, field2), axis=2)
        field_w = field_r[windices]
        field_s = field_r[sindices]
        field_w = np.add.reduceat(field_w, range(0, len(field_w), 3)) / 3
        field_s = np.add.reduceat(field_s, range(0, len(field_s), 3)) / 3
        lat_r = np.arange(80, 18, -2)
        lon_r = np.arange(-90, 42, 2)
        return field_w, field_s, lat_r, lon_r

    def nao_region_era20c(field):
        sindices = np.zeros((3 * (np.shape(field)[0] // 12 - 1)))
        windices = np.zeros((3 * (np.shape(field)[0] // 12 - 1)))
        for i in range((np.shape(field)[0] // 12 - 1)):
            sindices[3 * i:3 *
                     (i + 1)] = [17 + 12 * i, 18 + 12 * i, 19 + 12 * i]
            windices[3 * i:3 *
                     (i + 1)] = [11 + 12 * i, 12 + 12 * i, 13 + 12 * i]
        sindices = sindices.astype(int)
        windices = windices.astype(int)

        field1 = field[:, 10:71, 270:]
        field2 = field[:, 10:71, :41]
        field_r = np.concatenate((field1, field2), axis=2)
        field_w = field_r[windices]
        field_s = field_r[sindices]
        field_w = np.add.reduceat(field_w, range(0, len(field_w), 3)) / 3
        field_s = np.add.reduceat(field_s, range(0, len(field_s), 3)) / 3
        lat_r = np.arange(80, 19, -1)
        lon_r = np.arange(-90, 41, 1)
        return field_w, field_s, lat_r, lon_r

    from scipy import interpolate
    lat_n96 = np.arange(80, 18.75, -1.25)
    lon_n96 = np.linspace(-90, 39.375, 70)
    if dataset == 'ncep2':
        # NCEP2 MSLP 1979-2017 inclusive
        mslp = ncread(
            '/network/aopp/hera/mad/bakerh/Reanalyses/NCEP-DOE/mslp.mon.mean.nc',
            'mslp')[:468] / 100
        mslp_w, mslp_s, lat_r, lon_r = nao_region_ncep2(mslp)
        mslp_w96 = np.zeros((np.shape(mslp_w)[0], 49, 70))
        mslp_s96 = np.zeros((np.shape(mslp_w)[0], 49, 70))
        for i in range(np.shape(mslp_w)[0]):
            f = interpolate.interp2d(lon_r, lat_r[::-1], mslp_w[i])
            mslp_w96[i] = f(lon_n96, lat_n96)
            f = interpolate.interp2d(lon_r, lat_r[::-1], mslp_s[i])
            mslp_s96[i] = f(lon_n96, lat_n96)
        eofs = np.zeros((2, 49, 70))
        var = np.zeros((2, 3))
        nao = np.zeros((2, len(mslp_w96)))
        eofs[0], var[0] = eof_clim(mslp_w96, lat_n96, lon_n96, 1)
        nao[0] = nao_indivyear(eofs[0], mslp_w96, lat_n96, lon_n96)
        eofs[1], var[1] = eof_clim(mslp_s96, lat_n96, lon_n96, 1)
        nao[1] = nao_indivyear(eofs[1], mslp_s96, lat_n96, lon_n96)

    if dataset == 'ncar20c':
        # NCAR-20thC MSLP 1871-2012 inclusive
        mslp = ncread(
            '/network/aopp/hera/mad/bakerh/Reanalyses/NCAR-20thC/mslp/prmsl.mon.mean.nc',
            'prmsl') / 100
        mslp_w, mslp_s, lat_r, lon_r = nao_region_ncar20c(mslp)
        mslp_w96 = np.zeros((np.shape(mslp_w)[0], 49, 70))
        mslp_s96 = np.zeros((np.shape(mslp_w)[0], 49, 70))
        for i in range(np.shape(mslp_w)[0]):
            f = interpolate.interp2d(lon_r, lat_r[::-1], mslp_w[i])
            mslp_w96[i] = f(lon_n96, lat_n96)
            f = interpolate.interp2d(lon_r, lat_r[::-1], mslp_s[i])
            mslp_s96[i] = f(lon_n96, lat_n96)
        eofs = np.zeros((2, 49, 70))
        var = np.zeros((2, 3))
        nao = np.zeros((2, len(mslp_w96)))
        eofs[0], var[0] = eof_clim(mslp_w96, lat_n96, lon_n96, 1)
        nao[0] = nao_indivyear(eofs[0], mslp_w96, lat_n96, lon_n96)
        eofs[1], var[1] = eof_clim(mslp_s96, lat_n96, lon_n96, 1)
        nao[1] = nao_indivyear(eofs[1], mslp_s96, lat_n96, lon_n96)

    if dataset == 'era20c':
        # ERA20C MSLP 1900-2010 inclusive
        mslp = ncread(
            '/network/aopp/hera/mad/bakerh/Reanalyses/ERA20C/ERA20C_mslp_daily_1900_2010.nc',
            'msl') / 100
        mslp_w, mslp_s, lat_r, lon_r = nao_region_era20c(mslp)
        mslp_w96 = np.zeros((np.shape(mslp_w)[0], 49, 70))
        mslp_s96 = np.zeros((np.shape(mslp_w)[0], 49, 70))
        for i in range(np.shape(mslp_w)[0]):
            f = interpolate.interp2d(lon_r, lat_r[::-1], mslp_w[i])
            mslp_w96[i] = f(lon_n96, lat_n96)
            f = interpolate.interp2d(lon_r, lat_r[::-1], mslp_s[i])
            mslp_s96[i] = f(lon_n96, lat_n96)
        eofs = np.zeros((2, 49, 70))
        var = np.zeros((2, 3))
        nao = np.zeros((2, len(mslp_w96)))
        eofs[0], var[0] = eof_clim(mslp_w96, lat_n96, lon_n96, 1)
        nao[0] = nao_indivyear(eofs[0], mslp_w96, lat_n96, lon_n96)
        eofs[1], var[1] = eof_clim(mslp_s96, lat_n96, lon_n96, 1)
        nao[1] = nao_indivyear(eofs[1], mslp_s96, lat_n96, lon_n96)

    if dataset == 'hadam3p':
        import glob
        a = glob.glob(
            '/network/aopp/hera/mad/bakerh/RPM/cpdn_extract_scripts-master/extracted_data/batch_577/atmos/item16222_monthly_mean/*'
        )
        mslp_w96 = np.zeros((len(a), 49, 70))
        mslp_s96 = np.zeros((len(a), 49, 70))
        for i, item in enumerate(a):
            mslp = ncread(item, 'item16222_monthly_mean')[:, 0, :] / 100
            mslp_w96[i], mslp_s96[i] = nao_region_hadam3p(mslp)
            print(str(i))
        eofs = np.zeros((2, 49, 70))
        var = np.zeros((2, 3))
        nao = np.zeros((2, len(mslp_w96)))
        eofs[0], var[0] = eof_clim(mslp_w96, lat_n96, lon_n96, 1)
        nao[0] = nao_indivyear(eofs[0], mslp_w96, lat_n96, lon_n96)
        eofs[1], var[1] = eof_clim(mslp_s96, lat_n96, lon_n96, 1)
        nao[1] = nao_indivyear(eofs[1], mslp_s96, lat_n96, lon_n96)
    return eofs, var, nao
Exemple #28
0
def response_1(v_model, model='ghg', month='J', r=[0, 90, 0, 360]):
    def eofweight(unweighted, lat, lon):
        '''
        Outputs weighted data for projections (i.e. sqrt cos lat)

        Parameters
        ----------
        unweighted: array
            unweighted data
        lat: array
            latitudes
        lon: array
            lon values

        Outputs
        -------
        weighted: array
            weighted data
        '''
        meshlat = np.zeros([np.ma.size(lon), np.ma.size(lat)])
        meshlat[:, :] = lat
        meshlatweight = np.sqrt(np.cos(meshlat.transpose() * np.pi / 180))
        weighted = unweighted * meshlatweight
        return weighted

    def eof_response(response,
                     eofn,
                     lati,
                     long,
                     region=[-90, 90, 0, 360],
                     weigh='yes'):
        '''
        Projects response onto eofn

        Parameters
        ----------
        response: array
            data to project on to eofn
        eofn: array
            nth eof
        lat: array
            latitude of data
        lon: array
            longitude of data

        Returns
        -------
        projection: array
            response projected on eofn
        '''
        lat = lati[(region[0] <= lati) & (lati <= region[1])]
        lon = long[(region[2] <= long) & (long <= region[3])]
        eof_region = eofn.copy()[(region[0] <= lati) & (lati <= region[1]), :]
        eof_region = eof_region[:, (region[2] <= long) & (long <= region[3])]
        r_region = response.copy()[:, (region[0] <= lati) &
                                   (lati <= region[1]), :]
        r_region = r_region[:, :, (region[2] <= long) & (long <= region[3])]
        responsew = eofweight(r_region, lat, lon)
        eofn_w = eofweight(eof_region.copy(), lat, lon)
        projection = np.zeros(len(response))
        if weigh == 'yes':
            for i in range(len(response)):
                projection[i] = (np.sum(responsew[i] * eofn_w) /
                                 (np.sum(eofn_w * eofn_w)))
        else:
            for i in range(len(response)):
                projection[i] = (np.sum(responsew[i] * eofn_w) /
                                 ((np.sum(responsew[i] * responsew[i]))))
        return projection

    import numpy as np
    from netcdfread import ncread
    import glob
    lon = ncread(
        '/network/aopp/hera/mad/bakerh/BTmodel_COR/main/inputs/forcing_ghg.nc',
        'lon')
    lati = ncread(
        '/network/aopp/hera/mad/bakerh/BTmodel_COR/main/inputs/forcing_ghg.nc',
        'lat')
    lat = np.copy(lati[::-1])
    a = glob.glob(
        '/network/aopp/hera/mad/bakerh/BTmodel_COR/main/outputs/single/' +
        model + '/' + month + '/*')
    v_f = np.zeros((64, 21, 64, 128))
    for i in range(64):
        v_f[i] = ncread(a[i], 'V')
    v_f = (np.mean(v_f[:, 16:], axis=1) - v_f[:, 0]) * 1e6
    w = eof_response(v_f, v_model, lati, lon, region=r, weigh='yes')
    f_per = eof_response(v_f, v_model, lati, lon, region=r, weigh='no')
    weights = np.zeros((64, 128))
    forcing_p = np.zeros((64, 128))

    for LONraster in range(1, 65):
        w1 = w[LONraster - 1]
        f1 = f_per[LONraster - 1]
        if LONraster == 1:
            for ii in range(int(LONraster * 2 - 2),
                            int(LONraster * 2 - 2 + 3)):
                for jj in range(34 - 2, 34 + 3):
                    weights[jj, ii] += w1 * (
                        (np.cos(0.5 * np.pi *
                                (lon[int(ii)] - lon[int(LONraster * 2 - 2)]) /
                                (lon[3] - lon[1])))**2) * (
                                    (np.cos(0.5 * np.pi * (lat[jj] - lat[34]) /
                                            (lat[31] - lat[33])))**2)
                    forcing_p[jj, ii] += f1 * (
                        (np.cos(0.5 * np.pi *
                                (lon[int(ii)] - lon[int(LONraster * 2 - 2)]) /
                                (lon[3] - lon[1])))**2) * (
                                    (np.cos(0.5 * np.pi * (lat[jj] - lat[34]) /
                                            (lat[31] - lat[33])))**2)
            for ii in range(126, 128):
                for jj in range(34 - 2, 34 + 3):
                    weights[jj, ii] += w1 * (
                        (np.cos(0.5 * np.pi * (lon[int(ii)] - 360) /
                                (lon[3] - lon[1])))**2) * (
                                    (np.cos(0.5 * np.pi * (lat[jj] - lat[34]) /
                                            (lat[31] - lat[33])))**2)
                    forcing_p[jj, ii] += f1 * (
                        (np.cos(0.5 * np.pi * (lon[int(ii)] - 360) /
                                (lon[3] - lon[1])))**2) * (
                                    (np.cos(0.5 * np.pi * (lat[jj] - lat[34]) /
                                            (lat[31] - lat[33])))**2)
        elif LONraster == 64:
            for ii in range(int(LONraster * 2 - 2 - 2),
                            int(LONraster * 2 - 2 + 2)):
                for jj in range(34 - 2, 34 + 3):
                    weights[jj, ii] += w1 * (
                        (np.cos(0.5 * np.pi *
                                (lon[int(ii)] - lon[int(LONraster * 2 - 2)]) /
                                (lon[3] - lon[1])))**2) * (
                                    (np.cos(0.5 * np.pi * (lat[jj] - lat[34]) /
                                            (lat[31] - lat[33])))**2)
                    forcing_p[jj, ii] += f1 * (
                        (np.cos(0.5 * np.pi *
                                (lon[int(ii)] - lon[int(LONraster * 2 - 2)]) /
                                (lon[3] - lon[1])))**2) * (
                                    (np.cos(0.5 * np.pi * (lat[jj] - lat[34]) /
                                            (lat[31] - lat[33])))**2)
        else:
            for ii in range(int(LONraster * 2 - 2 - 2),
                            int(LONraster * 2 - 2 + 3)):
                for jj in range(34 - 2, 34 + 3):
                    weights[jj, ii] += w1 * (
                        (np.cos(0.5 * np.pi *
                                (lon[int(ii)] - lon[int(LONraster * 2 - 2)]) /
                                (lon[3] - lon[1])))**2) * (
                                    (np.cos(0.5 * np.pi * (lat[jj] - lat[34]) /
                                            (lat[31] - lat[33])))**2)
                    forcing_p[jj, ii] += f1 * (
                        (np.cos(0.5 * np.pi *
                                (lon[int(ii)] - lon[int(LONraster * 2 - 2)]) /
                                (lon[3] - lon[1])))**2) * (
                                    (np.cos(0.5 * np.pi * (lat[jj] - lat[34]) /
                                            (lat[31] - lat[33])))**2)

    weights = weights[::-1, :]
    forcing_p = forcing_p[::-1, :] * 2.5e-11
    v_perfect = np.sum(v_f.transpose(1, 2, 0) * f_per, axis=2)
    return weights, forcing_p, v_perfect, w, f_per
Exemple #29
0
def reconstruct_nao(gto, season='djf', rmask=np.ones((145, 192))):
    from scipy import interpolate
    from mpl_toolkits.basemap import shiftgrid
    lat_n96 = np.linspace(90, -90, 145)
    lon_n96 = np.linspace(0, 358.125, 192)
    lat_sst = np.linspace(89.5, -89.5, 180)
    lon_sst = np.linspace(-179.5, 179.5, 360)
    lon_sst_shift = np.linspace(.5, 359.5, 360)
    sindices = np.zeros((147 * 3))
    windices = np.zeros((147 * 3))
    if season == 'djf':
        months = 3
        sindices = np.zeros((147 * 3))
        windices = np.zeros((147 * 3))
        for i in range(147):
            sindices[3 * i:3 *
                     (i + 1)] = [17 + 12 * i, 18 + 12 * i, 19 + 12 * i]
            windices[3 * i:3 *
                     (i + 1)] = [11 + 12 * i, 12 + 12 * i, 13 + 12 * i]
    if season == 'ndj':
        months = 3
        sindices = np.zeros((147 * 3))
        windices = np.zeros((147 * 3))
        for i in range(147):
            sindices[3 * i:3 *
                     (i + 1)] = [16 + 12 * i, 17 + 12 * i, 18 + 12 * i]
            windices[3 * i:3 *
                     (i + 1)] = [10 + 12 * i, 11 + 12 * i, 12 + 12 * i]
    if season == 'son':
        months = 3
        sindices = np.zeros((147 * 3))
        windices = np.zeros((147 * 3))
        for i in range(147):
            sindices[3 * i:3 *
                     (i + 1)] = [14 + 12 * i, 15 + 12 * i, 16 + 12 * i]
            windices[3 * i:3 * (i + 1)] = [8 + 12 * i, 9 + 12 * i, 10 + 12 * i]
    if season == 'nd':
        months = 2
        sindices = np.zeros((147 * 2))
        windices = np.zeros((147 * 2))
        for i in range(147):
            sindices[2 * i:2 * (i + 1)] = [16 + 12 * i, 17 + 12 * i]
            windices[2 * i:2 * (i + 1)] = [10 + 12 * i, 11 + 12 * i]
    if season == 'dj':
        months = 2
        sindices = np.zeros((147 * 2))
        windices = np.zeros((147 * 2))
        for i in range(147):
            sindices[2 * i:2 * (i + 1)] = [17 + 12 * i, 18 + 12 * i]
            windices[2 * i:2 * (i + 1)] = [11 + 12 * i, 12 + 12 * i]
    if season == 'n':
        months = 1
        sindices = np.zeros((147))
        windices = np.zeros((147))
        for i in range(147):
            sindices[i] = 16 + 12 * i
            windices[i] = 10 + 12 * i
    if season == 'd':
        months = 1
        sindices = np.zeros((147))
        windices = np.zeros((147))
        for i in range(147):
            sindices[i] = 17 + 12 * i
            windices[i] = 11 + 12 * i
    if season == 'on':
        months = 2
        sindices = np.zeros((147 * 2))
        windices = np.zeros((147 * 2))
        for i in range(147):
            sindices[2 * i:2 * (i + 1)] = [15 + 12 * i, 16 + 12 * i]
            windices[2 * i:2 * (i + 1)] = [9 + 12 * i, 11 + 12 * i]
    sindices = sindices.astype(int)
    windices = windices.astype(int)

    gto_interp = np.zeros((2, 180, 360))
    sst = ncread(
        '/network/aopp/hera/mad/bakerh/Reanalyses/HadISST/HadISST_sst.nc',
        'sst')
    sst_0 = np.where(sst < -999, 0, sst)
    for i in range(2):
        f = interpolate.interp2d(lon_n96, lat_n96[::-1], gto[i, :])
        gto_interp[i, :] = f(lon_sst_shift, lat_sst)
        gto_interp[i], lon1 = shiftgrid(181.,
                                        gto_interp[i],
                                        lon_sst_shift,
                                        start=False)
    meshlat = np.zeros([180, 360])
    meshlat[:, :] = np.expand_dims(lat_sst, axis=1)
    meshlatweight = np.cos(
        meshlat * np.pi / 180) * 6371**2 * 1.25 * 1.875 * (np.pi / 180)**2
    nao_recon_monthly = np.zeros((2, months * 147))
    nao_recon = np.zeros((2, 147))

    sst_w = sst_0[windices]
    sst_s = sst_0[sindices]
    sst_w = sst_w * meshlatweight
    sst_s = sst_s * meshlatweight
    '''
    OLD Rmask code
    lsm = ncread('/home/bakerh/Documents/DPhil/CPDN/\
Weather-at-Home_ancilmaker-master/lsm_n96_add.nc', 'lsm')[0, 0, :]
    lsm1 = np.ones((145, 192))
    for i in range(145):
        for j in range(192):
            if lsm[i, j] == 0:
                lsm1[i, j] = 0
    for y in range(36):
        nao_anom[0, y] = np.nansum(wdataSST[y]*gto[0]*(1-lsm1)*rmask)/20  # 2beta
        nao_anom[1, y] = np.nansum(sdataSST[y]*gto[1]*(1-lsm1)*rmask)/20
    '''
    for y in range(147 * months):
        nao_recon_monthly[0, y] = np.nansum(
            sst_w[y] * gto_interp[0]) / 20  # 2beta
        nao_recon_monthly[1, y] = np.nansum(sst_s[y] * gto_interp[1]) / 20

    if months == 1:
        for y in range(147):
            nao_recon[0, y] = nao_recon_monthly[0, months * y]
            nao_recon[1, y] = nao_recon_monthly[1, months * y]
    else:
        for y in range(147):
            nao_recon[0, y] = np.mean(nao_recon_monthly[0, months * y:months *
                                                        (y + 1)])
            nao_recon[1, y] = np.mean(nao_recon_monthly[1, months * y:months *
                                                        (y + 1)])
    return nao_recon
Exemple #30
0
def maplotter(pdata, colormax=1, colormin=-999, title='', output='yes'):
    """
    Plots input grid with map of world overlaid

    Parameters
    ----------
    plotdata: array
        data being plotted
    title: str
        optional title
    """
    from mpl_toolkits.basemap import Basemap, shiftgrid, addcyclic
    import numpy as np
    import matplotlib as mpl
    import matplotlib.pyplot as plt
    from netcdfread import ncread
    if colormin == -999:
        colormin = -colormax
    lon = ncread(
        '/network/aopp/hera/mad/bakerh/BTmodel_COR/main/inputs/forcing_ghg.nc',
        'lon')
    lat = ncread(
        '/network/aopp/hera/mad/bakerh/BTmodel_COR/main/inputs/forcing_ghg.nc',
        'lat')
    pdata, lon = shiftgrid(180., pdata, lon, start=False)
    pdata, lon = addcyclic(pdata, lon)
    plt.figure()
    meshlon, meshlat = np.meshgrid(lon, lat)

    m = Basemap(projection='cyl',
                llcrnrlat=-90,
                urcrnrlat=90,
                llcrnrlon=-180,
                urcrnrlon=180,
                resolution='c')
    m.drawcoastlines()
    m.drawmapboundary()
    x, y = m(meshlon, meshlat)
    mycmap2 = plt.cm.YlOrRd(np.arange(256))
    mycmap1 = plt.cm.Blues_r(np.arange(256))
    my_cmap = np.concatenate((mycmap1, mycmap2), axis=0)
    my_cmap[230:282, :] = 1
    newcmap = mpl.colors.LinearSegmentedColormap.from_list("newjet", my_cmap)
    ctrs = np.linspace(colormin, colormax, 17)
    plot = m.contourf(x,
                      y,
                      pdata,
                      ctrs,
                      cmap=newcmap,
                      vmin=np.min(ctrs),
                      vmax=np.max(ctrs),
                      extend='both')
    b = plt.colorbar(plot,
                     orientation='horizontal',
                     aspect=50,
                     shrink=0.75,
                     spacing='proportional')
    b.set_label(label=r'V200 (1x10$^{-6}$ ms$^{-1}$)')
    #b.set_label(label=r'Forcing (1x10$^{-11}$ s$^{-2}$)')
    #b.set_label(label=r'Weights')
    parallels = m.drawparallels(np.arange(-90., 91., 15.))
    meridians = m.drawmeridians(np.arange(-180., 181., 30))
    m.drawparallels(parallels, labels=[True, True, True, True])
    m.drawmeridians(meridians, labels=[True, True, True, True])
    plt.title(title, y=1.08)
    plt.show()