# [ncl-talk] Interpolation for taylor diagram

Dennis Shea shea at ucar.edu
Wed Mar 8 13:45:34 MST 2017

```Overview:

Most commonly, the Taylor diagram is used to compare one-or more data sets
(variables) to variables from one or more reference data sets. For example:
results from a new model configuration compared to previous model
configurations and/or to observational data sets. The title of Karl
Taylor's paper is:

Karl E. Taylor *Summarizing multiple aspects of model performance in a
single diagram*
JGR, vol 106, no. D7, 7183-7192, April 16, 2001
<http://dx.doi.org/10.1029/2000JD900719>.

The keyword is "multiple".  Further, most commonly, *climatologies* of
multiple variables from different data sets  are compared ... *not* (say)
DJF for each year.

--
NCL's Taylor Diagram was initially developed to compare *multiple*
atmospheric model experiments ('cases') with a (say) control run) or
observational datasets(say) ECMWF Reanalysis).

I made some documentation changes to
http://www.ncl.ucar.edu/Applications/taylor.shtml

Specifically, the section:

======
The *RATIO* and *CC* arguments have two dimensions. The left dimension
refers to the number of data sets used (eg: model experiments). The right
dimension holds the computedl values. If only one comparison dataset is
used, the user must create a two dimensional array prior to calling the
function. EG:

CC    = conform_dims( (/*1,1*/), cc)
RATIO = conform_dims( (/*1,1*/), ratio)
====

(a) read 2 data sets with different resolutions and regrid to same
t2 = linint2_Wrap(T2w&lon, T2w&lat, T2w, True,  wAIR&lon, wAIR&lat, 0)
wAIR[100 360 720]    t2[100 360 720]

(b) calculate a pattern correlation
pcor = pattern_cor( wAIR, t2, clat, 0)
print(pcor)      ; 1 dimension of [100](a) read 2 data sets with different
resolutions and regrid to same
t2 = linint2_Wrap(T2w&lon, T2w&lat, T2w, True,  wAIR&lon, wAIR&lat, 0)
wAIR[100 360 720]    t2[100 360 720]

You are comparing the pattern correlations & ratio for each year
Since there is only one data set with (100) pattern correlations (cc) and
ratios (ratio), you must force this into a 2-dimensional array

CC       = conform_dims( (/*1,1*/), cc, 1)       ; ===> CC(1,100)
RATIO = conform_dims( (/*1,1/)*, ratio, 1*)  *  ; ===>RATIO(1,100)

*Also, *I think you want an areally weighted root-mean-square-difference

http://www.ncl.ucar.edu/Document/Functions/Built-in/wgt_arearmse.shtml

=====

On Wed, Mar 8, 2017 at 7:49 AM, Sri Nandini <snandini at marum.de> wrote:

> Thank you
> data/gridded/data.UDel_AirT_Precip.html and i renamed it a year ago. My
> mistake. It contains 1332monthly timeseries.
>
> Both have been used to extract only the needed same time.
>
> I have done:
>  (a) read 2 data sets with different resolutions and regrid to same
> t2 = linint2_Wrap(T2w&lon, T2w&lat, T2w, True,  wAIR&lon, wAIR&lat, 0)
> wAIR[100 360 720]    t2[100 360 720]
>
>  (b) calculate a pattern correlation
>  pcor = pattern_cor( wAIR, t2, clat, 0)
> print(pcor)      ; 1 dimension of [100]
>
> (c) i also calculated the ratio of the standardized variances by:
>  std1= dim_rmsd(wAIR(lat|:,lon|:,time|:), t2(lat|:,lon|:,time|:))
>
> printVarSummary(std1)     ;[360] x [720]
> warning:dim_rmsd: 173406 rightmost sections of one or both of the input
> arrays contained all missing values
> Error: fatal:Dimension sizes on right hand side of assignment do not match
> dimension sizes of left hand side
>
> The taylor diagram function uses 2d arrays:
>
> , RATIO[*][*]:numeric \  ; 2d array: ratios
> , CC[*][*]:numeric    \  ; 2d array: pattern correlation
>
>
> How can i put the the ratios and pattern correlations into arrays for
> plotting when i only have 1 dimension for my pattern_corr?
>
>
>
> I would like to know if this method of pattern corr and standard deviation
> normalized is the right one for Taylor diagrams.
> Deeply appreciated.
>
>
> On Mar 6, 2017 4:56:34 PM, Dennis Shea wrote:
>
> There are many things that just don't add up for me. The code you
> originally posted 100 time (?months?) steps. The model data shows 1800
> months while the NCEP Reanalysis had 748  months. You said you wanted
> "seasonal (DJF) Taylor diagrams" ....  so 1800/12=150 years (150 DJF) and
> the NCEP has 742/12=62.3 years (62 DJS). I am no sure where you get 100
> time steps.
>
> The code you posted indicate
>
> ncl 0> f = addfile("T2M2.nc","r")
> ncl 1> T2 = f->TREFHT
> ncl 2> printVarSummary(T2)
>
> Variable: T2
> Dimensions and sizes:    [time | 1800] x [lat | 96] x [lon | 144]
> ==> #years= 1800/12=150 years ==> 150 DJF
> Coordinates:
>             time: [  31..54750]
>             lat: [ -90..  90]                   <================ CAM:
> CESM   ... South-to-North
>             lon: [   0..357.5]
>
>
> ncl 5> g = addfile("air.mon.mean.nc","r")
> ncl 6> print(g)
> ncl 7> air = short2flt(g->air)
> ncl 8> printVarSummary(air)
>
> Variable: air
> Dimensions and sizes:    [time | 748] x [level | 17] x [lat | 73] x [lon |
> 144]    ==> #years = 748/12=62.3  ==> 62 DJF
> Coordinates:
>             time: [17067072..17612736]
>             level: [1000..10]
>             lat: [90..-90]                   <============== NCEP:
> North-to-South
>             lon: [ 0..357.5]
>
> ========================
> Further, the linint2 documentation states "... *nyi* subsection of *yi*
> must be monotonically increasing,". The 'yi' are the latitudes. Again, the
> code you posted did not show that you made the NCEP Reanalysis increasing.
>
> I have no idea why you you are interpolating to a 5 degree grid. Why not
> interpolate to the 2.5 grid
>
>
>  T2 = f->TREFHT
>   printVarSummary(T2)              ; 1800 time steps
>
>  air = short2flt(g->air(:,0,:,:)       ; 1000 mb only
>  printVarSummary(air)               ; **look** at 'lat'   90 to -90
> North-to_south
>
>  air = air(:,::-1,:)                          ; make latitudes
> monotonically increasing (NCL syntax)
>  printVarSummary(air)               ; **look** at 'lat'   -90 to 90
> South-to-North
>                                                   ; you have 748 time
> steps
>
> ----
>
> Note: These must have the same # of time steps *if* you have a time
> timension.
>
>   t2 = linint2_Wrap(T2&lon, T2&lat, T2, True,  air&lon, air&lat, 0)
>   printVarSummary(t2)               ; 1880 time steps
>
>
> Goos Luck
>
> On Wed, Mar 1, 2017 at 11:57 PM, Sri Nandini <snandini at marum.de> wrote:
>
>
> The files are on the ftp server except air.mon.mean.nc
>
> local: air.mon.mean.nc remote: air.mon.mean.nc
> 227 Entering Passive Mode (128,117,23,220,192,5).
> 553 Could not create file.
> the file air.mon.mean.nc can be found here:
> https://www.esrl.noaa.gov/psd/data/gridded/data.ncep.
> reanalysis.derived.pressure.html
>
> Thank you.
>
>
> On Mar 1, 2017 4:10:20 PM, Dennis Shea wrote:
>
> re:
> fo = linint2(airw&lon,airw&lat,airw(time|:,lat|:,lon|:), True, LON, LAT,
> 0)
> Which gives an error:
> warning:linint2: xi, yi, xo, and yo must be monotonically increasing
> ====
>
>
>   lon = (0., 2.8125, .... , 357,0125)   <== ?typo?  357.0125  ??
>   lat = (-87.8638, ... ,87.8638)
>
>   LON = (0., 2.5, ... , 357.5)    ; length 144
>   LAT = (-90.,87.5,...90.)        ; length 73
>
>
> If the print(airw&lon) and  print(airw&lat) are increasing then I am not
> sure what the problem is.
>
> Really bi-linear interpolation is pretty simple.
>
> ===
> Why are you use 'escorc' rather that 'pattern_cor' ?
>
> ===
> You can send a *minimal, clean script* and the necessary files to
>
> ftp ftp.cgd.ucar.edu
> anonymous
> your_email
> cd incoming
> put ...
> put ...
> quit
>
>
> On Wed, Mar 1, 2017 at 12:09 AM, Sri Nandini <snandini at marum.de> wrote:
>
> Hello
>
> Thank you.
>
> Im still at the interpolation stage of the script, what i wish to do is
> change the model temperature grid (lat,lon) same to my observational
> temperature.
> To do that i followed:
> fo = linint2(airw&lon,airw&lat,airw(time|:,lat|:,lon|:), True, LON, LAT,
> 0)
> Which gives an error:
> warning:linint2: xi, yi, xo, and yo must be monotonically increasing
>
> My airw= [100 360 720]  ;observed temp
> My t2mw= [100 96 144]  ' cesm modelled temp
>
> My fo= [100 360 720] but the error comes when i apply the corr for taylor
> diag:
> error: fatal:escorc: The last dimension of x must be equal to the last
> dimension of y
>
> My code for corr is: re=escorc(airw,fo) where both datasets now have same
> grid.
>
> Would anyone have a sample code to share if they were successful in
> running a taylor diagram after interpolating the datasets please? and
> applied centered corr and rsmd?
> Deeply appreciated
>
>
> On Feb 28, 2017 7:36:15 PM, Adam Phillips wrote:
>
> Hi Sri,
> The error message is telling you what the issue is:
> fatal:linint2: The rightmost dimensions of fi must be nyi x nxi, where nyi
> and nxi are the lengths of yi and xi respectively
>
> fi is your input array, and the error message is saying that the rightmost
> dimensions of fi must be equal to the sizes of the lon and lat arrays that
> you pass in.
>
> Thus, if you pass in your t2mw array to linint2 like this:
> fo = linint2(t2mw&lon,t2mw&lat,t2mw, True, LON, LAT, 0)
> should work as lon and lat are the 2 rightmost dimensions of t2mw.
> However, if you pass in your airw array:
> fo = linint2(airw&lon,airw&lat,airw, True, LON, LAT, 0)
> You will get the referenced error message as time is the rightmost
> dimension in airw. The solution is to reorder the dimensions in airw:
> fo = linint2(airw&lon,airw&lat,airw(time|:,lat|:,lon|:), True, LON, LAT,
> 0)
>
> Hope that helps. If you have any further questions please respond to the
> ncl-talk email list and not to me personally.
>
>
> On Tue, Feb 28, 2017 at 8:43 AM, Sri Nandini <snandini at marum.de> wrote:
>
> Thank you
>
> So i have cleaned out the commented statements, and the errors i am
> getting are these:
>
> fatal:linint2: The rightmost dimensions of fi must be nyi x nxi, where nyi
> and nxi are the lengths of yi and xi respectively
>
>    printVarSummary(t2mw)
> Dimensions and sizes:    [time | 100] x [lat | 192] x [lon | 288]
>    printVarSummary(airw)
> Dimensions and sizes:    [lat | 62] x [lon | 162] x [time | 100]
> It stops at the interpolation stage before even coming to the correlation
> section.
> Basically i am unsure of my interpolation method between observations and
> model output data.
>
> On Feb 24, 2017 4:28:11 PM, Dennis Shea wrote:
>
> I started to look at your code. However, it has lots of commented
> statements and, to me,  it is not clear what is happening. Really, you
> should send only clean scripts. We like to help but we  don't have the time
> to decipher codes.
>
> The commented
>
>   ;cor1 = dim_avg_n_Wrap(pattern_cor( t2mw, airw, clat, 0), 0)
>
> contains
>    http://www.ncl.ucar.edu/Document/Functions/
> Contributed/pattern_cor.shtml
>
> What is wrong with the following:
>
>    printVarSummary(t2mw)
>    printVarSummary(airw)
>
>    pcor = pattern_cor( t2mw, airw, clat, 0)
>    print(pcor)
>
>
>
> On Thu, Feb 23, 2017 at 9:03 AM, Sri Nandini <snandini at marum.de> wrote:
>
> Dear NCL community,
> Greetings!
>
> I am trying to plot seasonal (DJF) Taylor diagrams and have errors in
> interpolation my datasets on same grid.
> (a) read 2 data sets with different resolutions and regrid  (modelled and
> obs temperature for a test)
> (b) calculate a pattern correlation
>
> My script is attached below ::
>
> ;=============================
> =====================================
> ;Taylor diagram calculations
> ;================================ interpolation onto common grid (of
> observational data)
> ;ncl pattern_cor between different size arrays
>  t2mw = f->t2mw(0,0,:,{0:360}); remove cyclic point
>   lon = f->lon({0:360})
> ;************************************************
> ; interpolate to new grid
> ;***********************************************
>   newlat = fspan(-60.,60,24)
>   newlon = fspan(0.,355.,72)
>
>  newt2mw = linint2_Wrap(lon,t2mw&lat,t2mw,True,newlon,newlat,0)
>
>   newt2mw!0   ="lat"
>   newt2mw!1   = "lon"
>   newt2mw&lat = newlat
>   newt2mw&lon = newlon
> ;=============================
> =========================================centered Pattern correlation
> (coslat weighting has been done previously above)
> re=escorc(airw,newt2mw)
>  ;cor1 = dim_avg_n_Wrap(pattern_cor( t2mw, airw, clat, 0), 0);rc =
> pattern_cor(x, y,gw, 0)      ; gaussian weighting, centered
>  mmd= (/cor1/)
>  printVarSummary(mmd)
> ;================================Standard deviation
> ;================================
>
> ;pre0_Std = dim_avg_n_Wrap( dim_stddev_n_Wrap( t2mw, (/1,2/)), 0)
>  ;std1 = dim_rmsd_Wrap(airw,t2mw, 0);computes rootmean square difference
> ;std1 = dim_rmsd_n(t2mw, airw, 0);
>     std1 = dim_rmsd( t2mw(lat|:,lon|:,time|:), airw(lat|:,lon|:,time|:)
> )    ; ==> rmsdTime(nlat,nlon)
>
>     ;rmsdTime = dim_rmsd_n( x, y, 0 )
> ; ==> no reordering needed
> ================================================================
> I had a look at other interpolation functions for correlations between
> different grids such a s:
>
> Assume *fi* is a 4D array dimensioned *ntim* x *nlvl* x *nlat* x *mlon* (
> *ntim*=50, *nlvl*=30, *nlat*=64, *mlon*=128), and that the rightmost
> dimension is to be treated as cyclic (the user should not add a cyclic
> point for the rightmost dimension).
>
> All times and levels will be interpolated and returned in a new array *fo*
> dimensioned *ntim* x *nlvl* x *73* x *144*:
>
>   lon = (0., 2.8125, .... , 357,0125)
>   lat = (-87.8638, ... ,87.8638)
>
>   LON = (0., 2.5, ... , 357.5)    ; length 144
>   LAT = (-90.,87.5,...90.)        ; length 73
>
>   fo = *linint2_Wrap* (lon,lat,fi, True, LON,LAT, 0)
>
> Error:
>
> Deeply appreciated
>
> _______________________________________________
> 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
>
>
>
>
> --
> Associate Scientist,  Climate and Global Dynamics Laboratory, NCAR
> www.cgd.ucar.edu/staff/asphilli/   303-497-1726
>
> <http://www.cgd.ucar.edu/staff/asphilli>
>
>
>
> _______________________________________________
> 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
>
>
> _______________________________________________
> 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/20170308/a55972a7/attachment.html
```