Exemplo n.º 1
0
def compute_rp(filename):
    """
    Compute Rp - the ratio of the change in salinity 
    relative to temperature. Allows for identification
    of profiles which are susceptible to double diffusion or salt
    fingering
    """
    plt.style.use('seaborn')
    name = filename[:-3]
    datadir = "Data/ctd_files/gridded_calibrated_updated"
    data = xr.open_dataset(os.path.join(datadir, filename))
    # fig,ax = plt.subplots(1,2,sharey=True)
    temp = data['ptemp']
    psal = data['ab_sal']
    depth = data['DEPTH']
    sigma_t = data['Gsw_sigma0A0']

    [rho, alpha, beta] = gsw.rho_alpha_beta(psal, temp, depth)
    rp = (beta[:-1] * np.diff(psal)) / (alpha[:-1] * np.diff(temp))

    fig, ax = plt.subplots(2, 2)
    fig.suptitle(name.replace('_', ' '))
    ax[1, 1].plot(rp, depth[:-1] * -1)
    ax[1, 0].plot(rho, depth * -1)
    ax[0, 1].plot(psal, depth * -1)
    ax[0, 0].plot(temp, depth * -1)
    plt.show()
Exemplo n.º 2
0
def raw_to_zref(d, zref):
    temp = d['TEMP']
    psal = d['PSAL']
    pres = d['PRES']
    temp_qc = d['TEMP_QC']
    psal_qc = d['PSAL_QC']
    pres_qc = d['PRES_QC']
    lon = d['LONGITUDE']
    lat = d['LATITUDE']

    klist, ierr = remove_bad_qc(d)
    if ierr == 0:
        Tis = temp[klist]
        SP = psal[klist]
        p = pres[klist]

        CT, SA, z = insitu_to_absolute(Tis, SP, p, lon, lat, zref)
        Ti, Si, dTidz, dSidz = interp_at_zref(CT, SA, z, zref, klist)
        pi = gsw.p_from_z(-zref, lat)
        #Ri = gsw.rho(Si, Ti, pi)
        Ri, alpha, beta = gsw.rho_alpha_beta(Si, Ti, pi)
        g = gsw.grav(lat, pi)
        BVF2i = g * (beta * dSidz - alpha * dTidz)
        flag = True
    else:
        zero = zref * 0.
        Ti, Si, Ri, BVF2i = zero, zero, zero, zero
        flag = False
    return {'CT': Ti, 'SA': Si, 'RHO': Ri, 'BVF2': BVF2i}, flag
Exemplo n.º 3
0
def compute_alpha_beta(data, temperature_var='SST', salinity_var='SSS'):
    p = 0 * data['lon']
    SA = gsw.SA_from_SP(data[salinity_var], p, data['lon'], data['lat'])
    CT = gsw.CT_from_t(SA, data[temperature_var], p)
    rho, alpha, beta = gsw.rho_alpha_beta(SA, CT, p)
    return data.assign(alpha=xr.DataArray(alpha, dims='time'),
                       beta=xr.DataArray(beta, dims='time'))
def compute_density(data):
    p = 0 * data['lon']
    SA = gsw.SA_from_SP(data['SSS'], p, data['lon'], data['lat'])
    CT = gsw.CT_from_t(SA, data['SST'], p)
    rho, alpha, beta = gsw.rho_alpha_beta(SA, CT, p)
    #b = 9.81 * (1 - rho / 1025.)
    data['SSS'].data = SA
    data['SST'].data = CT
    return data.assign(SSrho=xr.DataArray(rho, dims='time'),
                       SSalpha=xr.DataArray(alpha, dims='time'),
                       SSbeta=xr.DataArray(beta, dims='time'))
Exemplo n.º 5
0
def brunt_vaisala(datadir, filenames, desc=''):

    #Load required variables
    lat = []
    lon = []
    temp = []
    sal = []
    depth = []
    for i in filenames:
        d = xr.open_dataset(os.path.join(datadir, i))
        temp.append(d.TEMP.values)
        sal.append(d.PSAL.values)
        lon.append(np.nanmean(d.lon.values))
        lat.append(np.nanmean(d.lat.values))

    depth = -np.abs(d.DEPTH.values)
    coords = lon
    #compute alpha and beta
    [rho, alpha, beta] = gsw.rho_alpha_beta(sal, temp, depth)

    g = 9.8
    N = np.sqrt(g * ((alpha[:, :-1] * (np.diff(temp) / np.diff(depth))) -
                     (beta[:, :-1] * (np.diff(sal) / np.diff(depth))))
                )  ##computed this way so that the influence of temperature
    #vs salinity can be separated
    #plot N
    xx, yy = np.meshgrid(lon, depth[:-1])
    plt.pcolormesh(xx, yy, N.T)
    cb = plt.colorbar(extend='both')
    cb.set_label('N')

    #plt.show()

    plt.savefig('Figures/Transect/transect_N.pdf')
    plt.savefig('Figures/Transect/transect_N.png')
    plt.close()
    return N, np.asarray(rho), depth, lon, lat
Exemplo n.º 6
0
def alphabeta(SA, CT, depth):
    import gsw as gsw

    _, y = np.meshgrid(SA[1, :], depth)
    _, alpha, beta = gsw.rho_alpha_beta(SA, CT, y)
    return alpha, beta