 NCL Home > Documentation > Functions > Meteorology

# prcwater_dp

Computes total column precipitable water of the rightmost dimension.

## Prototype

```	function prcwater_dp (
q  : numeric,
p  : numeric
)

return_val  :  numeric
```

## Arguments

q

An array of any dimensionality or a scalar value equal to the specific humidity in kg/kg. The rightmost dimension must be the level dimension.

p

An array of the same size as q or a one-dimensional array with only a level dimension equal to the pressure layer thickness in Pa.

## Return value

An array of the same size as q minus the rightmost dimension. Units are kg/m2.

## Description

Computes total column precipitable water of the rightmost dimension.

Background: This function was one of the original suite of meteorological functions. For historical reasons these original NCL functions operated upon the rightmost dimension for efficiency. Often, this required that the input variables be reordered via dimension reordering. This can be a nuisance and lead to cumbersome code. An adventage of prcwater_dp is that the dp can be one-dimensional [*].

Example 4 shows another approach to calculating total precipitable water.

## Examples

Example 1

Let q and dp be one-dimensional. No dimension reordering is necessary. Units must be converted to those expected. The calculated 'pw' will be a scalar. Attributes are added for completeness.

```  dp = (/ 10., 30. , 50., ..., 100., 50., 50, 50./)   ; hPa [mb]
q  = (/ 20.8,19.4,16.5, ..., 1.7,1.0,0.5,0.1   /)   ; g/kg

dp = dp*100.   ; convert hPa to pascals
q  = q*0.001   ; convert g/kg to kg/kg

pw = prcwater_dp (q,dp)          ; pw [kg/m2]
pw@long_name = "total column precipitable water"
pw@units     = "kg/m2"
```

Example 2

Let q be four-dimensional with named dimensions: q(time,lev,lat,lon). Reorder the array so that lev is the rightmost dimension. The units are g/kg. The must be converted to (kg/kg). Hence the conversion factor. dp is one-dimensional with units of pascals (Pa). pw will be three-dimensional with dimensions time,lat,lon. The same dp is used at all locations. Add meta data (attributes and coordinate information).

```  cf = 0.001                ; convert g/kg to kg/kg
pw = prcwater_dp (q(time|:,lat|:,lon|:,lev|:)*cf, dp)
pw@long_name = "total column precipitable water"
pw@units     = "kg/m2"

copy_VarCoords(q(time,0,lat,lon), pw) ; add coordinate information
printVarSummary(pw)     ; pw(time,lat,lon)
```

Example 3:

Let q(time,lev,lat,lon) with units (kg/kg). dp (Pa) is calculated from the hybrid coefficients using dpres_hybrid_ccm. Different layer thicknesses are used at each grid point. This example uses dimension reordering.

```  q    = f->Q    ; specific humidity [kg/kg];  (time,lev,lat,lon)
;                             (ntim,klev,nlat,mlon)
hyai = f->hyai ; interface hybrid coefficients; klevi= klev+1
hybi = f->hybi ;
ps   = f->PS   ; surface pressure [Pa]      ; (time,lat,lon)
p0   = 100000. ; since ps is in Pa

dp   = dpres_hybrid_ccm(ps,p0,hyai,hybi)   ; dp(ntime,klevi-1,nlat,nlon)
copy_VarCoords(q,dp)    ; dp(time,lev,lat,lon)

pw = prcwater_dp(q(time|:,lat|:,lon|:,lev|:),dp(time|:,lat|:,lon|:,lev|:))
pw@long_name = "total column precipitable water"
pw@units     = "kg/m2"
```
Example 4:

This illustrates another approach to calculating total precipitable water. It illustrates a step-by-step procedure with code documentation using attributes. Dimension reordering is not used.

```
diri = "./"
fili = "camaqua.cam2.h1.1985-09-01-00000.nc"
pthi = diri+fili

q    = f->Q    ; specific humidity [kg/kg]: (time,lev , lat, lon)
;                            (ntim,klev,nlat,mlon) ; dimension sizes
;                            ( 0    1     2    3 ) ; dimension numbers
hyai = f->hyai ; interface hybrid coefficients (klevi = klev+1)
hybi = f->hybi

ps   = f->PS   ; surface pressure [Pa]: (time,lat,lon)
p0   = 100000. ; since ps is in Pa

dp   = dpres_hybrid_ccm(ps,p0,hyai,hybi)    ; (ntim,klev,nlat,mlon): no meta data
; for clarity; add meta data; not necessary
copy_VarCoords(q,dp)                        ; add coordinate info (time,lev,lat,lon)
dp@long_name = "hybrid layer thickness"      ; add attributes
dp@units     = ps@units

qdp  = q*dp                                  ; (ntim,klev,nlat,mlon): no meta data
copy_VarCoords(q,qdp)                       ; for clarity; add meta data; not necessary
qdp@long_name = "q*dp"
;qdp@units     = "(kg/kg) Pa"                 ; since Pa=[kg/(m-s2)]
qdp@units     = "kg/m-s2"                    ; (kg/kg)  [kg/(m-s2)]" => "kg/m-s2"

g   = 9.80665                                ; [m/s2] gravity at 45 deg lat used by the WMO
qdp = qdp/g                                  ; [kg/m-s2]/[m/s2] => kg/m2
qdp@units = "mm"                             ; [kg/m2][1000 mm/m][(1/1000) m3/kg] ==> mm

pw = dim_sum_n_Wrap(qdp, 1)                ; (time,lat,lon)
pw@long_name = "total column precipitable water"
pw@units     = "mm"

printVarSummary(pw)
printMinMax(pw,0)
print("---")

```
The output will be:
```
Variable: pw
Type: float
Total Size: 983040 bytes
245760 values
Number of Dimensions: 3
Dimensions and sizes:	[time | 30] x [lat | 64] x [lon | 128]
Coordinates:
time: [   0..  29]
lat: [-87.86379883923262..87.86379883923262]
lon: [   0..357.1875]
Number Of Attributes: 3
long_name :total column precipitable water
units : mm
sum_op_ncl :	dim_sum_n over dimension(s): lev

(0)	total column precipitable water: min=0.0811549   max=101.736

```