[ncl-talk] Loop Over Latitude and Level Arrays

Barry Lynn barry.h.lynn at gmail.com
Tue Dec 31 00:10:02 MST 2019


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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.ucar.edu/pipermail/ncl-talk/attachments/20191231/88755818/attachment.html>


More information about the ncl-talk mailing list