hsushipei1 / TWMS

TWMS makes it more convenient to perform weekly tropical weather monitoring.
2 stars 2 forks source link

MJO Filtered OLR #1

Open windcirculation opened 2 years ago

windcirculation commented 2 years ago

Hi, I want to know how to filter OLR data for MJO. I want to say that I checked your scripts, and you suggest running those twice in there. I have daily OLR mean data from NCEP. Please suggest to me how to filter it for MJO. Any leads would be appreciated. I guess it is 40 to 60 days of filtration to OLR data from -30 to 30 lats. The figures should look something similar to the below figure attached, image

Thanks, Syed

hsushipei1 commented 2 years ago

Hi Syed, Thanks for asking. The filtered MJO pattern, period and amplitude in the figure you attached seem reasonable. Have you already successfully filtered the OLR of MJO band? What problem do you confront? I filter MJO by using "kf_filter" function in NCL, like: mjo_olr = kf_filter(olr_anomaly, obs_per_day, min_period, max_period, min_wavenumber, max_wavenumber, min_depth, max_depth, wave_name)

  1. olr_anomaly: Remove both long-term time mean and first three harmonics to get olr anomaly
  2. For the filtering band (period, wavenumber and equivalent depth): I refer to Wheeler and Kiladis (1999)'s configuration but i didnt confined it to be symmetric to the Equator. You can also refer to Carl Schreck's configuration.

Hope I've answered your confusion.

windcirculation commented 2 years ago

Hi, Thanks for your help. The thing is I am not familiar at all with the signal filtering as well as ncl. I want to filter the daily olr anomaly data to check the MJO only. How can i remove first three harmonics? I am not sure if I am doing it right, would you please have a look?

; These files are loaded by default in NCL V6.2.0 and newer ; load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl" ; load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl" ; load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl" ; These files still have to be loaded manually load "$NCARG_ROOT/lib/ncarg/nclscripts/contrib/kf_filter.ncl" load "$NCARG_ROOT/lib/ncarg/nclscripts/contrib/time_axis_labels.ncl" load "$NCARG_ROOT/lib/ncarg/nclscripts/contrib/cd_string.ncl" ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ; Main ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> begin

mis = -999 mis@_FillValue = -999

; set the wave parameters tMin = 40 tMax = 60 kMin = 1 kMax = 5 hMin = mis hMax = mis waveName = "MJO"

; number of timesteps in data for each day obsPerDay = 1

; number of days to filter on each side of the period we're interested in bufferDays = 90

; open the file inDir = "./" inFileName = "olr.day.anomalies.nc" inFile = addfile( inDir+inFileName, "r" )

; get the time units and set the first and last times that we want timeUnits = inFile->time@units startDate = ut_inv_calendar( 1980, 07, 01, 00, 0, 0, timeUnits, 0 ) endDate = ut_inv_calendar( 2021, 12, 31, 00, 0, 0, timeUnits, 0 )

; calculate our number of weights if( isStrSubset( timeUnits, "days" ) ) then buffer = bufferDays 1 else if( isStrSubset( timeUnits, "hours" ) ) then buffer = bufferDays 24 else print( "DANGER! DANGER! Unexpected time units" ) return end if end if

filtStart = startDate - buffer filtStart@units = timeUnits filtEnd = endDate + buffer filtEnd@units = timeUnits

;---Read the data and filter it print( "Reading..." ) inData = inFile->olr_anom({filtStart:filtEnd},{-30:30},:) origData = dim_avg_n_Wrap( inData, 1 )

print( "Filtering..." ) filtData = kf_filter( origData(time|:,lon|:), obsPerDay \ , tMin, tMax, kMin, kMax, hMin, hMax, waveName )

printVarSummary( filtData ) print( min(filtData) + " " + max(filtData) )

;---Open workstation, and read and combine color map data

print( "Thank you, come again." + systemfunc("date") ) diro ="./" filo="mjo_latlon_983days.nc" system("/bin/rm -f "+diro+filo) ; rm any pre-existing file f = addfile(diro+filo, "c") filedimdef(f,"time",-1,True) f->LP=filtData end