<html><body>
<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">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 height="368" src="cid:WC20191125152453.60065C@bmkg.go.id" width="655" /></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 (carl@cicsnc.org)<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 + ".std.nc"<br />
; pathOut = basePath + ".waves.std.nc"<br />
  pathIn  = basePath + "olr.day.mean.nc"<br />
  pathOut = basePath + "olr.day.kelvin.nc"<br />
; pathOut = basePath + "trmm3b42." + filtName + ".nc"<br />
; pathIn  = basePath + varName + ".anom.nc"<br />
; pathOut = basePath + varName + "." + filtName + ".nc"<br />
; pathIn   = basePath + "anom/" + varName + ".anom.nc"<br />
; pathOut  = basePath + "waves/" + varName + ".anom.waves.nc"</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>
</body></html>