CCI: Calculus Cyclone identification.

View source: R/CCI.R

CCIR Documentation

Calculus Cyclone identification.

Description

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.

Usage

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,
  ...
)

Arguments

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

Details

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)

Value

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).

Author(s)

K.M. Parding & R.E. Benestad

See Also

track.events

Examples



# 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")


metno/esd documentation built on Sept. 9, 2024, 5:07 a.m.