advect_variable
Use "highly accurate" spherical harmonics to estimate gradients and advect a variable horizontally on a global rectilinear grid.
Available in version 6.3.0 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.
function advect_variable (
u : numeric,
v : numeric,
x : numeric,
gridType [1] : integer,
longName [1] : string,
units [1] : string,
opt : integer
)
return_val [dimsizes(x)] : float or double
Arguments
uArray containing zonal wind components (m/s). The array must be global and ordered south to north.
vArray containing meridional wind components (m/s). Same size and shape as u.
xArray containing a scalar quantity (eg: temperature, specific humidity, etc). Same size and shape as u.
gridTypeGrid type. gridType=0 means gaussian grid; gridType=1 means regular or fixed grid.
longNameA string to be used as the long_name of the advected variable.
unitsA string specifying the units of the returned variable.
optoption.
- opt=0 means return 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 using spherical harmonics to estimate the gradients,.
adv_X = U*(dX/dlon) + V*(dX/dlat)
NOTE: This is a non-linear quantity. Generally, it is not appropriate to use (say)
monthly means quantities. Rather, high-frequency (hourly, 3-hr, 6-hr, daily) quantities
should be used.
This function requires that the grids be global because the "highly accurate" spherical harmonic functions are used to derive the gradients.
To see gradients derived via spherical harmonics and 'simple' centered finite differences, see: gradients.
See Also
advect_variable_cfd, grad_latlon_cfd, grad_latlon
Examples
Example 1: See the example which calculate local vorticity tendency: Example 6.
Example 2 Here the variables u,v (m/s) and T (degK) are ordered south to north and are on a global grid..
f = addfile ("...", "r") u = f->U ; (time,lev,lat,lon); m/s v = f->V T = f->T ; degK gridType = 0 ; global gaussian grid opt_adv = 0 ; return only the advected variable long_name = "advection of temperature" units = "K/s" Tadv = advect_variable(u,v,T,gridType,long_name,units,opt_adv) printVarSummary(Tadv) printMinMax(Tadv, 0)The edited output:
Variable: Tadv
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: 3
_FillValue : -9.96921e+36
long_name : advection of temperature"
units : m-K/s
(0) Tadv: Spherical Harmonics: (m-K/s) : min=-0.00109299 max=0.000927749
(0) ===
If opt_adv=1, then:
T_list = advect_variable(u,v,T,gridType,long_name,units,opt_adv) ; For clarity: explicitly extract the returned elements of the list variable. All meta data is present. Tadv = T_list[0] ; advected quantity Tgrx = T_list[1] ; longitudinal gradient Tgry = T_list[2] ; latitudinal gradient printVarSummary(Tadv) ; advection of temperature printVarSummary(Tgrx) ; longitudinal gradient printVarSummary(Tgry) ; latitudinal gradientIf opt_adv=1, then, additionally, after extraction from the list variable:
Variable: Tgrx
Type: float
Total Size: 151844 bytes
37961 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: [25..50]
lon: [230..300]
Number Of Attributes: 3
units : ?/m
long_name : cfd: zonal gradient
_FillValue : -9.96921e+36
---
Variable: Tgry
Type: float
Total Size: 151844 bytes
37961 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: [25..50]
lon: [230..300]
Number Of Attributes: 3
units : ?/m
long_name : cfd: meridional gradient
_FillValue : -9.96921e+36
---