[ncl-talk] Loop Over Latitude and Level Arrays
Barry Lynn
barry.h.lynn at gmail.com
Tue Dec 31 05:56:28 MST 2019
Hi:
You need to define your array as follows:
Two_D_Array = Four_D_Array(i_lat,:,i_level,:) ; i_lat is the latitude
array index and i_level is the level index
On Tue, Dec 31, 2019 at 1:27 PM ANDIKA FAUZIAH HAPSARI, A.P <
andika.hapsari at bmkg.go.id> wrote:
> *Oh I'm so sorry, I clicked the reply button instead of repy all. Thank
> you for remind me.*
>
> I think it's becasue kf_filter.ncl script only works on two dimension, but
> when I tried to modify kf_filter, it couldn't work (but i think i did it
> wrong too)
>
> I have tried 3d array, and the error message I got was
> fatal:Number of subscripts do not match number of dimensions of
> variable,(3) Subscripts used, (4) Subscripts expected
> fatal:["Execute.c":8637]:Execute: Error occurred at or near line 229 in
> file filter_vertical_waves_wrf2.ncl
>
> So I don't understand which part I got it wrong.
>
>
> From: "Barry Lynn (barry.h.lynn at gmail.com)" <barry.h.lynn at gmail.com>
> To: "ANDIKA FAUZIAH HAPSARI, A.P" <andika.hapsari at bmkg.go.id>, ncl-talk <
> ncl-talk at ucar.edu>
> Date: Tue, 31 Dec 2019 09:10:02 +0200
> Subject: Re: [ncl-talk] Loop Over Latitude and Level Arrays
>
> Hi:
>
> Please also respond to the list. Someone on the list might be able to
> help you faster than I can. Also, members of the list can learn useful
> information from this exchange.
>
> It would be helpful if you would verify where the script fails, whether it
> is the one you are using or a called routine.
>
> Lastly, the script is telling you that your variable is missing
> information about what it is. You need to name it, as shown in the NCL
> help pages.
>
> But, before you do that, try reading your 4d array into a 2d array and see
> if you get the same error using the 2d array.
>
> Barry
>
> On Tue, Dec 31, 2019 at 8:59 AM ANDIKA FAUZIAH HAPSARI, A.P <
> andika.hapsari at bmkg.go.id> wrote:
>
>>
>> Thanks for your answer. But I'm not sure if I can pass the 4D variable
>> directly. Because when I used this script below, I got this error message :
>>
>> warning:Argument 0 of the current function or procedure was coerced to
>> the appropriate type and thus will not change if the function or procedure
>> modifies its value
>> fatal:["NclAtt.c":262]:Attribute assignment type mismatch.
>> fatal:(lon) is not a named dimension in variable (inData).
>> fatal:["Execute.c":8637]:Execute: Error occurred at or near line 36 in
>> file $NCARG_ROOT/lib/ncarg/nclscripts/contrib/kf_filter.ncl
>> fatal:["Execute.c":8637]:Execute: Error occurred at or near line 234 in
>> file filter_vertical_waves_wrf.ncl
>>
>>
>> Or maybe, is there something wrong with my script?
>> Thanks in advance
>>
>>
>> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
>> ; 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 "~/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
>> obsPerDay = 4
>> if( .not.isvar("varIn") ) then
>> varIn = "u"
>> end if
>> if( .not.isvar("latitudeBand") ) then
>> latitudeBand = "15N-15N"
>> end if
>> print( varIn + "." + latitudeBand )
>> basePath = "/home/sarihmmm/datareanly/reanalysis/"
>> pathIn = basePath + "anginU.nc"
>> pathOut = basePath + "anginU" + varIn + "." + latitudeBand + ".
>> vertkelvin.nc"
>> wk99 = False ; True uses the original Wheeler-Kiladis filters,
>> ; False uses slight modifications from recent papers
>> calcHigh = False
>> calcLow = False
>> calcMrg = False
>> calcMjo = False
>> calcKelvin = True
>> calcEr = False
>> calcMtd = False
>> calcTd = False
>> makeNewFile = True
>> ; Open the input files
>> fin = addfile( pathIn, "r" )
>> time = fin->time
>> level = fin->level
>> longitude = fin->longitude
>> latitude = fin->latitude
>> ; Open the output files
>> setfileoption( "nc", "Format", "LargeFile" )
>> if( makeNewFile ) then
>> system( "rm " + pathOut )
>> fout = addfile( pathOut, "c" )
>> fout->time = time
>> fout->level = level
>> fout->longitude = longitude
>> fout->latitude = latitude
>> else
>> fout = addfile( pathOut, "w" )
>> end if
>> print_clock( "Reading the input data... " )
>> data = fin->$varIn$
>> 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)
>> if( calcHigh ) then
>> print_clock( "Filtering High..." )
>> high = data
>> high at longitudeg_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 z = 0, ( dimsizes(level) - 1 )
>> ; print_clock( z + " " + ( dimsizes(level) - 1 ) + " " )
>> high(time|:,{level|level(z)},longitude|:) = (/ kf_filter( \\
>> data(time|:,{level|level(z)},longitude|:), 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 longitudeg_name = "Low frequency"
>> low at filter = "Lowpass time filter"
>> low at wavenumber = (/ -9999, 9999 /)
>> low at period = (/ 120, 9999 /)
>> low at depth = (/ mis, mis /)
>> do z = 0, ( dimsizes(level) - 1 )
>> ; print_clock( z + " " + ( dimsizes(level) - 1 ) + " " )
>> low(time|:,{level|level(z)},longitude|:,latitude|:) = (/
>> kf_filter( \\
>> data(time|:,{level|level(z)},longitude|:,latitude|:),
>> 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 longitudeg_name = "Mixed Rossby-Gravity Waves in " +
>> str_upper(varIn)
>> mrg at filter = "Wheeler & Kiladis (1999)"
>> mrg at wavenumber = (/ -10, -1 /)
>> mrg at period = (/ 3, 96 /)
>> mrg at depth = (/ 8, 90 /)
>> do z = 0, ( dimsizes(level) - 1 )
>> ; print_clock( z + " " + ( dimsizes(level) - 1 ) + " " )
>> mrg(time|:,{level|level(z)},longitude|:) = (/ kf_filter( \\
>> data(time|:,{level|level(z)},longitude|:), 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 longitudeg_name = "Madden-Julian Oscillatitudeion in " +
>> str_upper(varIn)
>> if( wk99 ) then
>> mjo at filter = "Wheeler & Kiladis (1999)"
>> mjo at wavenumber = (/ 1, 5 /)
>> ; mjo at wavenumber = (/ 0, 9 /)
>> mjo at period = (/ 30, 96 /)
>> mjo at depth = (/ mis, mis /)
>> else
>> mjo at filter = "Kiladis et al. (2005 JAS)"
>> mjo at wavenumber = (/ 0, 9 /)
>> mjo at period = (/ 20, 100 /)
>> mjo at depth = (/ mis, mis /)
>> end if
>> do z = 0, ( dimsizes(level) - 1 )
>> ; print_clock( z + " " + ( dimsizes(level) - 1 ) + " " )
>> mjo(time|:,{level|level(z)},longitude|:) = (/ kf_filter( \\
>> data(time|:,{level|level(z)},longitude|:), 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
>> delete(mjo)
>> end if
>>
>> if( calcKelvin ) then
>> print_clock( "Filtering KELVIN..." )
>> kelvin = data
>> kelvin at longitudeg_name = "Kelvin Waves in " + str_upper(varIn)
>> if( 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
>> kelvin at filter = "Straub & Kiladis (2002)"
>> kelvin at wavenumber = (/ 1, 14 /)
>> kelvin at period = (/ 2.5, 17 /)
>> kelvin at depth = (/ 5, 90 /)
>> end if
>> do z = 0, ( dimsizes(level) - 1 )
>> do y = 0, ( dimsizes(level) - 1 )
>> ; print_clock( z + " " + ( dimsizes(level) - 1 ) + " " )
>> kelvin(time|:,{level|level(z)},{latitude|latitude(y)},longitude|:)
>> = (/ kf_filter( \\
>>
>> data(time|:,{level|level(z)},{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
>> end do
>> print_clock( "Writing KELVIN... " )
>> fout->kelvin = kelvin
>> delete(kelvin)
>> end if
>>
>> if( calcEr ) then
>> print_clock( "Filtering ER..." )
>> er = data
>> er at longitudeg_name = "Equatorial Rossby Waves in " +
>> str_upper(varIn)
>> if( 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, 48 /)
>> er at depth = (/ 5, 90 /)
>> end if
>> do z = 0, ( dimsizes(level) - 1 )
>> ; print_clock( z + " " + ( dimsizes(level) - 1 ) + " " )
>> er(time|:,{level|level(z)},longitude|:) = (/ kf_filter( \\
>> data(time|:,{level|level(z)},longitude|:), 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
>> delete(er)
>> end if
>> if( calcMtd ) then
>> print_clock( "Filtering MRG/TD..." )
>> td = data
>> td at longitudeg_name = "MRG/TD in " + str_upper(varIn)
>> 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 z = 0, ( dimsizes(level) - 1 )
>> ; print_clock( z + " " + ( dimsizes(level) - 1 ) + " " )
>> td(time|:,{level|level(z)},longitude|:) = (/ kf_filter( \\
>> data(time|:,{level|level(z)},longitude|:), 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 longitudeg_name = "TD-type Disturbances in " +
>> str_upper(varIn)
>> 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 z = 0, ( dimsizes(level) - 1 )
>> ; print_clock( z + " " + ( dimsizes(level) - 1 ) + " " )
>> td(time|:,{level|level(z)},longitude|:) = (/ kf_filter( \\
>> data(time|:,{level|level(z)},longitude|:), 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
>>
>> print_clock( "Closing file..." )
>> delete(fout)
>> print_clock( "Thank you, come again. " )
>> end ; filter_waves
>>
>>
>> From: "Barry Lynn (barry.h.lynn at gmail.com)" <barry.h.lynn at gmail.com>
>> To: "ANDIKA FAUZIAH HAPSARI, A.P" <andika.hapsari at bmkg.go.id>
>> Cc: "ncl-talk at ucar.edu" <ncl-talk at ucar.edu>
>> Date: Tue, 31 Dec 2019 07:48:15 +0200
>> Subject: Re: [ncl-talk] Loop Over Latitude and Level Arrays
>>
>> Hi:
>>
>> When you pass the variable to the kf_filter, you can loop over both over
>> latitude and level, as you pass the 4D variable directly into the routine.
>>
>> I am not sure if there is a faster way,
>>
>> Barry
>>
>> On Mon, Dec 30, 2019 at 8:17 PM ANDIKA FAUZIAH HAPSARI, A.P via ncl-talk <
>> ncl-talk at ucar.edu> wrote:
>>
>>> Hello..
>>>
>>> I have 4 Dimension data (latitude, longitude, level, time) and I want to
>>> filter kelvin waves vertically which use kf_filter function that only has
>>> time and longitude. And I need to loop over both latitude and level so that
>>> the array can pass kf_filter.
>>>
>>> Is there any instruction and script to do loop over latitude and level
>>> arrays?
>>>
>>> Thanks in advance.
>>> _______________________________________________
>>> ncl-talk mailing list
>>> ncl-talk at ucar.edu
>>> List instructions, subscriber options, unsubscribe:
>>> http://mailman.ucar.edu/mailman/listinfo/ncl-talk
>>
>>
>>
>> --
>> Barry H. Lynn, Ph.D
>> Senior Associate Scientist, Lecturer,
>> The Institute of the Earth Science,
>> The Hebrew University of Jerusalem,
>> Givat Ram, Jerusalem 91904, Israel
>> Tel: 972 547 231 170
>> Fax: (972)-25662581
>>
>> C.E.O, Weather It Is, LTD
>> Weather and Climate Focus
>> http://weather-it-is.com
>> Jerusalem, Israel
>> Local: 02 930 9525
>> Cell: 054 7 231 170
>> Int-IS: x972 2 930 9525
>>
>>
>>
>
> --
> Barry H. Lynn, Ph.D
> Senior Associate Scientist, Lecturer,
> The Institute of the Earth Science,
> The Hebrew University of Jerusalem,
> Givat Ram, Jerusalem 91904, Israel
> Tel: 972 547 231 170
> Fax: (972)-25662581
>
> C.E.O, Weather It Is, LTD
> Weather and Climate Focus
> http://weather-it-is.com
> Jerusalem, Israel
> Local: 02 930 9525
> Cell: 054 7 231 170
> Int-IS: x972 2 930 9525
>
>
>
--
Barry H. Lynn, Ph.D
Senior Associate Scientist, Lecturer,
The Institute of the Earth Science,
The Hebrew University of Jerusalem,
Givat Ram, Jerusalem 91904, Israel
Tel: 972 547 231 170
Fax: (972)-25662581
C.E.O, Weather It Is, LTD
Weather and Climate Focus
http://weather-it-is.com
Jerusalem, Israel
Local: 02 930 9525
Cell: 054 7 231 170
Int-IS: x972 2 930 9525
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.ucar.edu/pipermail/ncl-talk/attachments/20191231/fa9141a6/attachment.html>
More information about the ncl-talk
mailing list