[ncl-talk] Assignment type mismatch, right hand side can't be coerced to type of left hand side
Dennis Shea
shea at ucar.edu
Mon Nov 25 10:36:23 MST 2019
Regardless of language used, the golden rule of data processing is "Know
your data."
---
Your variable is type short. The file creator did this to reduce the file
size in half.
*short* data(time, lat, lon) ;;
olr:*add_offset *= 327.65f ;
olr:*scale_factor* = 0.01f ;
----
The variable must be unpacked to float . NCL has the *short2flt *function.
This can be used as follows:
data = *short2flt*
<http://www.ncl.ucar.edu/Document/Functions/Contributed/short2flt.shtml>(
fin->$varName$({tmin:tmax},{ymin:ymax},:) )
On Mon, Nov 25, 2019 at 8:30 AM ANDIKA FAUZIAH HAPSARI, A.P via ncl-talk <
ncl-talk at ucar.edu> wrote:
> Hi everyone.
> I'm a newbie on NCL.
> I tried to filtering Kelvin wave using script from
> https://k3.cicsnc.org/carl/carl-ncl-tools/blob/master/filter/filter_waves.ncl
> .. 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..
>
>
> Here is the script
>
> ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
> ; 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
> ymin = -20
> ymax = 20
> units = "hours since 1800-01-01 00:00:0.0"
> tmin = cd_inv_calendar( 1998, 01, 01, 00, 0, 0, units, 0 )
> tmax = cd_inv_calendar( 2014, 12, 31, 00, 0, 0, units, 0 )
> if( .not.isvar("filtName") ) then
> filtName = "k09"
> end if
> obsPerDay = 1
> if( .not.isvar("varName") ) then
> varName = "olr"
> end if
> print( varName )
> basePath = "/home/sarihmmm/datareanly/"
> ; basePath = "~/data/nasa_ymc/fcst_verif/"
> ; basePath = "~/data/olr/current/"
> ; pathIn = basePath + ".std.nc"
> ; pathOut = basePath + ".waves.std.nc"
> pathIn = basePath + "olr.day.mean.nc"
> pathOut = basePath + "olr.day.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" )
> time = fin->time({tmin:tmax})
> lat = fin->lat({ymin:ymax})
> lon = fin->lon
> lat at actual_range = (/ min(lat), max(lat) /)
> ; 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->lat = lat
> fout->lon = lon
> else
> fout = addfile( pathOut, "w" )
> end if
> print_clock( "Reading the input data... " )
> data = fin->$varName$({tmin:tmax},{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(lat) - 1 )
> ; print_clock( y + " " + ( dimsizes(lat) - 1 ) + " " )
> kelvin(time|:,{lat|lat(y)},lon|:) = (/ kf_filter( \\
> data(time|:,{lat|lat(y)},lon|:), 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/20191125/4fc1db89/attachment.html>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: image.png
Type: image/png
Size: 229320 bytes
Desc: not available
URL: <http://mailman.ucar.edu/pipermail/ncl-talk/attachments/20191125/4fc1db89/attachment.png>
More information about the ncl-talk
mailing list