CCI | R Documentation |
Identifies cyclones (low pressure systems) in a gridded data set using a Calculus Cyclone Identification (CCI) method (EMS04-A-00146, Benestad, R.E.; Sorteberg, A.; Chen, D. 'Storm statistics derived using a calculus-based cyclone identification method', http://www.cosis.net/members/meetings/sessions/oral_programme.php?p_id=110&s_id=1845, European Meteorological Society AC2, Nice, Sept 28, 2004). Storms are identified with longitude, latitude, and date. Also returned are estimates of local minimum pressure, max pressure gradient near storm, max geostrophic and gradient windspeed near storm, and radius of the storm. The storm location is by means of finding where first derivatives of north–south and east–west gradients both are zero. The storm radius is estimated from the points of inflexion along the latitude and longitude lines running trough the centre of the storm.
CCI(
Z,
m = 12,
it = NULL,
is = NULL,
cyclones = TRUE,
greenwich = NULL,
label = NULL,
mindistance = 5e+05,
dpmin = 0.001,
rmin = 10000,
rmax = 2e+06,
nsim = NULL,
progress = TRUE,
fname = "cyclones.rda",
plot = FALSE,
accuracy = NULL,
allow.open = FALSE,
do.track = FALSE,
anomaly = TRUE,
pmax = NULL,
verbose = FALSE,
...
)
Z |
A field object. |
m |
Number of harmonics used for fit to profile (Fourier truncation), which decides the degree of smoothing of the field. Lower values of m result in greater smoothing. |
it |
A list providing time index, e.g. month. |
is |
A list providing space index, lon and/or lat. |
cyclones |
TRUE: identifies cyclones, FALSE: anticyclones. |
greenwich |
a boolean; if TRUE longitudes are transformed to a system starting at the Greenwich line (0-360E); if FALSE longitudes are transformed to a system starting at the date line (180W-180E) |
label |
Label for ID-purposes. |
mindistance |
Min distance between cyclones. Unit: m. |
dpmin |
Min pressure gradient at points of inflection around cyclone. Unit: Pa/m (10hPa/km). |
rmin |
Min average radius of cyclone. Unit: m. |
rmax |
Max average radius of cyclone. Unit: m. |
nsim |
Number of simultaneous cyclones identified and saved ordered according to depth/strength (NULL = no limit). |
progress |
a boolean; if TRUE show progress bar |
fname |
Name of output file. |
plot |
TRUE: show intermediate results as plots. |
accuracy |
Not yet finished. |
allow.open |
a boolean; if TRUE allow (anti)cyclones that are not closed, i.e., that have a point of inflexion on only 3 of 4 sides. |
do.track |
TRUE: tracks the cyclones with the 'track' function, FALSE: no tracking is applied. |
pmax |
Max pressure in center of cyclone. Unit: hPa. |
verbose |
a boolean; if TRUE print out diagnostics. |
... |
additional arguments |
If a north-south or east-west sea level pressure (p) profile can be approximated as
p(\theta) = p_0 + \sum_{i=1}^{N_\theta} [ a_\theta(i)
\cos(\omega_\theta(i) \theta) + b_\theta(i) \sin(\omega_\theta(i) \theta)
]
Then the pressure gradient can be estimated as:
\frac{\partial
\hat{p}(\theta)}{\partial \theta} = \sum_{i=1}^{N_\theta} \omega_\theta(i)[
-\hat{a}_\theta(i) \sin(\omega_\theta(i) \theta) + \hat{b}_\theta(i)
\cos(\omega_\theta(i) \theta)]
The gradient in x and y directions are found after the transform
\frac{d\hat{p}(x)}{dx} = \frac{1}{a \cos(\phi)}
\frac{d\hat{p}(\theta)}{d\theta}
and
\frac{d\hat{p}(y)}{dy} = \frac{1}{a}
\frac{d\hat{p}(\phi)}{d\phi}
(Gill, 1982).
This code is based on the CCI method of the R-package 'cyclones' and has been adapted for 'esd'.
The maximum gradient wind (max.speed) is estimated as described in Fleagle and Businger (1980) p. 163. (eq 4.27).
Reference: Benestad \& Chen (2006) 'The use of a Calculus-based Cyclone Identification method for generating storm statistics', Tellus A, in press. Benestad (2005)
The CCI function returns an 'events' object (a data frame with
spatio-temporal information) that is organized as follows:
as.events(X=data.frame(date,time,lon,lat,pcent,max.dspl,
max.speed,radius,qf),label=label,...
, where date
and time
are
vectors containing the date and time of each cyclone, lon
and
lat
are the longitude and latitude of the cyclone centers (unit:
degrees), pcent
is the pressure at the center of each cyclone (unit:
hPa), max.dpsl
is the maximum pressure gradient associated with each
cyclone (unit: hPa/m), max.speed
is the estimated maximum windspeed
(unit: m/s), radius
is the cyclone radius (unit: km), and qf
is a kind of quality flag (1 = OK, 2 = less spatially precise, identified
after widening the pressure gradient zero-crossings).
K.M. Parding & R.E. Benestad
track.events
# Load sample data to use for example
# ERA5 6-hourly SLP data from the North Atlantic region, 2016-09-15 to 2016-10-15
data(slp.ERA5)
## Cyclone identification
Cstorms <- CCI(slp.ERA5, m=20, label='ERA5', pmax=1000, verbose=TRUE, plot=FALSE)
## Cyclone tracking
Ctracks <- track(Cstorms, plot=FALSE, verbose=TRUE)
## Map with points and lines showing the cyclone centers and trajectories
map(Ctracks, type=c("trajectory","points"), col="blue", new=FALSE)
## Map with only the trajectory and start and end points
map(Ctracks, type=c("trajectory","start","end"), col="red", new=FALSE)
## Map showing the cyclone depth (slp) as a color scale (rd = red scale)
map(Ctracks, param="pcent", type=c('trajectory','start'),
colbar=list(pal="rd", rev=TRUE, breaks=seq(980,1010,5)),
alpha=0.9, new=FALSE)
## Select only the long lasting trajectories...
Ct <- subset(Ctracks, ic=list(param='trackcount', pmin=12) )
map(Ct)
## ...or only the long distance ones...
Ct <- subset(Ctracks, ic=list(param='tracklength', pmin=3000) )
map(Ct, new=FALSE)
## ...or only the deep cyclones
Ct <- subset(Ctracks, ic=list(param='pcent', pmax=980) )
map(Ct, new=FALSE)
## Map of cyclone trajectories with the slp field in background
cb <- list(pal="budrd",breaks=seq(990,1040,5))
map(Ctracks, Y=slp.ERA5, it=as.POSIXct("2016-09-30 19:00"), colbar=cb,
verbose=TRUE, new=FALSE)
## Transform the cyclones into a 'trajectory' object which takes up less space
Ctraj <- as.trajectory(Ctracks)
map(Ctraj, new=FALSE)
print(object.size(Ctracks), units="auto")
print(object.size(Ctraj), units="auto")
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.