[ncl-talk] sub: EOF issue

Dennis Shea shea at ucar.edu
Fri Mar 19 13:31:32 MDT 2021


As outlined by DaveA:
===================

If integer_val, float_val already exist:

      integer_val =  float_val         ; illegal
      integer_val =  double_val     ; illegal
      float_val     = double_val      ; illegal

NCL requires user to explicitly perform a 'type reduction' when information
may be lost

      integer_val =  toint(float_val)         ; legal
      integer_val =  toint(double_val)     ; legal
      float_val     = tofloat(double_val     ; legal

===
I speculate the 'xJA' is type float
  wvar   = xJA                                  ; copy meta data

Hence, 'wvar' is float
   printVarSummary(wvar)

I speculate 'lat'  [ xJA&lat] is type double


  wvar   = xJA*conform(xJA, clat, 1) ; *line 81*

   if you did a

  test_type = xJA*conform(xJA, clat, 1)
  print(typeof(test_type))                       <===== this would be double

Hence,
 wvar   = xJA*conform(xJA, clat, 1)
is illegal because it is
 type_float = type_double   <=== illegal

==================
 wvar   = tofloat( xJA*conform(xJA, clat, 1) )

====================
=====================
I would probably do:

  rad    = 4.0*atan(1.0)/180.0
  lat     = tofloat(xJA&lat)
  clat   = cos(rad*lat)
  clat   = where(clat.lt.0, xJA at _FillValue, clat)  ; avoid a potential
numerical issue at pole
  clat   = sqrt( clat )  ; avoid a potential numerical issue at pole

On Fri, Mar 19, 2021 at 12:12 PM Dave Allured - NOAA Affiliate via ncl-talk
<ncl-talk at mailman.ucar.edu> wrote:

> The message indicates that this is a data type change problem, not a
> dimension problem.  There are some kinds of type changes that are not
> allowed, because the receiving type does not hold exactly the same range of
> numbers as the generated type.  This is to protect you from unexpected and
> hidden changes in data values.  Please review the NCL chapter on coercion
> of data types.
>
>
> https://www.ncl.ucar.edu/Document/Manuals/Ref_Manual/NclDataTypes.shtml#Coercion
>
> Whenever you get any kind of right side/left side mismatch, you should
> always look at the right and left sides separately.  Right before line 81,
> do this and compare the two results.  See if you can spot the problem:
>
>     printVarSummary (right side)
>     printVarSummary (left side)
>
>
> On Fri, Mar 19, 2021 at 11:15 AM dale zuri via ncl-talk <
> ncl-talk at mailman.ucar.edu> wrote:
>
>> Hi NCL user,
>>
>> I would appreciate any help to fix this issue. Although the data
>> dimension looks okay, this error keeps coming.
>>
>> Thanks
>> DZ
>>
>> fatal:["NclVar.c":1390]:Assignment type mismatch, right hand side can't
>> be coerced to type of left hand side
>> fatal:["Execute.c":8637]:Execute: Error occurred at or near line 81 in
>> file eof-ensemble.ncl
>>
>> fatal:["NclVar.c":1390]:Assignment type mismatch, right hand side can't
>> be coerced to type of left hand side
>> fatal:["Execute.c":8637]:Execute: Error occurred at or near line 120 in
>> file eof-ensemble.ncl
>>
>> Variable: xJA
>> Type: float
>> Total Size: 2246400 bytes
>>             561600 values
>> Number of Dimensions: 3
>> Dimensions and sizes: [time | 26] x [lat | 75] x [lon | 288]
>> Coordinates:
>>             time: [  31..9156]
>>             lat: [20.26178010471205..  90]
>>             lon: [   0..358.75]
>> Number Of Attributes: 1
>>   NMO : 0
>>
>> *Code: *
>> xJA = month_to_season (Avg, "DJF")
>> printVarSummary(xJA)
>>   ;nyrs   = dimsizes(var&time)
>>   ;printVarSummary(var)
>>
>> ; =================================================================
>> ; create weights:  sqrt(cos(lat))   [or sqrt(gw) ] for covariance
>> ; =================================================================
>>   rad    = 4.0*atan(1.0)/180.0
>>   clat   = cos(rad*xJA&lat)
>>   clat   = where(clat.lt.0, 0.0, clat)  ; avoid a potential numerical
>> issue at pole
>>   clat   = sqrt( clat )  ; avoid a potential numerical issue at pole
>>
>> ; =================================================================
>> ; weight all observations
>> ; =================================================================
>>   wvar   = xJA                                  ; copy meta data
>>   printVarSummary(wvar)
>>   wvar   = xJA*conform(xJA, clat, 1) ; *line 81*
>>  ; wvar at long_name = "Wgt: "+wvar at long_name
>> ; =================================================================
>> ; EOF
>> ; Reorder (lat,lon,time) the *weighted* input data
>> ; Access the area of interest via coordinate subscripting
>> ; =================================================================
>>   x      = wvar(lat|:,lon|:,time|:)
>>
>>   eof    = eofunc_Wrap(x, neof, optEOF)
>>   eof_ts = eofunc_ts_Wrap (x, eof, optETS)
>> printVarSummary( eof )
>>   printVarSummary( eof_ts )
>> return
>> ; =================================================================
>> ; Perform varimax rotation
>> ; =================================================================
>>
>>   eof_rot = eofunc_varimax_Wrap( eof, 1 )
>>   printVarSummary( eof_rot )
>>   print("eof_rot: min="+min(eof_rot)+"   max="+max(eof_rot) )
>>
>> ; =================================================================
>> ; put into descending order
>> ; =================================================================
>>
>>   eofunc_varimax_reorder( eof_rot )
>>   printVarSummary( eof_rot )
>>
>> ; =================================================================
>> ; Normalize time series: Sum spatial weights over the area of used
>> ; =================================================================
>>
>>   dimx   = dimsizes( x )
>>   mln    = dimx(1)
>>   sumWgt = mln*sum( clat )
>>   printVarSummary( sumWgt )
>> print(sumWgt)
>>   eof_ts = eof_ts/sumWgt ; *line 120*
>> return
>>
> _______________________________________________
> ncl-talk mailing list
> ncl-talk at mailman.ucar.edu
> List instructions, subscriber options, unsubscribe:
> https://mailman.ucar.edu/mailman/listinfo/ncl-talk
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://mailman.ucar.edu/pipermail/ncl-talk/attachments/20210319/aed76709/attachment.html>


More information about the ncl-talk mailing list