
sigma2hybrid
Interpolates from sigma to hybrid coordinates.
Prototype
function sigma2hybrid ( x : numeric, sigx [*] : numeric, hya [*] : numeric, hyb [*] : numeric, p0 : numeric, ps : numeric, intyp : integer ) return_val : numeric
Arguments
xA numeric array of any dimension to be interpolated. The level dimension must be in the rightmost position and ordered top-to-bottom.
sigxA one-dimensional array containing the sigma coordinates of the level dimension of x. Order is top-to-bottom.
hyaA one-dimensional array containing the hybrid A coefficients. Must have the same dimension as the level dimension of x. The order must be top-to-bottom.
hybA one-dimensional array containing the hybrid B coefficients. Must have the same dimension as the level dimension of x. The order must be top-to-bottom.
p0Scalar numeric value equal to surface reference pressure in Pa
psA multi-dimensional array of surface pressures in Pa. If x is one-dimensional, then ps must be a scalar. Otherwise, ps must be the same size as x except for the rightmost dimension.
intypAn integer scalar indicating the type of vertical interpolation to be performed 1 = linear, 2 = log , 3 = log-log.
Return value
A multi-dimensional array fo the same size as x except that the rightmost level dimension has been replaced by the size of hya. Double if x is double, float otherwise.
Description
Interpolates from sigma to hybrid coordinates using the interpolation type specified by intyp. All hybrid coordinate values are transformed to sigma values, where the formula for the pressure (Pa) of a hybrid surface at level k is:
p(k) = hya(k)*p0 + hyb(k)*psThe relationship of pressure and sigma is:
sig(k) = p(k)/psfcHence,
sig(k) = hbcofa(k)*p0/psfc + hbcofb(k)Generally, the values returned by the various interpolation options are quite similar.
Examples
Example 1
Let x and s be one-dimensional variables, each with dimension size sig_lev. Let ps be surface pressure (Pa) and hya/hyb be one-dimensional arrays of size hyb_lev containing the hybrid coordinates. Then:
ps = 100800. ; sfc pressure (PA) P0 = 100000. ; PA intyp = 3 ; log-log xh = sigma2hybrid(x,s,hya,hyb,P0,ps,intyp) ; xh is size hyb_levExample 2
Let x be a three-dimensional variable with named dimensions (lat,lev,lon) and dimension sizes (nlat,klev,mlon). This is the order used by files in CCM History Tape format. Reorder to make the rightmost dimension the level dimension. The hybrid coefficients are manually specified.
f = addfile ("bogus.ccm", "r") ; note the 'ccm' extension x = f->X ; (lat,lev,lon) s = f->SIGMA ; (lev) ps = f->PSFC ; (lat,lon) P0 = 100000. ; PA ; hybrid coef (pressure) hyam = (/ 0.0048093, 0.0130731, 0.03255911, \ 0.0639471, 0.0816768, 0.07802010, 0.0733671, \ 0.0676476, 0.0608624, 0.05310950, 0.0445995, \ 0.0356607, 0.0267266, 0.01830690, 0.0109421, \ 0.0051470, 0.0013519, 0.0 /) ; hybrid coef (sigma) hybm = (/ 0.0, 0.0, 0.0, \ 0.0, 0.0173664, 0.06069280, 0.1158237, \ 0.1835918, 0.2639851, 0.35584590, 0.4566760, \ 0.5625875, 0.6684428, 0.76820300, 0.8554653, \ 0.9241285, 0.9690938, 0.99252820 /) ; linear interpolation xh = sigma2hybrid (x(lat|:,lon|:,lev|:),s,hya,hyb,P0,ps, 1) ; if the size of hya/hyb is KLEV, then xh will be of size (nlat,klon,KLEV).Example 3
Let T be a four-dimensional array with sizes (ntim,klev,nlat,mlon) and have named dimensions (time,lev,lat,lon). Let ps be an array with sizes (time,lat,lon). Here the hybrid information is read from another file:
f = addfile ("bogus1.nc", "r") x = f->X ; (lat,lev,lon) s = f->SIGMA ; (lev) ps = f->PSFC ; (lat,lon) g = addfile ("bogus2.nc", "r") hya= g->hyam hyb= g->hybm P0 = 100000. ; PA Th = sigma2hybrid(T(time|:,lat|:,lon|:,lev|:),s,hya,hyb,P0,ps,1)
The returned array Th will be of size(ntim,nlat,mlon,KLEV), where KLEV is the size of the hya/hyb arrays.
To get Th array into (time,lev,lat,lon) order, first name the dimensions and then reorder:
Th!0 = "time" ; name the 4 dimensions Th!1 = "lat" Th!2 = "lon" Th!3 = "lev" ; reorder TH = Th(time|:,lev|:,lat|:,lon|:) ; (time,lev,lat,lon)