curl {oce} | R Documentation |
Curl of 2D Vector Field
Description
Calculate the z component of the curl of an x-y vector field.
Usage
curl(u, v, x, y, geographical = FALSE, method = 1)
Arguments
u |
matrix containing the 'x' component of a vector field |
v |
matrix containing the 'y' component of a vector field |
x |
the x values for the matrices, a vector of length equal to the
number of rows in |
y |
the y values for the matrices, a vector of length equal to the
number of cols in |
geographical |
logical value indicating whether |
method |
A number indicating the method to be used to calculate the first-difference approximations to the derivatives. See “Details”. |
Details
The computed component of the curl is defined by \partial
v/\partial x - \partial u/\partial y
and the
estimate is made using first-difference approximations to the derivatives.
Two methods are provided, selected by the value of method
.
For
method=1
, a centred-difference, 5-point stencil is used in the interior of the domain. For example,\partial v/\partial x
is given by the ratio ofv_{i+1,j}-v_{i-1,j}
to the x extent of the grid cell at indexj
. (The cell extents depend on the value ofgeographical
.) Then, the edges are filled in with nearest-neighbour values. Finally, the corners are filled in with the adjacent value along a diagonal. Ifgeographical=TRUE
, thenx
andy
are taken to be longitude and latitude in degrees, and the earth shape is approximated as a sphere with radius 6371km. The resultantx
andy
are identical to the provided values, and the resultantcurl
is a matrix with dimension identical to that ofu
.For
method=2
, each interior cell in the grid is considered individually, with derivatives calculated at the cell center. For example,\partial v/\partial x
is given by the ratio of0.5*(v_{i+1,j}+v_{i+1,j+1}) - 0.5*(v_{i,j}+v_{i,j+1})
to the average of the x extent of the grid cell at indicesj
andj+1
. (The cell extents depend on the value ofgeographical
.) The returnedx
andy
values are the mid-points of the supplied values. Thus, the returnedx
andy
are shorter than the supplied values by 1 item, and the returnedcurl
matrix dimensions are similarly reduced compared with the dimensions ofu
andv
.
Value
A list containing vectors x
and y
, along with matrix
curl
. See “Details” for the lengths and dimensions, for
various values of method
.
Development status.
This function is under active development as of December 2014 and is unlikely to be stabilized until February 2015.
Author(s)
Dan Kelley and Chantelle Layton
See Also
Other things relating to vector calculus:
grad()
Examples
library(oce)
# 1. Shear flow with uniform curl.
x <- 1:4
y <- 1:10
u <- outer(x, y, function(x, y) y / 2)
v <- outer(x, y, function(x, y) -x / 2)
C <- curl(u, v, x, y, FALSE)
# 2. Rankine vortex: constant curl inside circle, zero outside
rankine <- function(x, y) {
r <- sqrt(x^2 + y^2)
theta <- atan2(y, x)
speed <- ifelse(r < 1, 0.5 * r, 0.5 / r)
list(u = -speed * sin(theta), v = speed * cos(theta))
}
x <- seq(-2, 2, length.out = 100)
y <- seq(-2, 2, length.out = 50)
u <- outer(x, y, function(x, y) rankine(x, y)$u)
v <- outer(x, y, function(x, y) rankine(x, y)$v)
C <- curl(u, v, x, y, FALSE)
# plot results
par(mfrow = c(2, 2))
imagep(x, y, u, zlab = "u", asp = 1)
imagep(x, y, v, zlab = "v", asp = 1)
imagep(x, y, C$curl, zlab = "curl", asp = 1)
hist(C$curl, breaks = 100)