[ncl-talk] Sub: error

Dennis Shea shea at ucar.edu
Mon Jun 6 18:30:50 MDT 2016


You created 'n' as an array

n=u(level|:,lat|:,lon|:,time|iStrt:iLast)
anew=n({500},:,:,:)

then you use 'n'

do n=0,neof-1

do loops require require *scalars* n=0 is not allowed

On Mon, Jun 6, 2016 at 4:54 PM, Adv <advita6 at gmail.com> wrote:

> Hi ,
> Could someone help me to fix this bug? I don't whats the fatal error says
> about.
> Thank you
>
> ;***************************************************
> begin
> ;***************************************************
>   yrStrt = 196501
>   yrLast = 200512
>
>   season = "SON"    ; choose Dec-Jan-Feb seasonal mean
> ;####################################################
> ............
> f    = addfile("hgt.mon.mean.nc", "r")   ; note the "s" of addfile
> u = f->hgt
> printVarSummary (u)
>    YYYYMM = cd_calendar( f->time, -1)
>
>    iStrt  = ind(YYYYMM.eq.yrStrt)
>    iLast  = ind(YYYYMM.eq.yrLast)
> n=u(level|:,lat|:,lon|:,time|iStrt:iLast)
> anew=n({500},:,:,:)
> printVarSummary (anew)
> ;############################################################
> ;anomalies-------------------------
> temp= rmMonAnnCycTLL(anew(time|:,lat|:,lon|:))
> printVarSummary(temp)
> ;dtrend the values/------------------
> anew1Dtrend = dtrend(temp(lat|:,lon|:,time|:),True)
> printVarSummary(anew1Dtrend)
> ;print(anew1Dtrend at slope)
> ;print(anew1Dtrend at y_intercept)
> copy_VarCoords(anew,anew1Dtrend)
>
> ; ==============================================================
> ; compute desired global seasonal mean: month_to_season (contributed.ncl)
> ; ==============================================================
>   anew1a    = month_to_season (anew1Dtrend(time|:,lat|:,lon|:), season)
>   nyrs   = dimsizes(anew1a&time)
>   printVarSummary(anew1a)
> printMinMax(anew1a,False)
> ;%%%%%%%%%%%%%%%EOF%%%%%%%%%%%%%%%%%%%%%%%%
> ;Dont change at all . Here is a trick..
> ;Globe
>   latS   = 37
>   latN   =  49.
>  lonL     =  -116
>  lonR     = -90
>
> ;Center=0
>
> ;%%%%%%%%%%%%%%%EOF%%%%%%%%%%%%%%%%%%%%%%%%
>
>
> neof   = 3        ; number of EOFs
>   optEOF = True
>   optEOF at jopt = 0   ; This is the default; most commonly used; no need to
> specify.
> ;;optEOF at jopt = 1   ; **only** if the correlation EOF is desired
> ; ==============================================================
> ; dataset longitudes span 0=>357.5
> ; Because EOFs of the North Atlantic Oscillation are desired
> ; use the "lonFlip" (contributed.ncl) to reorder
> ; longitudes to span -180 to 177.5: facilitate coordinate subscripting
> ; ==============================================================
>   anew1a   = lonFlip(anew1a)
>   printVarSummary(anew1a)                              ; note the
> longitude coord
> orig=anew1a({lat|latS:latN},{lon|lonL:lonR},time|:)
>   printVarSummary(orig)
>
> ; =================================================================
> ; create weights:  sqrt(cos(lat))   [or sqrt(gw) ]
> ; =================================================================
>   rad    = 4.*atan(1.)/180.
>   clat   = anew1a(0,:,0)
>   printVarSummary(clat)
>   clat   = sqrt( cos(rad*clat) )                 ; gw for gaussian grid
>   printVarSummary(clat)
> ; =================================================================
> ; weight all observations
> ; =================================================================
>   wSLP   = anew1a                                   ; copy meta data
>   printVarSummary(wSLP)
>   printMinMax(wSLP,False)
>   wSLP   = anew1a*conform(anew1a, clat, 1)
>   wSLP at long_name = "Wgt: "+anew1a at long_name
>   printVarSummary(wSLP)
> printMinMax(wSLP,False)
> ; =================================================================
> ; Reorder (lat,lon,time) the *weighted* input data
> ; Access the area of interest via coordinate subscripting
> ; =================================================================
>   x      = wSLP({lat|latS:latN},{lon|lonL:lonR},time|:)
>   printVarSummary(x)
> print(min(x))
> print(max(x))
>  dimx   = dimsizes( x )
>   mln    = dimx(1)
>   sumWgt = mln*sum( clat({lat|latS:latN}) )
> printMinMax(sumWgt,False)
>   eof    = eofunc_Wrap(x, neof, optEOF)
>   printVarSummary(eof)
>
> print(eof(0,:,:))
> ;return
> ;;;;EOF spatial patterns may be tested for orthogonality by using the dot
> product:
> d01 = sum(eof(0,:,:)*eof(1,:,:))
>   d12 = sum(eof(1,:,:)*eof(2,:,:))
>   d02 = sum(eof(0,:,:)*eof(2,:,:))
>   print("d01="+d01+"  d12="+d12+"  d02="+d02)  ; may be +/- 1e-8
> ;return
> printMinMax(eof(0,:,:),False)
> ;To retain same unit
>   do ne=0,neof-1
>      eof(ne,:,:) = eof(ne,:,:)*sqrt( eof at eval(ne) )
>   end do
> ;print(eof(:,:,:))
> printMinMax(eof(0,:,:),False)
> ;return
> ;========================================================
> ;Print the Percentage variance;;;;;;
> ; print("% var="+ eof at pcvar(0))
> ;========================================================
> eof_ts = eofunc_ts_Wrap (x, eof, False)
>  printVarSummary( eof_ts )
>   print( eof_ts )
> ;=======================================================
> ;To test the EOF time series for orthogonality, compute correlations;;;;;
>   r01 = escorc(eof_ts(0,:), eof_ts(1,:))
>   r12 = escorc(eof_ts(1,:), eof_ts(2,:))
>   r02 = escorc(eof_ts(0,:), eof_ts(2,:))
>   print("r01="+r01+"  r12="+r12+"  r02="+r02)   ; numbers may be +/- 1e-8
> ; =================================================================
> ; Normalize time series: Sum spatial weights over the area of used
> ; =================================================================
> ;  dimx   = dimsizes( x )
> ;  mln    = dimx(1)
> ;  sumWgt = mln*sum( clat({lat|latS:latN}) )
> ;eof_ts = eof_ts/sumWgt
> ;nlat = dimsizes(eof&lat)    ; lat==> whatever the coordinate name is
> ;  mlon= dimsizes(eof&lon)
> ;print(eof_ts)
>   eof_ts = dim_standardize_n( eof_ts, 0, 1)      ; normalize
>   eof_regres = eof                               ; create an array w meta
> data
>   do ne=0,neof-1
>      eof_regres(ne,:,:) = (/
> regCoef(eof_ts(ne,:),orig(lat|:,lon|:,time|:)) /)
>   end do
> printMinMax(eof_regres(0,:,:),False)
> printVarSummary( eof_regres )
> ;print(eof_ts)
> ;print(eof(0,:,:))
> ;===================================================================
>   nlat = dimsizes(eof&lat)    ; lat==> whatever the coordinate name is
>   mlon= dimsizes(eof&lon)
> ;------------------------------------------------------------
>
> ; =================================================================
> ; Extract the YYYYMM from the time coordinate
> ; associated with eof_ts [same as SLP&time]
> ; =================================================================
>
>   yyyymm = cd_calendar(eof_ts&time,-2)/100
> ;;yrfrac = yyyymm_to_yyyyfrac(yyyymm, 0.0); not used here
> ;*******************************************
> ; North significance test: any pcvar, eval_transpose, eval can be used
> ;*******************************************
>
>   dimp   = dimsizes(x)
>   ntim   = dimp(0)                                            ; max #
> eigenvalues possible
>
>   prinfo = True
>   sig    = eofunc_north(eof at pcvar, ntim, prinfo)
>
> ;************************************************
> ; plotting parameters
> ;************************************************
> ;wks =
> gsn_open_wks("x11","SlpReconst_Anom_eof_Reanal_"+season+"_temp1965-2005")
> wks =
> gsn_open_wks("x11","heightReconst_Anom_eof_Reanal_"+season+"_temp1965-2005")
>  gsn_define_colormap(wks,"NCV_jaisnd")
>  plot = new(neof,graphic)                ; create graphic array
>                                           ; only needed if paneling
> ; EOF patterns
>
>   res                      = True
>   res at gsnDraw              = False        ; don't draw yet
>   res at gsnFrame             = False        ; don't advance frame yet
>
> ;---This resource not needed in V6.1.0
>   res at gsnSpreadColors      = True         ; spread out color table
> res at cnLevelSelectionMode = "ManualLevels"  ; set manual contour levels
>   res at cnMinLevelValF       = -10.0       ; set min contour level
>   res at cnMaxLevelValF       = 10.0   ; set max contour level
>   res at cnLevelSpacingF      = 0.5      ; set contour spacing
>
>   res at gsnAddCyclic         = False        ; plotted dataa are not cyclic
>
>   res at mpFillOn             = False        ; turn off map fill
>
>   res at mpMinLatF            = eof&lat(0)+3         ; zoom in on map
>   res at mpMaxLatF            = eof&lat(nlat-1)
>   res at mpMinLonF            = eof&lon(0)
>   res at mpMaxLonF            = eof&lon(mlon-1)
>
> res at cnLineLabelsOn       = False
>  res at cnFillOn             = True         ; turn on color fill
>   res at cnLinesOn            = False        ; True is default
>   res at lbLabelBarOn         = False        ; turn off individual lb's
> ; res at mpPerimOn              = True                    ; draw box around
> map
> res at mpGeophysicalLineThicknessF = 3.0
> res at mpGeophysicalLineColor = "Black"; (/22/)
> res at mpOutlineBoundarySets = "GeophysicalAndUSStates" ; add state
> boundaries
> res at mpNationalLineColor  = res at mpGeophysicalLineColor
> res at mpUSStateLineThicknessF = 3.0
> res at mpUSStateLineColor  = res at mpGeophysicalLineColor
>
>
>                                           ; set symmetric plot min/max
> ;  symMinMaxPlt(eof, 16, False, res)       ; contributed.ncl
>
> ; panel plot only resources
>   resP                     = True         ; modify the panel plot
>   resP at gsnMaximize         = True         ; large format
>   resP at gsnPanelLabelBar    = True         ; add common colorbar
>   resP at lbLabelAutoStride   = True         ; auto stride on labels
>   resP at lbLabelFontHeightF      = 0.017     ; label bar font
>
>   yStrt                    = yyyymm(0)/100
>   yLast                    = yyyymm(nyrs-1)/100
>   resP at txString            = "Regres_Reanal_height(m): "+season+":
> "+yStrt+"-"+yLast
>
> ;*******************************************
> ; first plot
> ;*******************************************
>   do n=0,neof-1
>      res at gsnLeftStringFontHeightF   = 0.02        ; instead of using
> txFontHeightF or gsnStringFontHeightF
>   res at gsnCenterStringFontHeightF = 0.02            ; to set the
> gsnLeft/Center/RightString font heights,
>   res at gsnRightStringFontHeightF  = 0.02        ; individually set each
> string's font height.
>      res at gsnLeftString  = "EOF "+(n+1)
>      res at gsnCenterString= "NORTH="+sig(n)
>      res at gsnRightString = sprintf("%5.1f", eof at pcvar(n)) +"%"
>      plot(n)=gsn_csm_contour_map_ce(wks,eof_regres(n,:,:),res)
>   end do
>   gsn_panel(wks,plot,(/neof,1/),resP)               ; now draw as one plot
>
>
>   frame(wks)
>
>
> end
>
>
>
> ERROR printed:
>
> fatal:Loop variable must be scalar, can't execute loop
> fatal:["Execute.c":8575]:Execute: Error occurred at or near line 242 in
> file heightReconstruct_Temp_eof_Reanal.ncl
>
>
>
> _______________________________________________
> ncl-talk mailing list
> ncl-talk at ucar.edu
> List instructions, subscriber options, unsubscribe:
> http://mailman.ucar.edu/mailman/listinfo/ncl-talk
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.ucar.edu/pipermail/ncl-talk/attachments/20160606/dd1bd8e7/attachment.html 


More information about the ncl-talk mailing list