Interpolation Anomaly

From: Helen Parish <hparish_at_nyahnyahspammersnyahnyah>
Date: Wed, 15 Apr 2009 22:46:14 -0700

I wanted to make a height versus time type plot for the zonally
averaged zonal wind. Data for the 44 different times is stored in
separate netcdf files (44 total).

In the first case I simply plotted the zonally averaged zonal wind as
a function of time in years on the x-axis, and model hybrid level on
the y-axis. (Note that this is not the Earth - there are 50 levels
total, and the pressure is 92 bars at the surface). (Also note that
the y-axis label is produced automatically). Since the highest
altitude level is level 0, and level 49 is at the surface, this
simple plot is effectively upside down, with level 0, representing
the highest altitude, at the bottom of the plot. The y-axis is also
not directly scaled according to pressure.

In the second case, I have tried to plot exactly the same results, as
a function of time in years on the x-axis, but with the y-axis values
given in terms of pressure / height. In order to do this I needed to
interpolate the data from hybrid coordinates onto pressure
coordinates, using NCL function vinth2p, for all 44 files. In this
case the plot is the right way up, with the surface at the bottom of
the plot.

The two plots below show the non-interpolated, and the interpolated
results respectively. The non-interpolated results look relatively
smooth, but the interpolated results show jagged structures, which do
not appear to have been in the original data. Also, I am not sure if
corresponding features are still at the same times as they were in
the non-interpolated version. This could either be due to something
that happens in the interpolation process, or perhaps because I have
done something incorrect in doing the interpolation.

If it is a problem with how the interpolation works, perhaps there
are some parameters I can adjust that may affect the way the results
look ?. I am sure that these jagged features should not be there.

I also include the two versions of the scripts I used. The script
"zon.ncl" is the non-interpolated version. The script "zoninterp.ncl"
it the interpolated version.

Can anyone see what is going wrong here ?.

Thanks,
Helen.

a). NON-INTERPOLATED PLOT :


b). INTERPOLATED PLOT :

c). SCRIPT TO MAKE THE NON-INTERPOLATED PLOT :

;***********************
; zon.ncl
;***********************
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"

begin

; Keep all files open when have a lot of files :
   setfileoption("nc","SuppressClose",False)

   diri = "./"
   fili = systemfunc("cd "+diri+" ; ls zeusrand09125*.cam2.h0*nc")

   f = addfiles (fili,"r")
   U = addfiles_GetVar(f,fili,"U")
   lat = addfiles_GetVar(f,fili,"lat")
   lon = addfiles_GetVar(f,fili,"lon")
   lev = addfiles_GetVar(f,fili,"lev")
   time = addfiles_GetVar(f,fili,"time")
   printVarSummary( U )

   dimu = dimsizes( U )
   ntim = dimu(0)
   klvl = dimu(1)
   nlon = dimu(2)
   mlon = dimu(3)

  uavg = dim_avg_Wrap(U)

  uavg_reverse = uavg(lev | :, time | :, lat | :)

;***********************
; Create Plot
;***********************
  wks = gsn_open_wks ("pdf", "zon" ) ; open workstation
   gsn_define_colormap(wks,"rainbow") ; choose colormap

   res = True
   res_at_cnFillOn = True
   res_at_lbLabelAutoStride = True
   res_at_gsnMaximize = True ; if [ps, eps, pdf] make large
   res_at_gsnSpreadColors = True ; span color map

   nl = 96 ; equator

      res_at_gsnLeftString = ""
      res_at_gsnCenterString = "Zon. av. Zonal Wind, 0 deg lat, years
155-198"
      res_at_gsnRightString = ""

      res_at_tiXAxisString = "Time (years)"

      plot = gsn_csm_contour(wks, uavg_reverse(:,:,nl), res ) ;
(time,lev,lat)

      res_at_trYReverse = True

end

d). SCRIPT TO MAKE INTERPOLATED PLOT :

;***********************
; zoninterp.ncl
;***********************
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"

begin

; Keep all files open when have a lot of files :
   setfileoption("nc","SuppressClose",False)

   diri = "./"
   fili = systemfunc("cd "+diri+" ; ls zeusrand09125*.cam2.h0*nc")
   print(fili)
   nfili = dimsizes(fili)

lev_p = (/ 91500., 90000., 87500., 80000., 67500., 50000., 30000.,
20000., 10000., 5000., 3000., 1500., 750., 390., 200., 100., 50.,25.,
14., 7., 3.5, 1.9, 0.95, 0.4, 0.1, 0.03 /)

; ***********************************************
; Read in multiple files, interpolate, and write to temporary output
files
; **********************************************
   do nf = 0, nfili-1

   fi = addfile (diri+fili(nf), "r")

   diro = "./"
   filo = "uthelen"+nf+".nc"
   print(filo)
   system ("/bin/rm -f "+diro+filo) ; remove any pre-exist file
   fo = addfile (diro+filo, "c")

      hyam = fi->hyam ; read hybrid info
      hybm = fi->hybm
      hyai = fi->hyai ; read hybrid info
      hybi = fi->hybi
      PS = fi->PS
      P0mb = 0.01*fi->P0
      U = fi->U
      lat = fi->lat

   lev_p!0 = "lev_p" ; variable and dimension name
the same
   lev_p&lev_p = lev_p ; create coordinate variable
   lev_p_at_long_name = "pressure" ; attach some attributes
   lev_p_at_units = "hPa"
   lev_p_at_positive = "down"

      Up = vinth2p (U, hyam, hybm, lev_p ,PS, 1, P0mb, 2, False)
      copy_VarAtts(U, Up)
      fo->U = Up ; write to netCDF file

      end do
; **************************
; calculate zonal average of zonal wind versus time for multiple
interpolated files
; *************************
   diri = "./"
   fili2 = systemfunc("cd "+diri+" ; ls uthelen*nc")
   print(fili2)
   nfili = dimsizes(fili2)

   f2 = addfiles (fili2,"r")
   U2= addfiles_GetVar(f2,fili2,"U")

   printVarSummary( U2 ) ; (time, lev_p, lat,lon)

   dimt2 = dimsizes( U2 )
   ntim2 = dimt2(0)
   klvl2 = dimt2(1)
   nlat2 = dimt2(2)
   mlon2 = dimt2(3)

; take zonal average

  uavg = dim_avg_Wrap(U2) ;
(time,lev_p,lat)
   printVarSummary( uavg )

; create variable "work" of appropriate size and with appropriate
variable names

  ulatav = dim_avg_Wrap(uavg) ; (time,lev_p)
   printVarSummary( ulatav )
  ulatav_reorder = ulatav(lev_p | :, time | :) ; (lev_p,time)
   printVarSummary( ulatav_reorder )
  work = ulatav_reorder
   printVarSummary( work )

; reorder data to plot with gsn_csm_pres_hgt

  uavg_reorder = uavg(lev_p | :, time | :, lat | :) ;
(lev_p,lat,time)
   printVarSummary( uavg_reorder )

;***********************
; Create Plot
;***********************
  wks = gsn_open_wks ("pdf", "zoninterp" ) ; open
workstation
   gsn_define_colormap(wks,"rainbow") ; choose colormap

   res = True
   res_at_cnFillOn = True
   res_at_lbLabelAutoStride = True
   res_at_gsnMaximize = True ; if [ps, eps, pdf] make large
   res_at_gsnSpreadColors = True ; span color map

   nl = 96 ; equator

     work(lev_p|:,time|:) = uavg_reorder(:,:,nl) ;
(lev_p,time)
     printVarSummary( work )

      res_at_gsnLeftString = ""
      res_at_gsnCenterString = "Zon av. ZW, 0 deg lat, years 155-198"
      res_at_gsnRightString = ""

      res_at_tiXAxisString = "Time (years)"

      plot = gsn_csm_pres_hgt(wks, work, res ) ; (lev,time)

      res_at_trYReverse = True

end

_______________________________________________
ncl-talk mailing list
List instructions, subscriber options, unsubscribe:
http://mailman.ucar.edu/mailman/listinfo/ncl-talk
Received on Wed Apr 15 2009 - 23:46:14 MDT

This archive was generated by hypermail 2.2.0 : Mon Apr 20 2009 - 09:36:23 MDT