[ncl-talk] SPI calculation

Dennis Shea shea at ucar.edu
Fri Nov 30 16:23:40 MST 2018


You keep referring to
   *http://www.ncl.ucar.edu/Applications/spi.shtml*
<http://www.ncl.ucar.edu/Applications/spi.shtml>
   Example: spi_2.ncl


This is a graphic example.
This is looping over *each* run length ....
To be clear "*each*" means  **one** run length to *plot* the SPI  at
*that *run-length
at two different times.

  do nr=0,nrun-1
    spi    = dim_spi_n(prc, runlen(nr), False, 0)   ; *one run length*
    ... plot code ...
    end do


To get all run lengths in one function call use

SPI = dim_spi_n(prc, runlen, False, 0)   ; note 'runlen' .... not ...
"runlen(nr)'
printVarSummary(SPI)

This is what you should output to netCDF.

===


On Fri, Nov 30, 2018 at 11:44 AM Soma Roy <somaroy892 at gmail.com> wrote:

> One thing I would like to mention.
>
> In spi_2.ncl script,
> spi=dim_spi_n(prc, runlen(nr), False, 0)
>
> Reduced the dimensions (len x time x latx lon) to (time x latx lon).
>
> So I am not getting 4 dimensions in a single file.
>
> Kindly inform me how to overcome it.
>
> Thanks,
> Soma
>
> On Fri, Nov 30, 2018, 23:42 Soma Roy <somaroy892 at gmail.com wrote:
>
>> Thank you very much.
>>
>> Soma
>>
>> On Fri, Nov 30, 2018, 21:32 Dennis Shea <shea at ucar.edu wrote:
>>
>>> *Please* read the File IO on netCDF. As noted in the documentation, the
>>> following is the most commonly used approach.
>>>
>>>   http://www.ncl.ucar.edu/Applications/method_1.shtml
>>>
>>> ===
>>>
>>>        *system* <http://www.ncl.ucar.edu/Document/Functions/Built-in/system.shtml>("/bin/rm -f SPI.nc")   ; remove any pre-existing file
>>>        ncdf = *addfile* <http://www.ncl.ucar.edu/Document/Functions/Built-in/addfile.shtml>("SPI.nc" ,"c")  ; open output netCDF file
>>>
>>>     ;===================================================================
>>>     ; create global attributes of the file (optional)
>>>     ;===================================================================
>>>        fAtt               = True            ; assign file attributes
>>>        fAtt at title         = "Standardized Precipitation Index"
>>>        fAtt at Conventions   = "None"
>>>        fAtt at creation_date = *systemfunc* <http://www.ncl.ucar.edu/Document/Functions/Built-in/systemfunc.shtml> ("date")
>>>        *fileattdef* <http://www.ncl.ucar.edu/Document/Functions/Built-in/fileattdef.shtml>( ncdf, fAtt )            ; copy file attributes
>>>
>>>     ;===================================================================
>>>     ; output variables directly; NCL will call appropriate functions
>>>     ; to write the meta data associated with each variable
>>>     ;===================================================================
>>>        ncdf->SPI  = spi    ; (len,time,lat,lon)
>>>
>>>
>>> On Thu, Nov 29, 2018 at 10:29 PM Soma Roy <somaroy892 at gmail.com> wrote:
>>>
>>>> Hello Mary,
>>>>
>>>> I just want to know that what is the more efficient way to save the
>>>> variable "spi" as a netcdf for multiple runlen?
>>>>
>>>> Say 3,6,9 and 12 or 12 and 24 as mentioned in the spi_2.ncl script.
>>>>
>>>> I want to save all runlen in a single netcdf file in single run time.
>>>>
>>>> Please kindly inform me.
>>>>
>>>> Thanking you,
>>>> Soma
>>>>
>>>> On Thu, Nov 29, 2018, 20:12 Dennis Shea <shea at ucar.edu wrote:
>>>>
>>>>> I do not understand: *"197207 with 3 month running avg"*
>>>>>
>>>>>
>>>>> If you used:
>>>>>
>>>>>
>>>>>
>>>>> *runlen = (/ 12, 24 /)  *
>>>>>
>>>>> and your source array is dimensioned:
>>>>> *(time,lat,lon) ==> (492,129,135)*then your SPI variable should be
>>>>>
>>>>>
>>>>>
>>>>> *[len | 2] x [time | 492] x [lat | 129] x [lon | 135]*and your source array is dimensioned:
>>>>> * (time,lon,lat) ==> (492,135,129)*then your SPI variable should be
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> *[len | 2] x [time | 492] x [lon | 135] x [lat | 129]  ---     0            1             2             3---*
>>>>>
>>>>>  *IF* you want to perform a 3-month running average of the 12 and 24 run-lengths
>>>>>
>>>>> nrun = 3
>>>>> opt  = ?   ; read documentation
>>>>> tdim = 1   ; time dimension
>>>>> spi3= *runave_n_Wrap* <http://www.ncl.ucar.edu/Document/Functions/Contributed/runave_n_Wrap.shtml> (spi, nrun, tdim, opt)
>>>>>
>>>>> *printVarSummary*(spi3)
>>>>>
>>>>> ========
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>> On Thu, Nov 29, 2018 at 1:15 AM Soma Roy <somaroy892 at gmail.com> wrote:
>>>>>
>>>>>> Hello Mary,
>>>>>>
>>>>>> I save the data of 'spi' as netcdf file.
>>>>>>
>>>>>> Where dimension of the data is like below;
>>>>>> spi(135x129x492) ; (lon, lat, spi values)
>>>>>>
>>>>>> Now my question is if I want to select 197207 with 3 month running
>>>>>> avg. Then how to select those indices from 3rd dimension of the matrix
>>>>>> "spi"?
>>>>>>
>>>>>> Start yr is 1970.
>>>>>>
>>>>>> Please kindly inform me.
>>>>>>
>>>>>> Thanking you,
>>>>>> Soma
>>>>>>
>>>>>> On Thu, Nov 29, 2018, 12:39 Oluwaseun Ilori <wilseun at gmail.com wrote:
>>>>>>
>>>>>>> Good day, please could you assist with the correct script of the spi
>>>>>>> calculation, I'm having problem listing the result of the one I'm doing to
>>>>>>> text file for further analysis on ArcGis.
>>>>>>>
>>>>>>> Thanks
>>>>>>>
>>>>>>> On Thu, Nov 29, 2018, 7:47 AM Soma Roy <somaroy892 at gmail.com wrote:
>>>>>>>
>>>>>>>> I fixed the issue. Please ignore my last mail.
>>>>>>>>
>>>>>>>> Soma
>>>>>>>>
>>>>>>>> On Thu, Nov 29, 2018, 11:07 Soma Roy <somaroy892 at gmail.com wrote:
>>>>>>>>
>>>>>>>>> Hello Mary,
>>>>>>>>>
>>>>>>>>> I am using the attached script. Modified it as per your hints. But
>>>>>>>>> getting some errors at run time.
>>>>>>>>>
>>>>>>>>> printVarSummary of the data is as follows;
>>>>>>>>> Variable: prc
>>>>>>>>> Type: double
>>>>>>>>> Total Size: 73560960 bytes
>>>>>>>>>             9195120 values
>>>>>>>>> Number of Dimensions: 3
>>>>>>>>> Dimensions and sizes:   [time | 528] x [lat | 129] x [lon | 135]
>>>>>>>>> Coordinates:
>>>>>>>>>             time: [ 360..1068]
>>>>>>>>>             lat: [ 6.5..38.5]
>>>>>>>>>             lon: [66.5.. 100]
>>>>>>>>> Number Of Attributes: 3
>>>>>>>>>   _FillValue :  -999
>>>>>>>>>   long_name :   GRIDDED RAINFALL
>>>>>>>>>   missing_value :       -999
>>>>>>>>>  : min=0   max=222.9121398925781
>>>>>>>>>
>>>>>>>>> I am getting the following errors;
>>>>>>>>> fatal:Dimension sizes of left hand side and right hand side of
>>>>>>>>> assignment do not match
>>>>>>>>> fatal:["Execute.c":8640]:Execute: Error occurred at or near line
>>>>>>>>> 47 in file spi_2.ncl
>>>>>>>>>
>>>>>>>>> fatal:NclOneDValGetClosestIndex: Non-monotonic coordinate value
>>>>>>>>> being used, can't complete coordinate subscript
>>>>>>>>> fatal:Could not obtain coordinate indexes, unable to perform
>>>>>>>>> subscript
>>>>>>>>> fatal:["Execute.c":8640]:Execute: Error occurred at or near line
>>>>>>>>> 82 in file spi_2.ncl
>>>>>>>>>
>>>>>>>>> Please kindly inform me how to correct it.
>>>>>>>>>
>>>>>>>>> Thanking you,
>>>>>>>>> Soma
>>>>>>>>>
>>>>>>>>>
>>>>>>>>> On Thu, Nov 29, 2018 at 9:51 AM Soma Roy <somaroy892 at gmail.com>
>>>>>>>>> wrote:
>>>>>>>>>
>>>>>>>>>> Thank you very much.
>>>>>>>>>>
>>>>>>>>>> Soma
>>>>>>>>>>
>>>>>>>>>> On Thu, Nov 29, 2018, 02:28 Mary Haley <haley at ucar.edu wrote:
>>>>>>>>>>
>>>>>>>>>>> Soma,
>>>>>>>>>>>
>>>>>>>>>>> The spi_2.ncl script shows you how to calculate the yyyymm
>>>>>>>>>>> variable:
>>>>>>>>>>>
>>>>>>>>>>>   year    = yyyymm/100
>>>>>>>>>>>   yrStrt  = year(0)
>>>>>>>>>>>   yrLast  = year(ntim-1)
>>>>>>>>>>>   nyear   = yrLast-yrStrt+1
>>>>>>>>>>>   yyyymm  = yyyymm_time(yrStrt, yrLast, "integer")
>>>>>>>>>>>
>>>>>>>>>>> You don't need the "date" or "yyyymm" arrays, because you
>>>>>>>>>>> already have the year information. Use ispan to generate the "year" array
>>>>>>>>>>> and now you can get your yyyymm and yrfac values as needed:
>>>>>>>>>>>
>>>>>>>>>>>   year    = ispan(1970,2010,1)
>>>>>>>>>>>   ntim    = dimsizes(year)
>>>>>>>>>>>   yrStrt  = year(0)
>>>>>>>>>>>   yrLast  = year(ntim-1)
>>>>>>>>>>>   nyear   = yrLast-yrStrt+1
>>>>>>>>>>>   yyyymm  = yyyymm_time(yrStrt, yrLast, "integer")
>>>>>>>>>>>   yrfrac  = (/ yyyymm_to_yyyyfrac(yyyymm, 0.0) /)
>>>>>>>>>>>
>>>>>>>>>>> --Mary
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> On Wed, Nov 28, 2018 at 1:05 PM Soma Roy <somaroy892 at gmail.com>
>>>>>>>>>>> wrote:
>>>>>>>>>>>
>>>>>>>>>>>> Thank you very much for the hint.
>>>>>>>>>>>> I will check it.
>>>>>>>>>>>>
>>>>>>>>>>>> But mannualy we can't set the "date" range in the script
>>>>>>>>>>>> without using CDO?
>>>>>>>>>>>>
>>>>>>>>>>>> Please kindly inform me.
>>>>>>>>>>>>
>>>>>>>>>>>> Thanking you,
>>>>>>>>>>>> Soma
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> On Thu, Nov 29, 2018, 01:28 Guilherme Martins <
>>>>>>>>>>>> jgmsantos at gmail.com wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>> I don't know if you use climate data operators or cdo software.
>>>>>>>>>>>>>
>>>>>>>>>>>>> You can set the data in your file.
>>>>>>>>>>>>>
>>>>>>>>>>>>> Exemple
>>>>>>>>>>>>>
>>>>>>>>>>>>> cdo settaxis,1970-01-01,00:00:00,1mon input.nc output.nc
>>>>>>>>>>>>>
>>>>>>>>>>>>> Guilherme.
>>>>>>>>>>>>>
>>>>>>>>>>>>>
>>>>>>>>>>>>> Em qua, 28 de nov de 2018 16:35, Soma Roy <
>>>>>>>>>>>>> somaroy892 at gmail.com escreveu:
>>>>>>>>>>>>>
>>>>>>>>>>>>>> Hello,
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> I am trying to calculate standadize precipitation index using
>>>>>>>>>>>>>> monthly gridded dataset.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Dimension of data is like below;
>>>>>>>>>>>>>> Rainfall(12x41) (months x years).
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> I am using the script from the below link;
>>>>>>>>>>>>>> https://www.ncl.ucar.edu/Applications/Scripts/spi_2.ncl
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> But in my dataset there is no variable as "date".
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Can we manually set the date range inside the script?
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> I am using rainfall dataset for 1970-2010.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Please kindly inform me how we can modify it over the same
>>>>>>>>>>>>>> script.
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Thanking you,
>>>>>>>>>>>>>> Soma
>>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>>>> ncl-talk mailing list
>>>>>>>>>>>>>> ncl-talk at ucar.edu
>>>>>>>>>>>>>> List instructions, subscriber options, unsubscribe:
>>>>>>>>>>>>>> http://mailman.ucar.edu/mailman/listinfo/ncl-talk
>>>>>>>>>>>>>>
>>>>>>>>>>>>> _______________________________________________
>>>>>>>>>>>> ncl-talk mailing list
>>>>>>>>>>>> ncl-talk at ucar.edu
>>>>>>>>>>>> List instructions, subscriber options, unsubscribe:
>>>>>>>>>>>> http://mailman.ucar.edu/mailman/listinfo/ncl-talk
>>>>>>>>>>>>
>>>>>>>>>>> _______________________________________________
>>>>>>>> ncl-talk mailing list
>>>>>>>> ncl-talk at ucar.edu
>>>>>>>> List instructions, subscriber options, unsubscribe:
>>>>>>>> http://mailman.ucar.edu/mailman/listinfo/ncl-talk
>>>>>>>>
>>>>>>> _______________________________________________
>>>>>> ncl-talk mailing list
>>>>>> ncl-talk at ucar.edu
>>>>>> List instructions, subscriber options, unsubscribe:
>>>>>> http://mailman.ucar.edu/mailman/listinfo/ncl-talk
>>>>>>
>>>>> _______________________________________________
>>>> 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/20181130/73940477/attachment.html>


More information about the ncl-talk mailing list