[ncl-talk] Subscript out of range, error in subscript #0
Rick Brownrigg
brownrig at ucar.edu
Thu Dec 5 20:47:04 MST 2019
Hi,
The meaning of the error message is rather descriptive -- it means there
was an attempt to index in an array that's first dimension (0-th) was, say
N, using and index outside the range of 0..N-1. Note that NCL uses
zero-based indexing.
I could not align line #102 with anything meaningful in the copy/pasted
script of the email, but fortunately that script seems to have ample print
statements embedded throughout it. Based upon what got printed -- and what
didn't -- I suspect the line where the error occurred was:
data = tofloat(
fin->$varName$(time({tmin:tmax}),{zmin:zmax},{ymin:ymax},:) )
It's impossible for me to know what "time({tmin:tmax})" evaluates to, but
that might be the problem. Perhaps try putting in a print statement just
before this line to print what "time({tmin:tmax})" yields -- are those
value outside the dimensions of the variable "varName" (which seems to be
the variable "u" from the file")?
Rick
On Thu, Dec 5, 2019 at 8:16 PM ANDIKA FAUZIAH HAPSARI, A.P via ncl-talk <
ncl-talk at ucar.edu> wrote:
> Hi NCL expert
> I try to filter Kelvin waves in U and V wind data from ECMWF. But I got
> this error..
>
> fatal:["NclFile.c":2120]:Subscript out of range, error in subscript #0
> fatal:["Execute.c":8637]:Execute: Error occurred at or near line 102 in
> file filter_waves4_uwnd.ncl
>
> Does anyone know what the error means and what should I do? Thanks in
> advance..
>
> Here is Carl Shreck's script that I have modified
>
>
> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
> ; filter_waves.ncl
> ; Carl Schreck (carl at cicsnc.org)
> ; February 2011
> ; Updated for style October 2011
>
> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
> ; Description: Filter data for each equatorial wave type
>
> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
> 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"
> ;load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/shea_util.ncl"
> ;load "$NCARG_ROOT/lib/ncarg/nclscripts/wrf/WRFUserARW.ncl"
> ;load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/diagnostics_cam.ncl"
> load "$NCARG_ROOT/lib/ncarg/nclscripts/contrib/time_axis_labels.ncl"
> load "$NCARG_ROOT/lib/ncarg/nclscripts/contrib/kf_filter.ncl"
> load "$NCARG_ROOT/lib/ncarg/nclscripts/contrib/cd_string.ncl"
> load "$NCARG_ROOT/lib/ncarg/nclscripts/print_clock.ncl"
> ;load "$CJS_NCL_LIB/print_clock.ncl"
>
> begin
>
> print_clock( "Here we go! " )
> ; These are some parameters that could be useful to have up top
> mis = -999
> mis at _FillValue = -999
> ; xmin = 70
> ; xmax = 170
> ymin = -15
> ymax = 15
> zmin = 1000
> zmax = 10
> units = "hours since 1900-01-01 00:00:00.0"
> tmin = cd_inv_calendar( 2018, 12, 01, 00, 0, 0, units, 0 )
> tmax = cd_inv_calendar( 2018, 12, 31, 00, 0, 0, units, 0 )
>
> if( .not.isvar("filtName") ) then
> filtName = "k09"
> end if
> obsPerDay = 4
> if( .not.isvar("varName") ) then
> varName = "u"
> end if
> print( varName )
> basePath = "/home/sarihmmm/datareanly/reanalysis/ecmwf/"
> ; basePath = "~/data/nasa_ymc/fcst_verif/"
> ; basePath = "~/data/olr/current/"
> ; pathIn = basePath + ".std.nc"
> ; pathOut = basePath + ".waves.std.nc"
> pathIn = basePath + "UVwind_dec2018.nc"
> pathOut = basePath + "anginU_dec2018.kelvin.nc"
> ; pathOut = basePath + "trmm3b42." + filtName + ".nc"
> ; pathIn = basePath + varName + ".anom.nc"
> ; pathOut = basePath + varName + "." + filtName + ".nc"
> ; pathIn = basePath + "anom/" + varName + ".anom.nc"
> ; pathOut = basePath + "waves/" + varName + ".anom.waves.nc"
> calcHigh = False
> calcLow = False
> calcMrg = False
> calcMjo = False
> calcKelvin = True
> calcEr = False
> calcMtd = False
> calcTd = False
> calcWig = False
> makeNewFile = True
> ; Open the input files
> fin = addfile( pathIn, "r" )
> longitude = fin->longitude
> latitude = fin->latitude({ymin:ymax})
> ; level = fin->level
> level = fin->level({zmin:zmax})
> time = fin->time({tmin:tmax})
> latitude at actual_range = (/ min(latitude), max(latitude) /)
> ; Open the output files
> setfileoption("nc","Format","LargeFile")
> ; setfileoption("nc","Format","NetCDF4")
> ; setfileoption("nc","CompressionLevel",1)
> if( makeNewFile ) then
> system( "rm " + pathOut )
> fout = addfile( pathOut, "c" )
> fout->time = time
> fout->latitude = latitude
> fout->longitude = longitude
> else
> fout = addfile( pathOut, "w" )
> end if
> print_clock( "Reading the input data... " )
>
> data = tofloat(
> fin->$varName$(time({tmin:tmax}),{zmin:zmax},{ymin:ymax},:) )
> data&time at beginning_date = cd_string( data&time(0), "" )
> data&time at ending_date = cd_string( data&time(dimsizes(data&time)-1),
> "" )
> if( any( ismissing(data) ) ) then
> print_clock( "WARNING: Setting missing data to zero" )
> data = where( ismissing(data), 0, data )
> end if
> printVarSummary(data)
> fout->unfilt = data
>
> if( calcHigh ) then
> print_clock( "Filtering High..." )
> high = data
> high at long_name = "High frequency"
> high at filter = "Highpass time filter"
> high at wavenumber = (/ -9999, 9999 /)
> high at period = (/ 0.01, 120 /)
> high at depth = (/ mis, mis /)
> do y = 0, ( dimsizes(lat) - 1 )
> ; print_clock( y + " " + ( dimsizes(lat) - 1 ) + " " )
> high(time|:,{lat|lat(y)},lon|:) = (/ kf_filter( \\
> data(time|:,{lat|lat(y)},lon|:), obsPerDay, \\
> high at period(0), high at period(1), \\
> high at wavenumber(0), high at wavenumber(1), \\
> high at depth(0), high at depth(1), \\
> "none" ) /)
> end do
> print_clock( "Writing high... " )
> fout->high = high
> delete(high)
> end if
>
> if( calcLow ) then
> print_clock( "Filtering Low..." )
> low = data
> low at long_name = "Low frequency"
> low at filter = "Lowpass time filter"
> if( filtName.eq."wk99" ) then
> low at wavenumber = (/ -99, 99 /)
> low at period = (/ 120, 9999 /)
> low at depth = (/ mis, mis /)
> else
> low at wavenumber = (/ -10, 10 /)
> low at period = (/ 120, 9999 /)
> low at depth = (/ mis, mis /)
> end if
> do y = 0, ( dimsizes(lat) - 1 )
> ; print_clock( y + " " + ( dimsizes(lat) - 1 ) + " " )
> low(time|:,{lat|lat(y)},lon|:) = (/ kf_filter( \\
> data(time|:,{lat|lat(y)},lon|:), obsPerDay, \\
> low at period(0), low at period(1), \\
> low at wavenumber(0), low at wavenumber(1), \\
> low at depth(0), low at depth(1), \\
> "none" ) /)
> end do
> print_clock( "Writing Low... " )
> fout->low = low
> ; delete(low)
> end if
>
> if( calcMrg ) then
> print_clock( "Filtering MRG..." )
> mrg = data
> mrg at long_name = "Mixed Rossby-Gravity Waves in " +
> str_upper(varName)
> mrg at filter = "Wheeler & Kiladis (1999)"
> mrg at wavenumber = (/ -10, -1 /)
> mrg at period = (/ 3, 96 /)
> mrg at depth = (/ 8, 90 /)
> do y = 0, ( dimsizes(lat) - 1 )
> ; print_clock( y + " " + ( dimsizes(lat) - 1 ) + " " )
> mrg(time|:,{lat|lat(y)},lon|:) = (/ kf_filter( \\
> data(time|:,{lat|lat(y)},lon|:), obsPerDay, \\
> mrg at period(0), mrg at period(1), \\
> mrg at wavenumber(0), mrg at wavenumber(1), \\
> mrg at depth(0), mrg at depth(1), \\
> "mrg" ) /)
> end do
> print_clock( "Writing MRG... " )
> fout->mrg = mrg
> delete(mrg)
> end if
>
> if( calcMjo ) then
> print_clock( "Filtering MJO..." )
> mjo = data
> mjo at long_name = "Madden-Julian Oscillation in " +
> str_upper(varName)
> if( filtName.eq."wk99" ) then
> mjo at filter = "Wheeler & Kiladis (1999)"
> mjo at wavenumber = (/ 1, 5 /)
> mjo at period = (/ 30, 96 /)
> mjo at depth = (/ mis, mis /)
> else
> mjo at filter = "Kiladis et al. (2005 JAS) for 20-100"
> mjo at wavenumber = (/ 0, 9 /)
> mjo at period = (/ 20, 100 /)
> mjo at depth = (/ mis, mis /)
> end if
> do y = 0, ( dimsizes(lat) - 1 )
> ; print_clock( y + " " + ( dimsizes(lat) - 1 ) + " " )
> mjo(time|:,{lat|lat(y)},lon|:) = (/ kf_filter( \\
> data(time|:,{lat|lat(y)},lon|:), obsPerDay, \\
> mjo at period(0), mjo at period(1), \\
> mjo at wavenumber(0), mjo at wavenumber(1), \\
> mjo at depth(0), mjo at depth(1), \\
> "none" ) /)
> end do
> print_clock( "Writing MJO... " )
> fout->mjo = mjo
> sumOfModes = data
> sumOfModes = low + mjo
> sumOfModes at long_name = "Low+MJO"
> fout->low_mjo = sumOfModes
> ; delete(mjo)
> end if
>
> if( calcEr ) then
> print_clock( "Filtering ER..." )
> er = data
> er at long_name = "Equatorial Rossby Waves in " + str_upper(varName)
> if( filtName.eq."wk99" ) then
> er at filter = "Wheeler & Kiladis (1999)"
> er at wavenumber = (/ -10, -1 /)
> er at period = (/ 9.7, 48 /)
> er at depth = (/ 8, 90 /)
> else
> er at filter = "Kiladis et al. (2009 Rev. Geophys.)"
> er at wavenumber = (/ -10, -1 /)
> er at period = (/ 9.7, 72 /)
> if( filtName.eq."k09" ) then
> er at depth = (/ mis, 90 /)
> else ; wide
> er at depth = (/ mis, mis /)
> end if
> end if
> do y = 0, ( dimsizes(lat) - 1 )
> ; print_clock( y + " " + ( dimsizes(lat) - 1 ) + " " )
> er(time|:,{lat|lat(y)},lon|:) = (/ kf_filter( \\
> data(time|:,{lat|lat(y)},lon|:), obsPerDay, \\
> er at period(0), er at period(1), \\
> er at wavenumber(0), er at wavenumber(1), \\
> er at depth(0), er at depth(1), \\
> "er" ) /)
> end do
> print_clock( "Writing ER... " )
> fout->er = er
> sumOfModes = sumOfModes + er
> sumOfModes at long_name = "Low+MJO+ER"
> fout->low_mjo_er = sumOfModes
> ; delete(er)
> end if
> if( calcKelvin ) then
> print_clock( "Filtering KELVIN..." )
> kelvin = data
> kelvin at long_name = "Kelvin Waves in " + str_upper(varName)
> if( filtName.eq."wk99" ) then
> kelvin at filter = "Wheeler & Kiladis (1999)"
> kelvin at wavenumber = (/ 1, 14 /)
> kelvin at period = (/ 2.5, 30 /)
> kelvin at depth = (/ 8, 90 /)
> else if( filtName.eq."k09" ) then
> kelvin at filter = "Straub & Kiladis (2002) to 20 days"
> kelvin at wavenumber = (/ 1, 14 /)
> kelvin at period = (/ 2.5, 20 /)
> kelvin at depth = (/ 8, 90 /)
> else if( filtName.eq."wide" ) then
> kelvin at filter = "Broader square filter"
> kelvin at wavenumber = (/ 1, 14 /)
> kelvin at period = (/ 2.5, 20 /)
> kelvin at depth = (/ mis, mis /)
> end if
> end if
> end if
>
> do y = 0, ( dimsizes(latitude) - 1 )
> ; print_clock( y + " " + ( dimsizes(latitude) - 1 ) + " " )
> kelvin(time|:,{latitude|latitude(y)},longitude|:) = (/ kf_filter( \\
> data(time|:,{latitude|latitude(y)},longitude|:), obsPerDay, \\
> kelvin at period(0), kelvin at period(1), \\
> kelvin at wavenumber(0), kelvin at wavenumber(1), \\
> kelvin at depth(0), kelvin at depth(1), \\
> "kelvin" ) /)
> end do
> print_clock( "Writing KELVIN... " )
> fout->kelvin = kelvin
> ; sumOfModes = sumOfModes + kelvin
> ; sumOfModes at long_name = "Low+MJO+ER+Kelvin"
> ; fout->low_mjo_er_kelvin = sumOfModes
> ; delete(kelvin)
> end if
>
> if( calcMtd ) then
> print_clock( "Filtering MRG/TD..." )
> td = data
> td at long_name = "MRG/TD in " + str_upper(varName)
> td at filter = "Frank and Roundy (2006), extended to wavenumber
> -20"
> td at wavenumber = (/ -20, -0 /)
> td at period = (/ 2.5, 10 /)
> td at depth = (/ mis, mis /)
> do y = 0, ( dimsizes(lat) - 1 )
> ; print_clock( y + " " + ( dimsizes(lat) - 1 ) + " " )
> td(time|:,{lat|lat(y)},lon|:) = (/ kf_filter( \\
> data(time|:,{lat|lat(y)},lon|:), obsPerDay, \\
> td at period(0), td at period(1), \\
> td at wavenumber(0), td at wavenumber(1), \\
> td at depth(0), td at depth(1), \\
> "none" ) /)
> end do
> print_clock( "Writing TD... " )
> fout->td = td
> delete(td)
> end if
>
> if( calcTd ) then
> print_clock( "Filtering TD..." )
> td = data
> td at long_name = "TD-type Disturbances in " + str_upper(varName)
> td at filter = "Roundy and Frank (2004), extended to wavenumber
> -20"
> td at wavenumber = (/ -20, -6 /)
> td at period = (/ 2.5, 5 /)
> td at depth = (/ 90, mis /)
> do y = 0, ( dimsizes(lat) - 1 )
> ; print_clock( y + " " + ( dimsizes(lat) - 1 ) + " " )
> td(time|:,{lat|lat(y)},lon|:) = (/ kf_filter( \\
> data(time|:,{lat|lat(y)},lon|:), obsPerDay, \\
> td at period(0), td at period(1), \\
> td at wavenumber(0), td at wavenumber(1), \\
> td at depth(0), td at depth(1), \\
> "none" ) /)
> end do
> print_clock( "Writing TD... " )
> fout->td = td
> delete(td)
> end if
> if( calcWig ) then
> print_clock( "Filtering WIG..." )
> wig = data
> wig at long_name = "Westward Inertial-Gravity Waves in " +
> str_upper(varName)
> wig at filter = "Wheeler & Kiladis (1999), n=1"
> wig at wavenumber = (/ -15, -1 /)
> wig at period = (/ 1.25, 3 /)
> wig at depth = (/ 12, 90 /)
> do y = 0, ( dimsizes(lat) - 1 )
> ; print_clock( y + " " + ( dimsizes(lat) - 1 ) + " " )
> wig(time|:,{lat|lat(y)},lon|:) = (/ kf_filter( \\
> data(time|:,{lat|lat(y)},lon|:), obsPerDay, \\
> wig at period(0), wig at period(1), \\
> wig at wavenumber(0), wig at wavenumber(1), \\
> wig at depth(0), wig at depth(1), \\
> "ig1" ) /)
> end do
> print_clock( "Writing WIG... " )
> fout->wig = wig
> delete(wig)
> end if
>
>
> print_clock( "Closing file..." )
> delete(fout)
> print_clock( "Thank you, come again. " )
> end ; filter_waves
> _______________________________________________
> 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/20191205/092694f4/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: Screenshot from 2019-12-06 10-08-46.png
Type: image/png
Size: 79674 bytes
Desc: not available
URL: <http://mailman.ucar.edu/pipermail/ncl-talk/attachments/20191205/092694f4/attachment.png>
More information about the ncl-talk
mailing list