| 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 xis 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, thenxandyare taken to be longitude and latitude in degrees, and the earth shape is approximated as a sphere with radius 6371km. The resultantxandyare identical to the provided values, and the resultantcurlis 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 xis 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 indicesjandj+1. (The cell extents depend on the value ofgeographical.) The returnedxandyvalues are the mid-points of the supplied values. Thus, the returnedxandyare shorter than the supplied values by 1 item, and the returnedcurlmatrix dimensions are similarly reduced compared with the dimensions ofuandv.
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)