
pres_hybrid_ccm
Calculates pressure at the hybrid levels.
Prototype
function pres_hybrid_ccm ( ps : numeric, p0 [1] : numeric, hya [*] : numeric, hyb [*] : numeric ) return_val : numeric
Arguments
psAn array of at least 2 dimensions equal to surface pressure data in Pa or hPa (mb). The two rightmost dimensions must be latitude and longitude.
p0Scalar numeric value equal to the surface reference pressure. Must have the same units as ps.
hyaA one-dimensional array equal to the hybrid A coefficients. Must be unitless.
hybA one-dimensional array equal to the hybrid B coefficients. Must be unitless.
Return value
If ps is two-dimensional [e.g. (lat,lon)] or three-dimensional [e.g. (time,lat,lon)] then the return array will have an additional level dimensions: (lev,lat,lon) or (time,lev,lat,lon), respectively. The size of the lev dimension is the same as the size of hya. The returned type will be double if ps is double, float otherwise.
Description
Calculates pressures at each hybrid level using the formula: p(k) = a(k)*p0 + b(k)*ps.
Some models output a hybrid component, ap(k) [=a(k)*p0], which has units of pressure. This must be made dimensionless prior to use.
Examples
Example 1
Let hyam(klev), hybm(klev), ps(ntim,nlat,mlon) in units of pascals. pm will be returned as a four-dimensional array of size (ntim,klev,nlat,nlon).
hyam = f->hyam ; read from a file the mid-layer coef hybm = f->hybm ; read from a file ps = f->PS ; surface pressure [Pa] p0 = 100000. ; since ps is in Pa or [ f->P0] pm = pres_hybrid_ccm(ps,p0,hyam,hybm)
A sample printout of two grid points (one over the ocean, the other over the Rocky Mountains) at a particular time step follows. Sample temperature values are printed adjacent to the pressure values (Pa). sprintf allows format control of the output:
nl = 46 mla = 64 mlb = 90 print( sprintf("%8.1f",pm(0,:,nl,mla))+" " \ + sprintf("%7.2f", T(0,:,nl,mla))+" " \ + sprintf("%8.1f",pm(0,:,nl,mlb))+" " \ + sprintf("%7.2f", T(0,:,nl,mlb))) -----ocean------ ----mountain---- pm T pm T (0) 364.3 236.12 364.3 237.13 [top level] (1) 759.5 231.25 759.5 231.92 (2) 1435.7 229.49 1435.7 228.98 (3) 2461.2 227.34 2461.2 225.49 (4) 3826.8 222.29 3826.8 218.21 (5) 5459.5 218.09 5459.5 213.41 (6) 7201.2 213.01 7201.2 210.53 (7) 8782.1 210.24 8782.1 208.60 (8) 10331.7 207.58 10331.7 207.89 . . . (26) 95769.6 288.61 75612.6 286.83 (27) 97958.9 290.18 77233.2 288.69 (28) 99896.6 291.21 78667.4 290.15 (29) 101562.0 292.29 79935.8 290.50 [bottom (near surface) level]Example 2
Similar to example 1, but calculates the interface pressure levels at each grid point. Let nlevi represent the number of interface levels:
hyai = f->hyai ; read from a file the interface coef hybi = f->hybi ; read from a file ps = f->PS ; surface pressure [Pa] p0 = 100000. ; since ps is in Pa or [ f->P0 ] pi = pres_hybrid_ccm(ps,p0,hyai,hybi) ; pi(ntim,nlevi,nlat,nlon)
Example 3
Similar to example 1, but the first hybrid component is has units of pressure.
p0 = 100000. ; since ps is in Pa or [ f->P0] ap = f->ap ; read from a file the pressure component hyam = ap/p0 ; make dimensionless ; mid-level hybm = f->hyb ; read from a file ps = f->PS ; surface pressure [Pa] pm = pres_hybrid_ccm(ps,p0,hyam,hybm)