[ncl-talk] Possible bug with SPEI function?

Alan Brammer abrammer at albany.edu
Mon Feb 22 09:31:09 MST 2016


Hi Benita, 

Multiple things.
 https://www.ncl.ucar.edu/Document/Functions/Built-in/spei.shtml <https://www.ncl.ucar.edu/Document/Functions/Built-in/spei.shtml>
At the top of the page.  " Available in version 6.3.1 <https://www.ncl.ucar.edu/prev_releases.shtml#6.3.1> and later. "
 So you can’t use the function yet, latest released version is 6.3.0.  Which you’re using. 


Secondly, 
You can’t have variables and functions named the same thing.   When the function spei() is included, trying to define an array named spei is going to create problems.  

Line 16 won’t work in any language I know of.  Rename your variable so it doesn’t clash with the function name. 


Third. 
Again from the top link, spei() will expect 6 arguments and you only passed 4.  

Fourth.
The specific error you’re getting is because NCL is trying to subscript the spei variable using False as you passed on line 16.  False isn’t a valid subscript. 

Fifth.
Included edited lines below which should work once 6.3.1 is released.   Though you will need to read in some temperature data as well. Read the functions documentation. 


;;;;   Will need 6.3.1  

   f= addfile("pr_Amon_ensemble_historical_190001-200512.nc", "r")
   prc    = f->pr                   ; pr(time,lat,lon)
   printVarSummary(prc)

   prc_dimnames = getvardims(prc)
 time = lat= prc&$prc_dimnames(0)$		;; get dimension coordinates without knowing dimension names
  lat= prc&$prc_dimnames(1)$
  lon= prc&$prc_dimnames(2)$
 
  dimp   = dimsizes(prc)              ; # monthly precipitation values
   ntim   = dimp(0)
   nlat   = dimp(1)
   mlon   = dimp(2)


   len    = (/ 6, 12, 24 /)
   klen   =  dimsizes(len)
   spei_data    =  new((/klen,ntim,nlat,mlon/) ,float,prc at _FillValue)


  t =  ….  ; spei needs a temperature variable same size as prc

 do k=0,klen-1
      spei_data(k,:,:,:) = spei(prc, t, len(k),lat, False, 0)
  end do



Good luck, 
Alan



> On 22 Feb 2016, at 11:11, Tam, Benita (EC/EC) <benita.tam at canada.ca> wrote:
> 
> Hi,
>  
> I am trying to calculate SPEI using the SPEI function in NCL with gridded data, but when I run the script, I get an error message saying that the subscripts must be one dimensional. This is expected for data for one location, but not for gridded data. My sample script is attached (it’s basically the same as the example provided with the function).
>  
> NCL version: 6.3.0
> Script (see attached)
> Error message: fatal:Illegal subscript. Subscripts must be scalar or one dimensional vectors
> Url for netcdf data: http://ccds-dscc.ec.gc.ca/files/cmip5/pr/pr_Amon_ensemble_historical_190001-200512.nc <http://ccds-dscc.ec.gc.ca/files/cmip5/pr/pr_Amon_ensemble_historical_190001-200512.nc>
>  
> Thanks,
> Benita
>  
>  
> <test_prc.ncl>_______________________________________________
> ncl-talk mailing list
> ncl-talk at ucar.edu <mailto:ncl-talk at ucar.edu>
> List instructions, subscriber options, unsubscribe:
> http://mailman.ucar.edu/mailman/listinfo/ncl-talk <http://mailman.ucar.edu/mailman/listinfo/ncl-talk>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mailman.ucar.edu/pipermail/ncl-talk/attachments/20160222/9a8d44d1/attachment.html 


More information about the ncl-talk mailing list