<div dir="ltr"><div>Regardless of language used, the golden rule of data processing is "Know your data."</div><div>---</div><div>Your variable is type short. The file creator did this to reduce the file size in half.<br></div><div><br></div><div>      <b>short</b> data(time, lat, lon) ;;<br>              olr:<b>add_offset </b>= 327.65f ;<br>         olr:<b>scale_factor</b> = 0.01f ;</div><div>----</div><div>The variable must be unpacked to float . NCL has the <b>short2flt </b>function. This can be used as follows:</div><div><br></div><div>data = <a href="http://www.ncl.ucar.edu/Document/Functions/Contributed/short2flt.shtml"><b>short2flt</b></a>( fin->$varName$({tmin:tmax},{ymin:ymax},:) )<br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Mon, Nov 25, 2019 at 8:30 AM ANDIKA FAUZIAH HAPSARI, A.P via ncl-talk <<a href="mailto:ncl-talk@ucar.edu">ncl-talk@ucar.edu</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div>
<div style="font-family:tahoma;color:rgb(0,0,0);font-size:13.3333px;font-weight:400;font-style:normal">Hi everyone.</div>

<div style="font-family:tahoma;color:rgb(0,0,0);font-size:13.3333px;font-weight:400;font-style:normal">I'm a newbie on NCL.</div>

<div style="font-family:tahoma;color:rgb(0,0,0);font-size:13.3333px;font-weight:400;font-style:normal">I tried to filtering Kelvin wave using script from <a href="https://k3.cicsnc.org/carl/carl-ncl-tools/blob/master/filter/filter_waves.ncl" target="_blank">https://k3.cicsnc.org/carl/carl-ncl-tools/blob/master/filter/filter_waves.ncl</a> .. I didn't change anything except the directory, name of file, and time units. But I faced the "Assignment type mismatch, right hand side can't be coerced to type of left hand side" error in line 308. Does anyone know what the error means and what should I do? Thanks..</div>

<div style="font-family:tahoma;color:rgb(0,0,0);font-size:13.3333px;font-weight:400;font-style:normal"> </div>

<div style="font-family:tahoma;color:rgb(0,0,0);font-size:13.3333px;font-weight:400;font-style:normal"><img src="cid:16ea3909bc7cb971f161" width="655" height="368"></div>

<div style="font-family:tahoma;color:rgb(0,0,0);font-size:13.3333px;font-weight:400;font-style:normal"> </div>

<div style="font-family:tahoma;color:rgb(0,0,0);font-size:13.3333px;font-weight:400;font-style:normal">Here is the script</div>

<div style="font-family:tahoma;color:rgb(0,0,0);font-size:13.3333px;font-weight:400;font-style:normal">
<div>;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br>
; filter_waves.ncl<br>
; Carl Schreck (<a href="mailto:carl@cicsnc.org" target="_blank">carl@cicsnc.org</a>)<br>
; February 2011<br>
; Updated for style October 2011<br>
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;<br>
; Description: Filter data for each equatorial wave type<br>
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</div>

<div>load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"<br>
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"<br>
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"<br>
;load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/shea_util.ncl"<br>
;load "$NCARG_ROOT/lib/ncarg/nclscripts/wrf/WRFUserARW.ncl"<br>
;load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/diagnostics_cam.ncl"<br>
load "$NCARG_ROOT/lib/ncarg/nclscripts/contrib/time_axis_labels.ncl"<br>
load "$NCARG_ROOT/lib/ncarg/nclscripts/contrib/kf_filter.ncl"<br>
load "$NCARG_ROOT/lib/ncarg/nclscripts/contrib/cd_string.ncl"<br>
load "$NCARG_ROOT/lib/ncarg/nclscripts/print_clock.ncl"<br>
;load "$CJS_NCL_LIB/print_clock.ncl"</div>

<div><br>
begin<br>
   <br>
  print_clock( "Here we go! " )</div>

<div>; These are some parameters that could be useful to have up top<br>
  mis = -999<br>
  mis@_FillValue = -999</div>

<div>  ymin    =  -20<br>
  ymax    =   20<br>
  units = "hours since 1800-01-01 00:00:0.0"<br>
  tmin = cd_inv_calendar( 1998, 01, 01, 00, 0, 0, units, 0 )<br>
  tmax = cd_inv_calendar( 2014, 12, 31, 00, 0, 0, units, 0 )</div>

<div>  if( .not.isvar("filtName") ) then<br>
    filtName = "k09"<br>
  end if<br>
  obsPerDay = 1<br>
  if( .not.isvar("varName") ) then<br>
    varName = "olr"<br>
  end if<br>
  print( varName )</div>

<div>  basePath = "/home/sarihmmm/datareanly/"<br>
; basePath = "~/data/nasa_ymc/fcst_verif/"<br>
; basePath = "~/data/olr/current/"<br>
; pathIn = basePath + ".<a href="http://std.nc" target="_blank">std.nc</a>"<br>
; pathOut = basePath + ".<a href="http://waves.std.nc" target="_blank">waves.std.nc</a>"<br>
  pathIn  = basePath + "<a href="http://olr.day.mean.nc" target="_blank">olr.day.mean.nc</a>"<br>
  pathOut = basePath + "<a href="http://olr.day.kelvin.nc" target="_blank">olr.day.kelvin.nc</a>"<br>
; pathOut = basePath + "trmm3b42." + filtName + ".nc"<br>
; pathIn  = basePath + varName + ".<a href="http://anom.nc" target="_blank">anom.nc</a>"<br>
; pathOut = basePath + varName + "." + filtName + ".nc"<br>
; pathIn   = basePath + "anom/" + varName + ".<a href="http://anom.nc" target="_blank">anom.nc</a>"<br>
; pathOut  = basePath + "waves/" + varName + ".<a href="http://anom.waves.nc" target="_blank">anom.waves.nc</a>"</div>

<div>  calcHigh = False<br>
  calcLow = False<br>
  calcMrg = False<br>
  calcMjo = False<br>
  calcKelvin = True<br>
  calcEr = False<br>
  calcMtd = False<br>
  calcTd = False<br>
  calcWig = False<br>
  makeNewFile = True</div>

<div>; Open the input files<br>
  fin  = addfile( pathIn, "r" )<br>
  time = fin->time({tmin:tmax})<br>
  lat  = fin->lat({ymin:ymax})<br>
  lon  = fin->lon</div>

<div>  lat@actual_range = (/ min(lat), max(lat) /)</div>

<div>; Open the output files<br>
  setfileoption("nc","Format","LargeFile")<br>
; setfileoption("nc","Format","NetCDF4")<br>
; setfileoption("nc","CompressionLevel",1)<br>
  if( makeNewFile ) then<br>
    system( "rm " + pathOut )<br>
    fout  = addfile( pathOut, "c" )<br>
    fout->time = time<br>
    fout->lat  = lat<br>
    fout->lon  = lon<br>
  else<br>
    fout  = addfile( pathOut, "w" )<br>
  end if</div>

<div>  print_clock( "Reading the input data... " )</div>

<div>  data = fin->$varName$({tmin:tmax},{ymin:ymax},:)<br>
  data&time@beginning_date = cd_string( data&time(0), "" )<br>
  data&time@ending_date    = cd_string( data&time(dimsizes(data&time)-1), "" )</div>

<div>  if( any( ismissing(data) ) ) then<br>
    print_clock( "WARNING: Setting missing data to zero" )<br>
    data = where( ismissing(data), 0, data )<br>
  end if</div>

<div>  printVarSummary(data)<br>
  fout->unfilt = data</div>

<div><br>
  if( calcHigh ) then<br>
    print_clock( "Filtering High..." )</div>

<div>    high = data<br>
    high@long_name      = "High frequency"<br>
    high@filter         = "Highpass time filter"<br>
    high@wavenumber     = (/ -9999,  9999 /)<br>
    high@period         = (/ 0.01, 120 /)<br>
    high@depth          = (/ mis, mis /)</div>

<div>    do y = 0, ( dimsizes(lat) - 1 )<br>
  ;    print_clock( y + " " + ( dimsizes(lat) - 1 ) + " " )</div>

<div>      high(time|:,{lat|lat(y)},lon|:) = (/ kf_filter(  \\<br>
         data(time|:,{lat|lat(y)},lon|:), obsPerDay,  \\<br>
         high@period(0),     high@period(1),     \\<br>
         high@wavenumber(0), high@wavenumber(1), \\<br>
         high@depth(0),      high@depth(1),      \\<br>
         "none" ) /)</div>

<div>    end do</div>

<div>    print_clock( "Writing high... " )<br>
    fout->high = high<br>
    delete(high)<br>
  end if</div>

<div><br>
  if( calcLow ) then<br>
    print_clock( "Filtering Low..." )</div>

<div>    low = data<br>
    low@long_name      = "Low frequency"<br>
    low@filter         = "Lowpass time filter"<br>
    if( filtName.eq."wk99" ) then<br>
      low@wavenumber     = (/ -99,  99 /)<br>
      low@period         = (/ 120, 9999 /)<br>
      low@depth          = (/ mis, mis /)<br>
    else<br>
      low@wavenumber     = (/ -10,  10 /)<br>
      low@period         = (/ 120, 9999 /)<br>
      low@depth          = (/ mis, mis /)<br>
    end if</div>

<div>    do y = 0, ( dimsizes(lat) - 1 )<br>
  ;    print_clock( y + " " + ( dimsizes(lat) - 1 ) + " " )</div>

<div>      low(time|:,{lat|lat(y)},lon|:) = (/ kf_filter(  \\<br>
         data(time|:,{lat|lat(y)},lon|:), obsPerDay,  \\<br>
         low@period(0),     low@period(1),     \\<br>
         low@wavenumber(0), low@wavenumber(1), \\<br>
         low@depth(0),      low@depth(1),      \\<br>
         "none" ) /)</div>

<div>    end do</div>

<div>    print_clock( "Writing Low... " )<br>
    fout->low = low<br>
;   delete(low)<br>
  end if</div>

<div><br>
  if( calcMrg ) then<br>
    print_clock( "Filtering MRG..." )</div>

<div>    mrg = data<br>
    mrg@long_name     = "Mixed Rossby-Gravity Waves in " + str_upper(varName)<br>
    mrg@filter        = "Wheeler & Kiladis (1999)"<br>
    mrg@wavenumber    = (/  -10,  -1 /)<br>
    mrg@period        = (/    3,  96 /)<br>
    mrg@depth         = (/    8,  90 /)</div>

<div>    do y = 0, ( dimsizes(lat) - 1 )<br>
;    print_clock( y + " " + ( dimsizes(lat) - 1 ) + " " )</div>

<div>      mrg(time|:,{lat|lat(y)},lon|:) = (/ kf_filter(  \\<br>
         data(time|:,{lat|lat(y)},lon|:), obsPerDay,  \\<br>
         mrg@period(0),     mrg@period(1),     \\<br>
         mrg@wavenumber(0), mrg@wavenumber(1), \\<br>
         mrg@depth(0),      mrg@depth(1),      \\<br>
         "mrg" ) /)</div>

<div>    end do</div>

<div>    print_clock( "Writing MRG... " )<br>
    fout->mrg = mrg<br>
    delete(mrg)<br>
  end if</div>

<div><br>
  if( calcMjo ) then<br>
    print_clock( "Filtering MJO..." )</div>

<div>    mjo = data<br>
    mjo@long_name     = "Madden-Julian Oscillation in " + str_upper(varName)<br>
    if( filtName.eq."wk99" ) then<br>
      mjo@filter        = "Wheeler & Kiladis (1999)"<br>
      mjo@wavenumber    = (/   1,   5 /)<br>
      mjo@period        = (/  30,  96 /)<br>
      mjo@depth         = (/ mis, mis /)<br>
    else<br>
      mjo@filter        = "Kiladis et al. (2005 JAS) for 20-100"<br>
      mjo@wavenumber    = (/   0,   9 /)<br>
      mjo@period        = (/  20, 100 /)<br>
      mjo@depth         = (/ mis, mis /)<br>
    end if</div>

<div>    do y = 0, ( dimsizes(lat) - 1 )<br>
  ;    print_clock( y + " " + ( dimsizes(lat) - 1 ) + " " )</div>

<div>    mjo(time|:,{lat|lat(y)},lon|:) = (/ kf_filter(  \\<br>
       data(time|:,{lat|lat(y)},lon|:), obsPerDay,  \\<br>
       mjo@period(0),     mjo@period(1),     \\<br>
       mjo@wavenumber(0), mjo@wavenumber(1), \\<br>
       mjo@depth(0),      mjo@depth(1),      \\<br>
       "none" ) /)</div>

<div>    end do</div>

<div>    print_clock( "Writing MJO... " )<br>
    fout->mjo = mjo</div>

<div>    sumOfModes = data<br>
    sumOfModes = low + mjo<br>
    sumOfModes@long_name = "Low+MJO"<br>
    fout->low_mjo = sumOfModes<br>
;   delete(mjo)<br>
  end if</div>

<div><br>
  if( calcEr ) then<br>
    print_clock( "Filtering ER..." )</div>

<div>    er = data<br>
    er@long_name      = "Equatorial Rossby Waves in " + str_upper(varName)<br>
    if( filtName.eq."wk99" ) then<br>
      er@filter         = "Wheeler & Kiladis (1999)"<br>
      er@wavenumber     = (/ -10,  -1 /)<br>
      er@period         = (/ 9.7,  48 /)<br>
      er@depth          = (/   8,  90 /)<br>
    else<br>
      er@filter         = "Kiladis et al. (2009 Rev. Geophys.)"<br>
      er@wavenumber     = (/ -10,  -1 /)<br>
      er@period         = (/ 9.7,  72 /)<br>
      if( filtName.eq."k09" ) then<br>
        er@depth          = (/ mis,  90 /)<br>
      else ; wide<br>
        er@depth          = (/ mis, mis /)<br>
      end if<br>
    end if</div>

<div>    do y = 0, ( dimsizes(lat) - 1 )<br>
  ;    print_clock( y + " " + ( dimsizes(lat) - 1 ) + " " )</div>

<div>      er(time|:,{lat|lat(y)},lon|:) = (/ kf_filter(  \\<br>
         data(time|:,{lat|lat(y)},lon|:), obsPerDay,  \\<br>
         er@period(0),     er@period(1),     \\<br>
         er@wavenumber(0), er@wavenumber(1), \\<br>
         er@depth(0),      er@depth(1),      \\<br>
         "er" ) /)</div>

<div>    end do</div>

<div>    print_clock( "Writing ER... " )<br>
    fout->er = er</div>

<div>    sumOfModes = sumOfModes + er<br>
    sumOfModes@long_name = "Low+MJO+ER"<br>
    fout->low_mjo_er = sumOfModes<br>
;   delete(er)<br>
  end if</div>

<div>  if( calcKelvin ) then<br>
    print_clock( "Filtering KELVIN..." )</div>

<div>    kelvin = data<br>
    kelvin@long_name  = "Kelvin Waves in " + str_upper(varName)</div>

<div>    if( filtName.eq."wk99" ) then<br>
      kelvin@filter     = "Wheeler & Kiladis (1999)"<br>
      kelvin@wavenumber = (/   1,  14 /)<br>
      kelvin@period     = (/ 2.5,  30 /)<br>
      kelvin@depth      = (/   8,  90 /)<br>
    else if( filtName.eq."k09" ) then<br>
      kelvin@filter     = "Straub & Kiladis (2002) to 20 days"<br>
      kelvin@wavenumber = (/   1,  14 /)<br>
      kelvin@period     = (/ 2.5,  20 /)<br>
      kelvin@depth      = (/   8,  90 /)<br>
    else if( filtName.eq."wide" ) then<br>
      kelvin@filter     = "Broader square filter"<br>
      kelvin@wavenumber    = (/   1,  14 /)<br>
      kelvin@period        = (/ 2.5,  20 /)<br>
      kelvin@depth         = (/ mis, mis /)<br>
    end if<br>
    end if<br>
    end if</div>

<div><br>
    do y = 0, ( dimsizes(lat) - 1 )<br>
  ;    print_clock( y + " " + ( dimsizes(lat) - 1 ) + " " )</div>

<div>      kelvin(time|:,{lat|lat(y)},lon|:) = (/ kf_filter(  \\<br>
         data(time|:,{lat|lat(y)},lon|:), obsPerDay,  \\<br>
         kelvin@period(0),     kelvin@period(1),     \\<br>
         kelvin@wavenumber(0), kelvin@wavenumber(1), \\<br>
         kelvin@depth(0),      kelvin@depth(1),      \\<br>
         "kelvin" ) /)</div>

<div>    end do</div>

<div>    print_clock( "Writing KELVIN... " )<br>
    fout->kelvin = kelvin</div>

<div>;   sumOfModes = sumOfModes + kelvin<br>
;   sumOfModes@long_name = "Low+MJO+ER+Kelvin"<br>
;   fout->low_mjo_er_kelvin = sumOfModes<br>
;   delete(kelvin)<br>
  end if</div>

<div> </div>

<div>  if( calcMtd ) then<br>
    print_clock( "Filtering MRG/TD..." )</div>

<div>    td = data<br>
    td@long_name      = "MRG/TD in " + str_upper(varName)<br>
    td@filter         = "Frank and Roundy (2006), extended to wavenumber -20"<br>
    td@wavenumber     = (/ -20,  -0 /)<br>
    td@period         = (/ 2.5,  10 /)<br>
    td@depth          = (/  mis, mis /)</div>

<div>    do y = 0, ( dimsizes(lat) - 1 )<br>
  ;    print_clock( y + " " + ( dimsizes(lat) - 1 ) + " " )</div>

<div>      td(time|:,{lat|lat(y)},lon|:) = (/ kf_filter(  \\<br>
         data(time|:,{lat|lat(y)},lon|:), obsPerDay,  \\<br>
         td@period(0),     td@period(1),     \\<br>
         td@wavenumber(0), td@wavenumber(1), \\<br>
         td@depth(0),      td@depth(1),      \\<br>
         "none" ) /)</div>

<div>    end do</div>

<div>    print_clock( "Writing TD... " )<br>
    fout->td = td<br>
    delete(td)<br>
  end if</div>

<div><br>
  if( calcTd ) then<br>
    print_clock( "Filtering TD..." )</div>

<div>    td = data<br>
    td@long_name      = "TD-type Disturbances in " + str_upper(varName)<br>
    td@filter         = "Roundy and Frank (2004), extended to wavenumber -20"<br>
    td@wavenumber     = (/ -20,  -6 /)<br>
    td@period         = (/ 2.5,   5 /)<br>
    td@depth          = (/  90, mis /)</div>

<div>    do y = 0, ( dimsizes(lat) - 1 )<br>
  ;    print_clock( y + " " + ( dimsizes(lat) - 1 ) + " " )</div>

<div>      td(time|:,{lat|lat(y)},lon|:) = (/ kf_filter(  \\<br>
         data(time|:,{lat|lat(y)},lon|:), obsPerDay,  \\<br>
         td@period(0),     td@period(1),     \\<br>
         td@wavenumber(0), td@wavenumber(1), \\<br>
         td@depth(0),      td@depth(1),      \\<br>
         "none" ) /)</div>

<div>    end do</div>

<div>    print_clock( "Writing TD... " )<br>
    fout->td = td<br>
    delete(td)<br>
  end if</div>

<div>  if( calcWig ) then<br>
    print_clock( "Filtering WIG..." )</div>

<div>    wig = data<br>
    wig@long_name     = "Westward Inertial-Gravity Waves in " + str_upper(varName)<br>
    wig@filter        = "Wheeler & Kiladis (1999), n=1"<br>
    wig@wavenumber    = (/  -15,  -1 /)<br>
    wig@period        = (/ 1.25,   3 /)<br>
    wig@depth         = (/   12,  90 /)</div>

<div>    do y = 0, ( dimsizes(lat) - 1 )<br>
;    print_clock( y + " " + ( dimsizes(lat) - 1 ) + " " )</div>

<div>      wig(time|:,{lat|lat(y)},lon|:) = (/ kf_filter(  \\<br>
         data(time|:,{lat|lat(y)},lon|:), obsPerDay,  \\<br>
         wig@period(0),     wig@period(1),     \\<br>
         wig@wavenumber(0), wig@wavenumber(1), \\<br>
         wig@depth(0),      wig@depth(1),      \\<br>
         "ig1" ) /)</div>

<div>    end do</div>

<div>    print_clock( "Writing WIG... " )<br>
    fout->wig = wig<br>
    delete(wig)<br>
  end if</div>

<div> </div>

<div><br>
  print_clock( "Closing file..." )<br>
  delete(fout)</div>

<div>  print_clock( "Thank you, come again. " )</div>

<div>end ; filter_waves</div>
</div>
</div>
_______________________________________________<br>
ncl-talk mailing list<br>
<a href="mailto:ncl-talk@ucar.edu" target="_blank">ncl-talk@ucar.edu</a><br>
List instructions, subscriber options, unsubscribe:<br>
<a href="http://mailman.ucar.edu/mailman/listinfo/ncl-talk" rel="noreferrer" target="_blank">http://mailman.ucar.edu/mailman/listinfo/ncl-talk</a></blockquote></div>