Thanks for reply Dennis.
>What datasets were used?
As in the website (http://www.ncl.ucar.edu/Applications/mjoclivar.shtml), I used http://www.esrl.noaa.gov/psd/data/gridded/data.ncep.reanalysis.html
For calculating the anomaly, I just simply modified mjoclivar_2.ncl. Again, thank you.
Regards,
Joeky
-----the code
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"
begin
;-------------------------------------------------------------
; User specifications
;-------------------------------------------------------------
NC = True ; create netCDF?
PLOT = False ; sample plots?
ymdStrt = 19800101 ; start yyyymmdd
ymdLast = 20120303 ; last
yrStrt = ymdStrt/10000
yrLast = ymdLast/10000
lev = 200 ; desired level
nhar = 4 ; number of fourier comp
var = "uwnd" ; name of file
vName = "U" ; name for plots
fili = var+".day.mean.nc" ; input file
;========================
; get list of all files and open as "one big file"
;========================
all_files = systemfunc ("ls ./Reana1/uwnd/uwnd*.nc")
f = addfiles (all_files, "r") ; note the "s" of addfile
print(all_files)
;========================
; choose how files are combined and read in variable across files
;========================
ListSetType (f, "cat") ; concatenate or "merge" (default)
if (NC) then
diro= "./Anom/" ; output dir
filo= var+".day."+lev+".anomalies."+yrStrt+"-"+yrLast+".nc" ; output file
end if
if (PLOT) then
wksType = "ps"
wksName = "mjoclivar" ; "mjo."+yrStrt+"_"+yrLast
end if
;***********************************************************
; Read user specified time and create required yyyyddd
;***********************************************************
; f = addfile (diri+fili , "r")
time = f[:]->time ; all times on file
ymd = cd_calendar(time, -2) ; yyyymmdd
iStrt = ind(ymd.eq.ymdStrt) ; index start
iLast = ind(ymd.eq.ymdLast) ; index last
delete(time)
delete(ymd)
;***********************************************************
; Read user specified time and create required yyyyddd
;***********************************************************
time = f[:]->time(iStrt:iLast) ; time:units = "hours since"
TIME = cd_calendar(time, 0) ; type float
year = floattointeger( TIME(:,0) )
month = floattointeger( TIME(:,1) )
day = floattointeger( TIME(:,2) )
ddd = day_of_year(year, month, day)
yyyyddd = year*1000 + ddd ; needed for input
;***********************************************************
; Read data: short2flt
;***********************************************************
x = short2flt(f[:]->$var$(iStrt:iLast,{lev},:,:)) ; convert to float
printVarSummary(x)
;***********************************************************
; Compute daily climatology: raw and then 'smoothed'
;***********************************************************
xClmDay = clmDayTLL(x, yyyyddd) ; daily climatology at each grid point
printVarSummary(xClmDay)
;***********************************************************
; Compute smoothed daily climatology using 'nhar' harmonics
;***********************************************************
xClmDay_sm = smthClmDayTLL(xClmDay, nhar)
printVarSummary(xClmDay_sm)
;***********************************************************
; Compute daily anomalies using raw and smoothed climatologies
;***********************************************************
xAnom = calcDayAnomTLL (x, yyyyddd, xClmDay)
printVarSummary(xAnom)
printMinMax(xAnom, True)
xAnom_sm = calcDayAnomTLL (x, yyyyddd, xClmDay_sm)
xAnom_sm_at_long_name = "Anomalies from Smooth Daily Climatology"
printVarSummary(xAnom_sm)
printMinMax(xAnom_sm, True)
delete( x ) ; no longer needed
;***********************************************************
; Create netCDF: convenience use 'simple' method
;***********************************************************
dimx = dimsizes(xAnom)
ntim = dimx(0)
nlat = dimx(1)
mlon = dimx(2)
if (NC) then
lat = f[0]->lat
lon = f[0]->lon
system("/bin/rm -f "+diro+filo) ; rm any pre-exist file, if any
fnc = addfile (diro+filo, "c")
filAtt = 0
filAtt_at_title = vName+": Daily Anomalies: "+yrStrt+"-"+yrLast
filAtt_at_source_file = fili
filAtt_at_creation_date = systemfunc("date")
fileattdef( fnc, filAtt ) ; copy file attributes
setfileoption(fnc,"DefineMode",True)
varNC = vName+"_anom"
varNC_sm = vName+"_anom_sm"
dimNames = (/"time", "lat", "lon"/)
dimSizes = (/ -1 , nlat, mlon/)
dimUnlim = (/ True , False, False/)
filedimdef(fnc,dimNames,dimSizes,dimUnlim)
filevardef(fnc, "time" ,typeof(time),getvardims(time))
filevardef(fnc, "lat" ,typeof(lat) ,getvardims(lat))
filevardef(fnc, "lon" ,typeof(lon) ,getvardims(lon))
filevardef(fnc, varNC ,typeof(xAnom) ,getvardims(xAnom))
filevardef(fnc, varNC_sm,typeof(xAnom) ,getvardims(xAnom))
filevarattdef(fnc,"time" ,time) ; copy time attributes
filevarattdef(fnc,"lat" ,lat) ; copy lat attributes
filevarattdef(fnc,"lon" ,lon) ; copy lon attributes
filevarattdef(fnc,varNC ,xAnom)
filevarattdef(fnc,varNC_sm,xAnom_sm)
fnc->time = (/time/)
fnc->lat = (/lat/)
fnc->lon = (/lon/)
fnc->$varNC$ = (/xAnom /)
fnc->$varNC_sm$ = (/xAnom_sm/)
end if
;************************************************
; plotting parameters
;************************************************
if (PLOT) then
LAT = (/ 60, 45, 5, -5, -45, 60 /)
LON = (/270, 30, 90, 90, 180, 0 /)
nPts = dimsizes( LAT )
plot = new ( nPts, graphic)
data = new ( (/2,366/), typeof(xClmDay), getFillValue(xClmDay))
wks = gsn_open_wks (wksType,wksName)
res = True ; plot mods desired
res_at_gsnDraw = False
res_at_gsnFrame = False
res_at_trXMinF = 1
res_at_trXMaxF = 366
;res_at_tiMainString = ""
res_at_xyLineThicknesses = (/1.0, 2.0/) ; make 2nd lines thicker
res_at_xyLineColors = (/"blue","red"/) ; change line color
res_at_xyMonoDashPattern = True ; all solid
do np=0,nPts-1
data(0,:) = xClmDay(:,{LAT(np)},{LON(np)})
data(1,:) = xClmDay_sm(:,{LAT(np)},{LON(np)})
res_at_gsnCenterString = "lat="+LAT(np)+" lon="+LON(np)
plot(np) = gsn_csm_y (wks,data,res) ; create plot
end do
resP = True ; modify the panel plot
resP_at_txString = vName+": Raw/Smooth Daily Climatology: "+yrStrt+"-"+yrLast
resP_at_gsnMaximize = True
resP_at_gsnPaperOrientation = "portrait"
gsn_panel(wks,plot,(/(nPts/2),2/),resP) ; now draw as one plot
;==========
; Plot anomalies for an arbitrarily selected near equatorial location
; Time: Oct 1, 1996 to April 1,1997 [arbitrary selection]
;==========
LATX = 0
LONX = 90
yyyymmdd = cd_calendar(time, -2)
;;yrfrac = yyyymmdd_to_yyyyfrac (yyyymmdd, 0)
;;delete(yrfrac_at_long_name)
xAnom_at_long_name = "Anomalies from Raw" ; short labels for plot
xAnom_sm_at_long_name = "Anomalies from Smooth"
ntBegin = ind(yyyymmdd.eq.20011001)
ntEnd = ind(yyyymmdd.eq.20020401)
monthLabels = (/1,4,7,10/)
monNam = (/"Jan","Feb","Mar","Apr","May","Jun" \
,"Jul","Aug","Sep","Oct","Nov","Dec" /)
xVal = new(ntim, typeof(xAnom&time) , "No_FillValue") ; bigger than
xLab = new(ntim, "string", "No_FillValue") ; needed
xValm = new(ntim, typeof(xAnom&time) , "No_FillValue") ; bigger than
ntm = -1
cr = inttochar(10) ; carriage return
do nt=ntBegin,ntEnd
if (day(nt).eq.1) then
ntm = ntm + 1
xVal(ntm) = xAnom&time(nt)
xLab(ntm) = monNam(month(nt)-1)
if (month(nt).eq.1) then
xLab(ntm) = xLab(ntm) + cr +sprinti("%0.4i", year(nt))
end if
end if
end do
rxy = True
rxy_at_gsnDraw = False
rxy_at_gsnFrame = False
rxy_at_gsnYRefLine = 0.0 ; create a reference line
rxy_at_gsnAboveYRefLineColor = "red" ; above ref line fill red
rxy_at_gsnBelowYRefLineColor = "blue" ; below ref line fill blue
rxy_at_xyLineThicknessF = 2.0
rxy_at_vpHeightF = 0.4 ; resize
rxy_at_vpWidthF = 0.8
rxy_at_tmXBMode = "Explicit"
rxy_at_tmXBValues = xVal(0:ntm)
rxy_at_tmXBLabels = xLab(0:ntm)
plot(0) = gsn_csm_xy (wks,time(ntBegin:ntEnd) \
,xAnom(ntBegin:ntEnd,{0},{90}),rxy)
plot(1) = gsn_csm_xy (wks,time(ntBegin:ntEnd) \
,xAnom_sm(ntBegin:ntEnd,{0},{90}),rxy)
resP_at_txString = vName+": Anomalies: (0,90E)"
gsn_panel(wks,plot(0:1),(/2,1/),resP)
end if
end
________________________________
From: Dennis Shea <shea_at_ucar.edu>
To: juki juki <juky_emc2_at_yahoo.com>
Cc: NCL Talk <ncl-talk_at_ucar.edu>
Sent: Wednesday, June 6, 2012 11:20 AM
Subject: Re: Wind anomaly, MJO_PC_INDEX and MJO clivar
The real key is the daily anomalies. If they are not correct, none
of the MJO diagnostics are correct. You should look very carefully
at how the anomalies were generated. What datasets were used?
For debugging and testing, use a smaller temporal sample and
plot the data.
On 6/3/12 10:58 PM, juki juki wrote:
> Dear All;
> As my previous email that I would like to plot MJO phase diagram by
> usinghttp://www.ncl.ucar.edu/Applications/Scripts/mjoclivar_15.ncl. To
> see the performance of the code, first I plot same data period as in the
> website. The result is very different from the example
> (http://www.ncl.ucar.edu/Applications/Images/mjoclivar_15_lg.png) in
> which the location of all MJO phases for all months is different from
> that in the website.
> Thus, my MJO_PC_INDEX.nc <http://mjo_pc_index.nc/> may NOT be correct.
> As we know the input of mjoclivar_15.ncl is MJO_PC_INDEX.nc
> <http://MJO_PC_INDEX.nc> which is creted by
> http://www.ncl.ucar.edu/Applications/Scripts/mjoclivar_14.ncl. Moreover,
> the input of
> http://www.ncl.ucar.edu/Applications/Scripts/mjoclivar_14.ncl are:
>
>
> filolr = "olr.day.anomalies.1980-2012.nc
> <http://olr.day.anomalies.1980-2012.nc/>"
> filu200 = "uwnd.day.200.anomalies.1980-2012.nc
> <http://uwnd.day.200.anomalies.1980-2012.nc/>"
> filu850 = "uwnd.day.850.anomalies.1980-2012.nc
> <http://uwnd.day.850.anomalies.1980-2012.nc/>"
> Among these 3 inputs, it seems the wind anomalies are not correct because
> when I try to calculate Conventional (covariance) univariate EOF
> analysis <http://www.ncl.ucar.edu/Applications/Scripts/mjoclivar_12.ncl>
> fortime span 1995-1999 (as in the website) using
> http://www.ncl.ucar.edu/Applications/Scripts/mjoclivar_12.ncl, the
> result of OLR is close to the website, but for U850 and U200 is
> different and significant different for EOF-3 (enclosed). Thus, I think
> my wind anomalies is not correctly calculated.
> I calculated wind anomalies from daily data as the code below
> (enclosed). I don’t know whether the way to merge the files and then
> calculate anomaly from those files is correct or not. Probably you have
> suggestion and help for that.
> Thanks you,
> JoeKy
>
>
> _______________________________________________
> ncl-talk mailing list
> List instructions, subscriber options, unsubscribe:
> http://mailman.ucar.edu/mailman/listinfo/ncl-talk
_______________________________________________
ncl-talk mailing list
List instructions, subscriber options, unsubscribe:
http://mailman.ucar.edu/mailman/listinfo/ncl-talk
Received on Tue Jun 5 20:35:28 2012
This archive was generated by hypermail 2.1.8 : Wed Jun 06 2012 - 15:17:44 MDT