sstsave = sstsave.subRegion(latitude=(latbounds[0], latbounds[1]), longitude=(lonbounds[0], lonbounds[1])) fieldsave = fieldsave.subRegion(latitude=(latbounds[0], latbounds[1]), longitude=(lonbounds[0], lonbounds[1])) lats = sst.getLatitude()[:] lons = sst.getLongitude()[:] nt = sst.shape[0] lons[0] = 0 nlat = len(lats) nlon = len(lons) #Regress out CTI if rENSO: CTIlag = 2 sst = regressout_x(sst[CTIlag:, ...], CTI[:-CTIlag]) #field = regressout_x(field[CTIlag:,...], CTI[:-CTIlag]) field = field[CTIlag:, ...] tyears = tyears[CTIlag:, ...] #field = regressout_x(field, CTI) nt = sst.shape[0] # CTI Filter requirements. order = 5 fs = 1 # sample rate, (cycles per month) Tn = 12 * 5. cutoff = 1 / Tn # desired cutoff frequency of the filter (cycles per month) #subtract global annual mean to isolate local processes #sstprime = sst.T - sst_globe
# 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_enso = 12.*2 cutoff_enso = 1/Tn_enso # 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) sste = st2.regressout_x(enso, sste) Q_se = st2.regressout_x(enso, Q_se) Q_re = st2.regressout_x(enso, Q_re) Q_tote = st2.regressout_x(enso, Q_tote) #lambdaQ_totlag0 = st.cov(sste, Q_tote, lagx=0)/st.cov(sste,sste, lagx=0) lambdaQ_totlag1 = st.cov(sste, Q_tote, lagx=-1)/st.cov(sste,sste, lagx=-1) #lambdaQ_totlag2 = st.cov(sste, Q_tote, lagx=-2)/st.cov(sste,sste, lagx=-2) #lambdaQ_totlag3 = st.cov(sste, Q_tote, lagx=-3)/st.cov(sste,sste, lagx=-3) #lambdaQ_tot = (lambdaQ_totlag1 + lambdaQ_totlag2 + lambdaQ_totlag3)/3. lambdaQ_tot = lambdaQ_totlag1 #lambdaQ_tot = lambdaQ_totlag3 #lambda: find the 'response' time of the atmosphere (lets just assume global mean e-folding sst autocorrelation time)
#NAminlati = 0 #NAmaxlati = -1 #NAminloni = 0 #NAmaxloni = -1 lats = field.getLatitude()[:] lons = field.getLongitude()[:] nlat = len(lats) nlon = len(lons) nt = field.shape[0] #interpolate to coarser grid to speed up #sst= sst.regrid(cgrid, regridTool="esmf", regridMethod = "linear") #field = field.regrid(cgrid, regridTool="esmf", regridMethod = "linear") #regress out CTI from all fields sst_MM = regressout_x(sst, CTI) #field = regressout_x(field, CTI) #u = regressout_x(u, CTI) #v = regressout_x(v, CTI) #ps = regressout_x(ps, CTI) #MMlatbounds = [-30,30] #MMlonbounds = [290,360] # #MMlatboundmini = np.argmin(np.abs(MMlatbounds[0]-lats)) #eqi = np.argmin(np.abs(0 - lats)) #MMlatboundmaxi = np.argmin(np.abs(MMlatbounds[1]-lats)) #MMlonboundmini = np.argmin(np.abs(MMlonbounds[0]-lons)) #MMlonboundmaxi = np.argmin(np.abs(MMlonbounds[1]-lons)) # #sst_MMNH = sst_MM[:,eqi:MMlatboundmaxi,MMlonboundmini:MMlonboundmaxi]
# SW_net_surf = SW_net_surf.fillna(0.) # SW_net_surf = xr.DataArray(signal.detrend(SW_net_surf, axis=0), dims=SW_net_surf.dims, coords=SW_net_surf.coords) # Q_ek = Q_ek.fillna(0.) # Q_ek = xr.DataArray(signal.detrend(Q_ek, axis=0), dims=Q_ek.dims, coords=Q_ek.coords) # # # Q_ek_f = Q_ek_f.fillna(0.) # Q_ek_f = xr.DataArray(signal.detrend(Q_ek_f, axis=0), dims=Q_ek_f.dims, coords=Q_ek_f.coords) Tn = 6. cutoff = 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))) if rENSO: sst = st2.regressout_x(enso, sst) #thf = st2.regressout_x(enso, thf) Qs = st2.regressout_x(enso, Qs) #eqi = np.where(lats[1:-1]==0) #Q_ek[:,eqi,:] = 0 #Q_ek_test = Q_ek #adv_hs = -(adv_hDivH['X'] + adv_hDivH['Y'])/vol # Filter requirements. order = 5 fs = 1 # sample rate, (cycles per month) Tn =4.*12
#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): Tn = 0. if rENSO: sste = st2.regressout_x(enso, sst) Q_se = st2.regressout_x(enso, Q_s) Q_re = st2.regressout_x(enso, Q_r) Q_tote = st2.regressout_x(enso, Q_tot) # Scaling factor (to convert from units of W*K/(s*m^2) to K^2) #G = (2*dt**2/(Cbar**2*(1-r2corrs))) #lambdaQ_tot = st.cov(sste, Q_tote, lagx=-1)/st.cov(sste,sste, lagx=-1) lambdaQ_totlag0 = st.cov(sste, Q_tote, lagx=0) / st.cov(sste, sste, lagx=0) lambdaQ_totlag1 = st.cov(sste, Q_tote, lagx=-1) / st.cov(sste, sste, lagx=-1) lambdaQ_totlag2 = st.cov(sste, Q_tote, lagx=-2) / st.cov(sste, sste, lagx=-2) lambdaQ_totlag3 = st.cov(sste, Q_tote, lagx=-3) / st.cov(sste, sste, lagx=-3) #lambdaQ_tot = (lambdaQ_totlag1 + lambdaQ_totlag2 + lambdaQ_totlag3)/3.
#NAminlati = 0 #NAmaxlati = -1 #NAminloni = 0 #NAmaxloni = -1 lats = field.getLatitude()[:] lons = field.getLongitude()[:] nlat = len(lats) nlon = len(lons) nt = field.shape[0] #interpolate to coarser grid to speed up #sst= sst.regrid(cgrid, regridTool="esmf", regridMethod = "linear") #field = field.regrid(cgrid, regridTool="esmf", regridMethod = "linear") #regress out CTI from all fields sst = regressout_x(sst, CTI) field = regressout_x(field, CTI) u = regressout_x(u, CTI) v = regressout_x(v, CTI) MMlatbounds = [-30,30] MMlonbounds = [290,360] MMlatboundmini = np.argmin(np.abs(MMlatbounds[0]-lats)) eqi = np.argmin(np.abs(0 - lats)) MMlatboundmaxi = np.argmin(np.abs(MMlatbounds[1]-lats)) MMlonboundmini = np.argmin(np.abs(MMlonbounds[0]-lons)) MMlonboundmaxi = np.argmin(np.abs(MMlonbounds[1]-lons)) sst_MMNH = sst[:,eqi:MMlatboundmaxi,MMlonboundmini:MMlonboundmaxi] sst_MMSH = sst[:,MMlatboundmini:eqi,MMlonboundmini:MMlonboundmaxi]
#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) Tn = 6. cutoff = 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,fs,order) if rENSO: sst = st2.regressout_x(enso, sst) #Gulf Stream 37.5–45N, 72–42W wlon=288 elon=318 nlat = 45 slat = 37.5 #Kuroshio 36–42N, 140–171E # wlon=142 # elon=180 # nlat = 45 # slat = 36 #Eastern North Pacific # wlon=190
Q_net_surf = Q_net_surf.fillna(0.) Q_net_surf = xr.DataArray(signal.detrend(Q_net_surf, axis=0), dims=Q_net_surf.dims, coords=Q_net_surf.coords) #Q_ek = Q_net_surf.fillna(0.) #Q_ek = xr.DataArray(signal.detrend(Q_ek, axis=0), dims=Q_ek.dims, coords=Q_ek.coords) lats = sst.lat lons = sst.lon Tn = 6. cutoff = 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))) if rENSO: sst = st2.regressout_x(enso, sst) thf = st2.regressout_x(enso, thf) Q_net_surf = st2.regressout_x(enso, Q_net_surf) # Filter requirements. order = 5 fs = 1 # sample rate, (cycles per month) delTn = 4 Tnmax = 6*12 Tns = np.arange(0,Tnmax+delTn,delTn) Tns = Tns*1.
sst = sst.subRegion(latitude=(latbounds[0], latbounds[1]), longitude=(lonbounds[0], lonbounds[1])) field = field.subRegion(latitude=(latbounds[0], latbounds[1]), longitude=(lonbounds[0], lonbounds[1])) lats = sst.getLatitude()[:] lons = sst.getLongitude()[:] nt = sst.shape[0] lons[0] = 0 nlat = len(lats) nlon = len(lons) #Regress out CTI if rENSO: CTIlag = 2 sst = regressout_x(sst[CTIlag:, ...], CTI[:-CTIlag]) field = regressout_x(field[CTIlag:, ...], CTI[:-CTIlag]) #field = field[CTIlag:,...] tyears = tyears[CTIlag:, ...] #field = regressout_x(field, CTI) nt = sst.shape[0] # CTI Filter requirements. order = 5 fs = 1 # sample rate, (cycles per month) Tn = 12 * 5. cutoff = 1 / Tn # desired cutoff frequency of the filter (cycles per month) #subtract global annual mean to isolate local processes #sstprime = sst.T - sst_globe
longitude=(lonbounds[0], lonbounds[1])) lats = sst.getLatitude()[:] lons = sst.getLongitude()[:] nt = sst.shape[0] lons[0] = 0 nlat = len(lats) nlon = len(lons) #NAminlati = 0 #NAmaxlati = -1 #NAminloni = 0 #NAmaxloni = -1 #Regress out CTI sst_test = regressout_x(sst, CTI) field = regressout_x(field, CTI) #CHANGE THIS TO MODIFY RM WINDOW LENGTH N_map = 5 * 12 + 1 ci = (N_map - 1) / 2 ltlag = 5 stlag = 1 #lagmax=3 lagmax = 120 lagstep = 24 lags = np.arange(-lagmax, lagmax + 2 * lagstep, lagstep) #lags = np.arange(-3,0,6,3)