[ncl-talk] Error in creating Nino34 index from CMIP5 models

Kwesi A. Quagraine starskykwesi at gmail.com
Sun Nov 18 00:50:33 MST 2018


Hello Mary, thanks for the explanation, points well taken.

@Dennis thanks for the script and further clarity.

I am having a look and will let you know of the progress.

Best regards
Kwesi

On 17 November 2018 at 23:40:52, Dennis Shea (shea at ucar.edu) wrote:

[1] Mary is correct. The sample file is using a *rectilinear* grid. Hence,
NCL's *coordinate subscripting* ( *{...}* ) can be used.

[2] The grid for 'tos_Omon_IPSL-CM5A-LR_historical_r1i1p1_185001-200512.nc
is *curvilinear.* Mary offered one appraoch.  Here is another approach.

  f       = *addfile*("tos_Omon_IPSL-CM5A-LR_historical_r1i1p1_185001-200512.nc"
,"r")
  x       = f->tos                      ; (ntim,nlat,mlon)
  lat2d = f->lat                       ; (nlat,mlon)
  lon2d = f->lon

;---Set all values outside of NINO-3.4 region to _FillValue

  LAT2D = *conform*(x, lat2d, (/1,2/))   ; (ntim,nlat,mlon)
  LON2D = *conform*(x, lon2d, (/1,2/))   ; (ntim,nlat,mlon)

  x     = where(LAT2D.ge.latS .and. LAT2D.le.latN .and. \
                LON2D.ge.lonL .and. LON2D.le.lonR       \
               ,x, x at _FillValue)
  delete( [/ LAT2D, LON2D /] )         ; no longer needed

is a curvilinear grid.

*The rest is almost identical to the example.*

;---Create a monthly climatology

  xClm  = clmMonTLL(x)
  printVarSummary(xClm)                ; (nmos,nlat,mlon)
  printMinMax(xClm,0)
  print("---")

;---Calculate anomalies at each grid point

  xAnom =  calcMonAnomTLL(x, xClm)
  printVarSummary(xAnom)               ; (ntim,nlat,mlon)
  printMinMax(xAnom,0)
  print("---")

;---Weighted areal averages & anomalies (time series)
;---Really: No need to weight ... small latitudinal extent

  wgt2      = cos(0.01745329*lat2d)    ; (nlat,mlon)

  xAvg      = wgt_areaave2(x, wgt2, 0)
  copy_VarCoords(x(:,0,0), xAvg)
  xAvg at long_name = "NONO34 areal avg"
  printVarSummary(xAvg)                ; (ntim)
  printMinMax(xAvg,0)
  print("---")

  xAnomAvg = wgt_areaave2(xAnom, wgt2, 0)   ; (ntim)
  copy_VarCoords(x(:,0,0), xAnomAvg)
  xAnomAvg at long_name = *"NINO34* areal avg anomalies: ENSO34 Index"
  printVarSummary(xAnomAvg)
  printMinMax(xAnomAvg,0)
  print("---")

;---Compute standardized anomalies

  xAnomStd = xAnomAvg/stddev(xAnomAvg)      ; (ntim)
  copy_VarCoords(xAnomAvg, xAnomStd)
  xAnomStd at long_name = "*Standardized NINO34*"
  printVarSummary(xAnomStd)
  printMinMax(xAnomStd,0)
  print("---")


On Sat, Nov 17, 2018 at 3:59 PM Mary Haley <haley at ucar.edu> wrote:

> Dear Kwesi,
>
> You didn't provide a script, but my guess is that you are trying to
> subscript your data array using latitude / longitude coordinates, similar
> to this line which was in the original script:
>
>   X      = mon_fullyear( in->SST(:,{latS:latN},{lonL:lonR}), 0)
>
> The original example was written for data on a rectilinear lat/lon grid
> that has latitude/longitude coordinate arrays.
>
> Your data is curvilinear, which means it is represented by 2D lat/lon
> arrays.  It does have coordinate arrays attached to it, but they are simply
> integer indexes and NOT lat/lon coordinate arrays:
>
>        int j(j) ;
>                 j:units = "1" ;
>                 j:long_name = "cell index along second dimension" ;
>         int i(i) ;
>                 i:units = "1" ;
>                 i:long_name = "cell index along first dimension" ;
>
> If you need to subset your data using lat/lon coordinates, you will need
> to either use the getind_latlon2d
> <http://www.ncl.ucar.edu/Document/Functions/Contributed/getind_latlon2d.shtml>
> function or the region_ind
> <http://www.ncl.ucar.edu/Document/Functions/Contributed/region_ind.shtml>
> function.  You can see some examples at:
>
> http://www.ncl.ucar.edu/Applications/latlon_subset.shtml
>
> Look at either latlon_subset_2.ncl or latlon_subset_3.ncl.
>
> Good luck,
>
> --Mary
>
>
> On Sat, Nov 17, 2018 at 7:57 AM Kwesi A. Quagraine <starskykwesi at gmail.com>
> wrote:
>
>> Hello Nclers,
>>
>> I am experiencing an error when calculating Nino34 index (
>> indices_nino_1.ncl
>> <https://www.ncl.ucar.edu/Applications/Scripts/indices_nino_1.ncl>)
>> using CMIP5 models; The error message is; fatal:Coordinate subscript type
>> mismatch. Subscript (2) can not be coerced to type of coordinate variable,
>> subscript (0).
>>
>> Ncdump of file gives;
>>
>> netcdf tos_Omon_IPSL-CM5A-LR_historical_r1i1p1_185001-200512 {
>> dimensions:
>>         time = UNLIMITED ; // (1872 currently)
>>         j = 149 ;
>>         i = 182 ;
>>         bnds = 2 ;
>>         vertices = 4 ;
>> variables:
>>         double time(time) ;
>>                 time:bounds = "time_bnds" ;
>>                 time:units = "days since 1850-01-01 00:00:00" ;
>>                 time:calendar = "noleap" ;
>>                 time:axis = "T" ;
>>                 time:long_name = "time" ;
>>                 time:standard_name = "time" ;
>>         double time_bnds(time, bnds) ;
>>         int j(j) ;
>>                 j:units = "1" ;
>>                 j:long_name = "cell index along second dimension" ;
>>         int i(i) ;
>>                 i:units = "1" ;
>>                 i:long_name = "cell index along first dimension" ;
>>         float lat(j, i) ;
>>                 lat:standard_name = "latitude" ;
>>                 lat:long_name = "latitude coordinate" ;
>>                 lat:units = "degrees_north" ;
>>                 lat:bounds = "lat_vertices" ;
>>         float lon(j, i) ;
>>                 lon:standard_name = "longitude" ;
>>                 lon:long_name = "longitude coordinate" ;
>>                 lon:units = "degrees_east" ;
>>                 lon:bounds = "lon_vertices" ;
>>         float lat_vertices(j, i, vertices) ;
>>                 lat_vertices:units = "degrees_north" ;
>>         float lon_vertices(j, i, vertices) ;
>>                 lon_vertices:units = "degrees_east" ;
>>         float tos(time, j, i) ;
>>                 tos:standard_name = "sea_surface_temperature" ;
>>                 tos:long_name = "Sea Surface Temperature" ;
>>                 tos:comment = "\"this may differ from \"\"surface
>> temperature\"\" in regions of sea ice.\"" ;
>>                 tos:units = "K" ;
>>                 tos:original_name = "sosstsst" ;
>>                 tos:original_units = "degC" ;
>>                 tos:history = "2011-07-04T20:18:27Z altered by CMOR:
>> Converted units from \'degC\' to \'K\'. 2011-07-04T20:18:27Z altered by
>> CMOR: replaced missing value flag (9.96921e+36) with standard missing value
>> (1e+20)." ;
>>                 tos:cell_methods = "time: mean (interval: 30 minutes)" ;
>>                 tos:cell_measures = "area: areacello" ;
>>                 tos:missing_value = 1.e+20f ;
>>                 tos:_FillValue = 1.e+20f ;
>>                 tos:associated_files = "baseURL:
>> http://cmip-pcmdi.llnl.gov/CMIP5/dataLocation gridspecFile:
>> gridspec_ocean_fx_IPSL-CM5A-LR_historical_r0i0p0.nc areacello:
>> areacello_fx_IPSL-CM5A-LR_historical_r0i0p0.nc" ;
>>                 tos:coordinates = "lat lon" ;
>>
>> // global attributes:
>>                 :institution = "IPSL (Institut Pierre Simon Laplace,
>> Paris, France)" ;
>>                 :institute_id = "IPSL" ;
>>                 :experiment_id = "historical" ;
>>                 :source = "IPSL-CM5A-LR (2010) : atmos : LMDZ4 (LMDZ4_v5,
>> 96x95x39); ocean : ORCA2 (NEMOV2_3, 2x2L31); seaIce : LIM2 (NEMOV2_3);
>> ocnBgchem : PISCES (NEMO:
>>
>> Any help on this will be much appreciated. Thanks in advance.
>>
>> Best regards
>> Kwesi
>> ------------
>> Try not to become a man of success but rather a man of value- Albert
>> Einstein
>>
>> Kwesi A. Quagraine
>> Department of Physics
>> School of Physical Sciences
>> College of Agriculture and Natural Sciences
>> University of Cape Coast
>> Cape Coast, Ghana
>>
>> Alt. Email: kwesi at csag.uct.ac.za
>> Web: http://www.recycleupghana.org/
>> Office: +27 21 650 3164
>> Skype: quagraine_cwasi
>> _______________________________________________
>> ncl-talk mailing list
>> ncl-talk at ucar.edu
>> List instructions, subscriber options, unsubscribe:
>> http://mailman.ucar.edu/mailman/listinfo/ncl-talk
>>
> _______________________________________________
> ncl-talk mailing list
> ncl-talk at ucar.edu
> List instructions, subscriber options, unsubscribe:
> http://mailman.ucar.edu/mailman/listinfo/ncl-talk
>
------------
Try not to become a man of success but rather a man of value- Albert
Einstein

Kwesi A. Quagraine
Department of Physics
School of Physical Sciences
College of Agriculture and Natural Sciences
University of Cape Coast
Cape Coast, Ghana

Alt. Email: kwesi at csag.uct.ac.za
Web: http://www.recycleupghana.org/
Office: +27 21 650 3164
Skype: quagraine_cwasi
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mailman.ucar.edu/pipermail/ncl-talk/attachments/20181117/906d9580/attachment.html>


More information about the ncl-talk mailing list