 NCL Home > Documentation > Functions > Meteorology

Using centered-finite_differences (cfd) to estimate gradients, advect a variable horizontally on a regional or global rectilinear grid. Available in version 6.6.2 and later.

## Prototype

```load "\$NCARG_ROOT/lib/ncarg/nclscripts/csm/contributed.ncl"  ; This library is automatically loaded
; from NCL V6.2.0 onward.
; No need for user to explicitly load.

u            : numeric,
v            : numeric,
x            : numeric,
lat      [*] : numeric,
lon      [*] : numeric,
cyclic    : logical,
longName  : string,
units     : string,
opt          : integer
)

return_val [dimsizes(x)] :  float or double
```

## Arguments

u

Array containing zonal wind components (m/s). The array must be rectilinear and ordered south to north.

v

Array containing meridional wind components (m/s). Same size and shape as u.

x

Array containing a scalar quantity (eg: temperature, specific humidity, etc). Same size and shape as u.

cyclic

Grid type: cyclic=True means grid is cyclic in longitude; cyclic=False means regional grid.

longName

A string to be used as the long_name of the advected variable.

units

A string specifying the units of the returned variable.

opt

option.

• opt=0 means return the the advection result.
• opt=1 means return the advection result, longitudinal and latitudinal gradients as part of a three-element variable of type list

## Return value

A multi-dimensional array of the same size and shape as x. The output will be double if u, v or x is of type double.

## Description

Calculate the horizontal advection of a quantity on the globe.

```
adv_X =  U*(dX/dlon) + V*(dX/dlat)

```
NOTE: This is a non-linear quantity. It is not appropriate to use (say) monthly mean quantities. Rather, high frequency (eg: hourly, 3-hr, 6-hr, daily) quantities should be used.

To see gradients derived via spherical harmonics and 'simple' centered finite differences, see: gradients.

## Examples

Example 1 Here, the variables u,v (m/s) and T (degK) are on a global rectilinear grid and are ordered south to north.

```
; Units: u*(dT/dlon) + v(dT/dlat)  ->  (m/s)*(K/m) => K/s. If T were degC, the units would be C/s.

f = addfile ("...", "r")
u = f->U           ; (time,lev,lat,lon); (7,17,73,144);  m/s
v = f->V
T = f->T           ; degK

cyclic    = True   ; Grid is global
opt_adv   = 0      ; Return only the advected variable

long_name = "temp advection: Global"
units     = "K/s"

```
The (edited) output is:
```
Type: float
Total Size: 5003712 bytes
1250928 values
Number of Dimensions: 4
Dimensions and sizes:   [time | 7] x [level | 17] x [lat | 73] x [lon | 144]
Coordinates:
time: [1823280..1823424]
level: [1000..10]
lat: [-90..90]
lon: [ 0..357.5]

Number Of Attributes: 4
_FillValue :  -9.96921e+36
long_name :   temp advection: Global
units :       m-K/s

(0)     tCFD: Global (m-K/s) : min=-0.00107328   max=0.000923747
(0)     ===

```
Example 2 Similar to Example 1 but for a regional rectilinear grid. Return the result as a variable of type list containing the advected quantity and the meridional and zonal gradients of the vatiable being advected.
```
; region

latS =  25
latN =  50.
lonL = 230.
lonR = 300.

U = u(:,:,{latS:latN},{lonL:lonR})
V = v(:,:,{latS:latN},{lonL:lonR})
T = t(:,:,{latS:latN},{lonL:lonR})

cyclic  = False            ; Grid is regional
opt_adv = 1                ; Return a variable of type list containing 3 variables

T_list  = advect_variable_cfd(U,V,T, T&lat,T&lon, cyclic \

Tgrx = T_list           ; zonal (longitudinal) gradient of (here) temperature
Tgry = T_list           ; meridional (latitudinal) gradient

printVarSummary(Tgrx)    ; zonal gradient
printVarSummary(Tgry)    ; meridional gradient

```
The (edited) output is:
```
Type: float
Total Size: 151844 bytes
37961 values
Number of Dimensions: 4
Dimensions and sizes:   [time | 7] x [level | 17] x [lat | 11] x [lon | 29]
Coordinates:
time: [1823280..1823424]
level: [1000..10]
lat: [25..50]                       region
lon: [230..300]
Number Of Attributes: 4
_FillValue :  -9.96921e+36
long_name :   tcfd: Region
units :       m-K/s

(0)     tcfd: Region (m-K/s) : min=-0.000617743   max=0.000705905

===

Variable: Tgrx
Type: float
Total Size: 151844 bytes
37961 values
Number of Dimensions: 4
Dimensions and sizes:   [time | 7] x [level | 17] x [lat | 11] x [lon | 29]
Coordinates:
time: [1823280..1823424]
level: [1000..10]
lat: [25..50]
lon: [230..300]
Number Of Attributes: 3
units :       ?/m
long_name :   cfd: zonal gradient
_FillValue :  -9.96921e+36

(0)     cfd: zonal gradient (?/m) : min=-3.29331e-05   max=2.25408e-05

===

Variable: Tgry
Type: float
Total Size: 151844 bytes
37961 values
Number of Dimensions: 4
Dimensions and sizes:   [time | 7] x [level | 17] x [lat | 11] x [lon | 29]
Coordinates:
time: [1823280..1823424]
level: [1000..10]
lat: [25..50]
lon: [230..300]
Number Of Attributes: 3
units :       ?/m
long_name :   cfd: meridional gradient
_FillValue :  -9.96921e+36

(0)     cfd: meridional gradient (?/m) : min=-3.78421e-05   max=2.14391e-05

```