#cov_thfRnet = st2.cov(-thf,Q_net_surf) #cov_QrRnet = st2.cov(Qr, Q_net_surf) # #cov_thfthf = st2.cov(-thf,-thf) #cov_Qrthf = st2.cov(Qr,-thf) # #cov_QrQr = st2.cov(Qr,Qr) #cov_QrRnet = st2.cov(Qr,Q_net_surf) #cov_QsRnet = st2.cov(Q_s,Q_net_surf) #cov_QrQs = st2.cov(Qr,Q_s) #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))) #fac=(dt**2)/(2*Cbar*(1-r1corrs)) G = fac / Cbar # Compute observed SST variance T_var = sst.var(dim='time') H_var = (Cbar * tendsst).var(dim='time') # Compute contributions to SST variance
#timeslice = slice(0,nt) #timeslice = slice(int(Tn),nt-int(Tn)) # Q_s = Q_s.isel(time=timeslice) # Q_r = Q_r.isel(time=timeslice) # tendsst = tendsst.isel(time=timeslice) # sst = sst.isel(time=timeslice) order = 5 fs = 1 # sample rate, (cycles per month) Tn = 4. * 12. cutoff = 1 / Tn # desired cutoff frequency of the filter (cycles per month) if lowpass: sst_lp = st.butter_lowpass_filter_xr(sst, cutoff, fs, order) r2corrs = st2.cor(sst_lp, sst_lp, lagx=2) else: r2corrs = st2.cor(sst, sst, lagx=2) #Niño 3.4 (5N-5S, 170W-120W order = 5 fs = 1 # sample rate, (cycles per month) Tn_enso = 6. cutoff_enso = 1 / Tn # desired cutoff frequency of the filter (cycles per month) enso = st2.spatial_ave_xr(sst.sel(lon=slice(190, 240)), lats=lats.sel(lat=slice(-5, 5))) enso = st.butter_lowpass_filter_xr(enso, cutoff_enso, fs, order) if not (lowpass):
field = Q_s fieldname = 'Qs' fieldtitle = r'$Q_s$' if corr: units = '' else: units = r'W/m$^2$' for ll, lag in enumerate(lags): print('lag',lag) print if corr: lagcorrs[ll,:] = st2.cor(field,sst,lagx=lag) else: # Standardize SST sst = (sst - sst.mean(dim='time'))/sst.std(dim='time') lagcorrs[ll,:], intercept = st2.reg(field,sst,lagx=lag) # Plotting bnds = [np.round(lonbounds[0]-359), np.round(lonbounds[1]-361), latbounds[0], latbounds[1]] cent = (bnds[0]+bnds[1])/2. prj = cart.crs.PlateCarree(central_longitude=cent) pardiff = 30. merdiff = 60. if lonbounds[1] - lonbounds[0] <= 180:
x1 = lonbounds[0] x2 = lonbounds[1] y1 = latbounds[0] y2 = latbounds[1] #Q_s = a1*Q_o + residual #Q_s = a1*Q_o + Q_{s,r} a1, b = st2.reg(Qr, Q_s) Q_s_o = a1 * Qr Q_s_r = Q_s - Q_s_o Q_s_o = Q_s_o.transpose('time', 'lat', 'lon') a1_test = st2.cor(Q_s_o, Q_s_r) lats_ave = lats.sel(lat=slice(latbounds[0], latbounds[1])) Qs_sa = st2.spatial_ave_xr( Q_s.sel(lat=slice(latbounds[0], latbounds[1]), lon=slice(lonbounds[0], lonbounds[1])), lats_ave) Qo_sa = st2.spatial_ave_xr( Qr.sel(lat=slice(latbounds[0], latbounds[1]), lon=slice(lonbounds[0], lonbounds[1])), lats_ave) tendsst_sa = st2.spatial_ave_xr( tendsst.sel(lat=slice(latbounds[0], latbounds[1]), lon=slice(lonbounds[0], lonbounds[1])), lats_ave) Cbar_sa = st2.spatial_ave_xr( Cbar.sel(lat=slice(latbounds[0], latbounds[1]), lon=slice(lonbounds[0], lonbounds[1])), lats_ave)
fieldname = 'Qs' fieldtitle = r'$Q_s$' color='C0' if corr: units = '' else: units = r'W/m$^2$' for ll, lag in enumerate(lags): #print('lag',lag) print if corr: lagcorrs[ll,:] = st2.cor(sst,field,lagx=-lag) else: # Standardize SST sst = (sst - sst.mean(dim='time'))/sst.std(dim='time') lagcorrs[ll,:], intercept = st2.reg(sst,field,lagx=-lag) avelagcorrs[jj,:] = st2.spatial_ave(np.ma.array(lagcorrs, mask = np.isnan(lagcorrs)), lats) # Plotting vmin=-0.6 vmax=0.6 cbstep=0.2 if not(corr): vmin=-15.0