Qr = Qr - tendH #Qr = Cbar*tendsst -(-thf + Q_net_surf) Qr = Qr.transpose('time', 'lat', 'lon') Qr_mean = Qr.mean(dim='time') Q_s = -thf + Q_net_surf + Q_ek #Q_s = -thf + Q_net_surf Qr_var = Qr.var(dim='time') Q_s_var = Q_s.var(dim='time') covQsQo = st2.cov(Qr, Q_s) nlat = len(lats) nlon = len(lons) # Compute covariance betwen SST tendency and fields cov_Qr = st2.cov(tendsst, Qr) cov_Qs = st2.cov(tendsst, Q_s) cov_Qek = st2.cov(tendsst, Q_ek) cov_tendH = st2.cov(tendsst, tendH) #cov_Qek_f = st2.cov(tendsst,Q_ek_f) #cov_Rnet = st2.cov(tendsst,Q_net_surf) #cov_thf = st2.cov(tendsst,-thf) # #cov_RnetRnet = st2.cov(Q_net_surf,Q_net_surf)
nt = sst.shape[0] #timeslice = slice(0,nt) timeslice = slice(int(Tn),nt-int(Tn)) Q_s = Q_s.isel(time=timeslice) Qr = Qr.isel(time=timeslice) tendsst = tendsst.isel(time=timeslice) sst = sst.isel(time=timeslice) sst_var = sst.var(dim='time') Qr_var = Qr.var(dim='time') Q_s_var = Q_s.var(dim='time') covQsQo = st2.cov(Qr,Q_s) nlat = len(lats) nlon = len(lons) var_Qo = st2.cov(Qr,Qr) var_Qs = st2.cov(Q_s,Q_s) #cov_QsQo = st2.cov(Qr,Q_s) covQsQo_test = 0.5*((Qr + Q_s).var(dim='time') - var_Qo - var_Qs) # Compute covariance betwen SST tendency and fields cov_Qr = st2.cov(tendsst, Qr)
Qr_mean = Qr.mean(dim='time') #Q_s = -thf + Q_net_surf + Q_ek Q_s = -thf + Q_net_surf T_Qs = (Q_s / Cbar).cumsum(dim='time') * dt T_Qo = (Qr / Cbar).cumsum(dim='time') * dt T_sum = T_Qs + T_Qo var_T_Qs = T_Qs.var(dim='time') var_T_Qo = T_Qo.var(dim='time') cov_T_Qs_T_Qo = st2.cov(T_Qs, T_Qo) nlat = len(lats) nlon = len(lons) reflon = 320 reflat = 50 plt.figure(figsize=(16, 10)) plt.plot(T_Qs.time, T_Qs.sel(lon=reflon, lat=reflat), label=r'$T_{Q_s}$', color='C0') plt.plot(T_Qo.time, T_Qo.sel(lon=reflon, lat=reflat), label=r'$T_{Q_o}$',
timeslice = slice(int(Tn), nt - int(Tn)) Q_s = Q_s.isel(time=timeslice) Qr = Qr.isel(time=timeslice) #tendsst = tendsst.isel(time=timeslice) tendT_mxl = tendT_mxl.isel(time=timeslice) sst = sst.isel(time=timeslice) # var_Qo = st2.cov(Qr,Qr) # var_Qs = st2.cov(Q_s,Q_s) # cov_QsQo = st2.cov(Qr,Q_s) Q_tot = Q_s + Qr # Compute covariance betwen SST tendency and fields cov_Qr = st2.cov(tendT_mxl, Qr) cov_Qs = st2.cov(tendT_mxl, Q_s) #cov_Qek = st2.cov(tendsst,Q_ek) #cov_Rnet = st2.cov(tendsst, Q_net_surf) #cov_thf = st2.cov(tendsst, -thf) #cov_ssttend = st2.cov(tendsst,tendsst) # var_Qr = Qr.var(dim='time') # var_Qs = Q_s.var(dim='time') # var_Qtot = Q_tot.var(dim='time') # covQsQr = 0.5*(var_Qtot - var_Qr - var_Qs) # Compute lagged sst autocorrelations r1corrs = st2.cor(sst, sst, lagx=1) r2corrs = st2.cor(sst, sst, lagx=2)
nt = sst.shape[0] #timeslice = slice(0,nt) timeslice = slice(int(Tn), nt - int(Tn)) Q_s = Q_s.isel(time=timeslice) Qr = Qr.isel(time=timeslice) tendsst = tendsst.isel(time=timeslice) sst = sst.isel(time=timeslice) sst_var = sst.var(dim='time') Qr_var = Qr.var(dim='time') Q_s_var = Q_s.var(dim='time') covQsQo = st2.cov(Qr, Q_s) nlat = len(lats) nlon = len(lons) # Compute covariance betwen SST tendency and fields cov_Qr = st2.cov(tendsst, Qr) cov_Qs = st2.cov(tendsst, Q_s) #cov_Qek = st2.cov(tendsst, Q_ek) #cov_Qek_f = st2.cov(tendsst,Q_ek_f) #cov_Rnet = st2.cov(tendsst,Q_net_surf) cov_thf = st2.cov(tendsst, -thf) # #cov_RnetRnet = st2.cov(Q_net_surf,Q_net_surf) #cov_thfRnet = st2.cov(-thf,Q_net_surf)
#timeslice = slice(0,nt) timeslice = slice(int(Tn), nt - int(Tn)) Q_s = Q_s.isel(time=timeslice) Qr = Qr.isel(time=timeslice) tendsst = tendsst.isel(time=timeslice) sst = sst.isel(time=timeslice) # var_Qo = st2.cov(Qr,Qr) # var_Qs = st2.cov(Q_s,Q_s) # cov_QsQo = st2.cov(Qr,Q_s) # Compute covariance betwen SST tendency and fields cov_Qr = st2.cov(tendsst, Qr) cov_Qs = st2.cov(tendsst, Q_s) #cov_Qek = st2.cov(tendsst,Q_ek) cov_Rnet = st2.cov(tendsst, Q_net_surf) cov_thf = st2.cov(tendsst, -thf) #cov_ssttend = st2.cov(tendsst,tendsst) # Compute lagged sst autocorrelations r1corrs = st2.cor(sst, sst, lagx=1) r2corrs = st2.cor(sst, sst, lagx=2) # Scaling factor (to convert from units of W*K/(s*m^2) to K^2) fac = (2 * dt**2 / (Cbar * (1 - r2corrs))) #MERRA-2 sometimes blows up fac... fac = fac.where(~(xr.ufuncs.isinf(fac)))
Q_s = Q_s.isel(time=timeslice) Qr = Qr.isel(time=timeslice) #tendsst = tendsst.isel(time=timeslice) sst = sst.isel(time=timeslice) tendT_mxl = tendT_mxl.isel(time=timeslice) tendT_mxl_squarebar = (tendT_mxl**2).mean(dim='time') sst_var = sst.var(dim='time') k = sst_var / tendT_mxl_squarebar alpha = k / Cbar Qr_var = Qr.var(dim='time') Q_s_var = Q_s.var(dim='time') covQsQo = st2.cov(Qr, Q_s) nlat = len(lats) nlon = len(lons) var_Qo = st2.cov(Qr, Qr) var_Qs = st2.cov(Q_s, Q_s) #cov_QsQo = st2.cov(Qr,Q_s) covQsQo_test = 0.5 * ((Qr + Q_s).var(dim='time') - var_Qo - var_Qs) # Compute covariance betwen SST tendency and fields cov_Qr = st2.cov(tendT_mxl, Qr) cov_Qs = st2.cov(tendT_mxl, Q_s) #cov_Qek = st2.cov(tendsst, Q_ek) #cov_Qek_f = st2.cov(tendsst,Q_ek_f)
# Make sure sst tendency times match up with other fields tendsst.time.values = thf.time.values Qr = Cbar * tendsst - (-thf + Q_net_surf) - Q_ek #Qr = Cbar*tendsst -(-thf + Q_net_surf) Qr = Qr.transpose('time', 'lat', 'lon') Q_s = -thf + Q_net_surf #Q_s = -thf + Q_net_surf + Q_ek nlat = len(lats) nlon = len(lons) # Compute covariance betwen SST tendency and fields cov_Qr = st2.cov(tendsst, Qr) cov_Qs = st2.cov(tendsst, Q_s) cov_Qek = st2.cov(tendsst, Q_ek) #cov_ssttend = st2.cov(tendsst,tendsst) # Compute lagged sst autocorrelations r1corrs = st2.cor(sst, sst, lagx=1) r2corrs = st2.cor(sst, sst, lagx=2) # Scaling factor (to convert from units of W*K/(s*m^2) to K^2) fac = (2 * dt**2 / (Cbar * (1 - r2corrs))) #MERRA-2 sometimes blows up fac... fac = fac.where(~(xr.ufuncs.isinf(fac))) # Compute observed SST variance
Q_s = -thf + Q_net_surf timeslice = slice(int(Tn), nt - int(Tn)) Q_s = Q_s.isel(time=timeslice) Qr = Qr.isel(time=timeslice) tendsst = tendsst.isel(time=timeslice) sst = sst.isel(time=timeslice) #Q_s = -thf + Q_net_surf + Q_ek nlat = len(lats) nlon = len(lons) # Compute covariance betwen SST tendency and fields cov_Qr = st2.cov(tendsst, Qr) cov_Qs = st2.cov(tendsst, Q_s) #cov_Qek = st2.cov(tendsst,Q_ek) #cov_ssttend = st2.cov(tendsst,tendsst) # Compute lagged sst autocorrelations r1corrs = st2.cor(sst, sst, lagx=1) r2corrs = st2.cor(sst, sst, lagx=2) # Scaling factor (to convert from units of W*K/(s*m^2) to K^2) fac = (2 * dt**2 / (Cbar * (1 - r2corrs))) #MERRA-2 sometimes blows up fac... fac = fac.where(~(xr.ufuncs.isinf(fac))) # Compute observed SST variance
Q_s = Q_s.isel(time=timeslice) Qr = Qr.isel(time=timeslice) tendsst = tendsst.isel(time=timeslice) sst = sst.isel(time=timeslice) err_Qs = err_Qs.isel(time=timeslice) err_tendsst = err_tendsst.isel(time=timeslice) # var_Qo = st2.cov(Qr,Qr) # var_Qs = st2.cov(Q_s,Q_s) # cov_QsQo = st2.cov(Qr,Q_s) Q_tot = Q_s + Qr # Compute covariance betwen SST tendency and fields cov_Qr = st2.cov(tendsst, Qr) cov_Qs = st2.cov(tendsst, Q_s) #cov_Qek = st2.cov(tendsst,Q_ek) cov_Rnet = st2.cov(tendsst, Q_net_surf) cov_thf = st2.cov(tendsst, -thf) #cov_ssttend = st2.cov(tendsst,tendsst) cov_Qr_err = st2.cov(tendsst, err_Qr) + st2.cov(err_tendsst, Qr) cov_Qs_err = st2.cov(tendsst, err_Qs) + st2.cov(err_tendsst, Q_s) # var_Qr = Qr.var(dim='time') # var_Qs = Q_s.var(dim='time') # var_Qtot = Q_tot.var(dim='time') # covQsQr = 0.5*(var_Qtot - var_Qr - var_Qs)