[[IT memo]]
[[IT memo/CDO memo]]
* NCL memo [#fc2be665]
#contents
*** Vertical interpolation of CCSM3.0 hybrid output [#re7a0284]
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_csm.ncl"
;************************************************
begin
;************************************************
; file handling
;************************************************
dec = "198"
yr = "5"
year = dec+yr
fnps = "fromesg/tmpPS"+dec+"0s_00"+yr+".nc"
fn = "fromesg/b30.030e.cam2.h3.U."+year+"-01-01_cat_"+year+"-12-31.nc" ; define filename
inU = addfile(fn,"r") ; open netcdf file
inPS = addfile(fnps,"r") ; open netcdf file
fnout = "fromesg/b30.030e.cam2.h3.UPRS."+year+"-01-01_cat_"+year+"-12-31.nc"
system("/bin/rm -f "+fnout)
fout = addfile(fnout,"c")
;************************************************
; read needed variables from file
;************************************************
U = inU->U ; select variable
P0mb =1000.
hyam = inU->hyam ; get a coefficients
hybm = inU->hybm ; get b coefficients
PS = inPS->PS ; get sfc pressure
;************************************************
; define other arguments required by vinth2p
;************************************************
; type of interpolation: 1 = linear, 2 = log, 3 = loglog
interp = 2
; is extrapolation desired if data is outside the range of PS
extrap = False
; create an array of desired pressure levels:
pnew = (/1000.0,925,850.0,700.0,600,500.0,400,300.,250,200.0,150,100,70,50,30,20,10 /)
;************************************************
; calculate T on pressure levels
;************************************************
; note, the 7th argument is not used, and so is set to 1.
;************************************************
uprs = vinth2p(U,hyam,hybm,pnew,PS,interp,P0mb,1,extrap)
filedimdef(fout,"time",-1,True)
uprs!0 = "time"
uprs!1 = "lev"
uprs!2 = "lat"
uprs!3 = "lon"
pnew@units = "hPa" ; required for grads compatible
uprs&lev = pnew
fout->uprs = uprs
end
*** Other tips [#pefef7a3]
- file status (e.g. addfile)~
"r": read only, "w": writable, "c": create
- Creating GrADS-readable netCDF file~
x,y,z variables (i.e., "lon", "lat", "lev") should have attribution of their units. Usually, lon and lat will be ok. For lev, you need to do something like this below. (pnew is vertical pressure level and ugrd is a 4D variable)
uprs!0 = "time"
uprs!1 = "lev"
uprs!2 = "lat"
uprs!3 = "lon"
pnew@units = "hPa"
uprs&lev = pnew
fout->uprs = uprs