Curl
Details
- Curl is also known as rot, rotor, rotational and circulation density.
- Curl[f,x] can be input as ∇xf. The character ∇ can be typed as
del
or \[Del], and the character can be typed as
cross
or \[Cross]. The list of variables x is entered as a subscript. - An empty template ∇ can be entered as
delx
, and
moves the cursor from the subscript to the main body. - All quantities that do not explicitly depend on the variables given are taken to have zero partial derivative.
- In Curl[f,{x1,…,xn}], if f is an array with depth k<n, it must have dimensions {n,…,n}, and the resulting curl is an array with depth n-k-1 of dimensions {n,…,n}.
- If f is a scalar, Curl[f,{x1,…,xn},chart] returns an array of depth n-1 in the orthonormal basis associated with chart.
- In Curl[f,{x1,…,xn},chart], if f is an array, the components of f are interpreted as being in the orthonormal basis associated with chart.
- For coordinate charts on Euclidean space, Curl[f,{x1,…,xn},chart] can be computed by transforming f to Cartesian coordinates, computing the ordinary curl and transforming back to chart. »
- Coordinate charts in the third argument of Curl can be specified as triples {coordsys,metric,dim} in the same way as in the first argument of CoordinateChartData. The short form in which dim is omitted may be used.
- Curl works with SparseArray and structured array objects.
Examples
open all close allBasic Examples (4)
Curl of a vector field in Cartesian coordinates:
Curl[{f[x, y, z], g[x, y, z], h[x, y, z]}, {x, y, z}]Curl of a vector field in cylindrical coordinates:
Curl[{f[r, θ, z], g[r, θ, z], h[r, θ, z]}, {r, θ, z}, "Cylindrical"]Curl[{y, -x}, {x, y}]Use
del
to enter ∇,
for the list of subscripted variables, and
cross
to enter :
Subscript[∇, {x, y, z}]⨯{y, -x, z}Use
delx
to enter the template ∇, fill in the variables, press
, and fill in the function:
Subscript[∇, {x, y, z}]⨯{y, -x, z}Scope (6)
Rotational in polar coordinates:
Curl[{r Sin[θ], -r Cos[θ]}, {r, θ}, "Polar"]In a curvilinear coordinate system, even a vector with constant components may have a nonzero curl:
Curl[{1, 1, 1}, {r, θ, ϕ}, "Spherical"]//ExpandCurl[{{x y, x y^2, x y^3}, {x^2y, x^2y^2, x^2y^3}, {x^3y, x^3y^2, x^3y^3}}, {x, y, z}]Curl specifying metric, coordinate system, and parameters:
Curl[{ψ, 0, ϕ θ}, {ψ, θ, ϕ}, {{"EllipticCylindrical", {a}}, "Euclidean"}]//SimplifyCurl can produce higher-rank arrays:
Curl[u ^ 2 v ^ 2 x ^ 2 y ^ 2 z ^ 2, {u, v, x, y, z}]TensorRank[%]Curl works on curved spaces:
Curl[{f[u, v], g[u, v]}, {u, v}, {"Stereographic", {"Sphere", 1}}]//FullSimplifyApplications (3)
A vector field is called irrotational or conservative if it has zero curl:
v[x_, y_] := {Cos[x] Sin[y], Cos[y] Sin[x]}
Curl[v[x, y], {x, y}]Visually, this means that the vector field's stream lines do not tend to form small closed loops:
StreamPlot[v[x, y], {x, -10, 10}, {y, -10, 10}, PlotRangePadding -> None]Analytically, it means the vector field can be expressed as the gradient of a scalar function. To find this function, parameterize a curve from the origin to an arbitrary point {x,y}:
c[t_] := t{x, y}The scalar function can be found using the line integral of v along the curve:
φ[x_, y_] = Subsuperscript[∫, 0, 1]v@@c[t].c'[t]ⅆtGrad[φ[x, y], {x, y}] == v[x, y]A vector field is called central if it is spherically symmetric and only has a radial component:
v[r_, θ_, φ_] := {f[r], 0, 0}All central vector fields are conservative or curl free:
Curl[v[r, θ, φ], {r, θ, φ}, "Spherical"]This means that v is a gradient field. As v only has radial dependence, the line integral for the potential u reduces to a simple one-dimensional integral:
u[r_, θ_, φ_] = Subsuperscript[∫, 0, r]v[s, θ, φ] . {1, 0, 0}ⅆsGrad[u[r, θ, φ], {r, θ, φ}, "Spherical"] == v[r, θ, φ]A divergence-free vector field can be expressed as the curl of a vector potential:
B[r_, θ_, z_] := {0, 0, 1 / r }Div[B[r, θ, z], {r, θ, z}, "Cylindrical"]To find the vector potential, one must solve the underdetermined system:
A[r_, θ_, z_] := {f[r, θ, z], g[r, θ, z], h[r, θ, z]}Thread[B[r, θ, z] == Curl[A[r, θ, z], {r, θ, z}, "Cylindrical"]]The first two equations are satisfied if
and
are constants, and the third has the obvious solution
:
B[r, θ, z] == Curl[{0, 1, 0}, {r, θ, z}, "Cylindrical"]Properties & Relations (7)
Curl produces arrays that are fully antisymmetric:
cur = Curl[x y z, {x, y, z}]Transpose[cur] == - curTensorContract[cur, {{1, 2}}]The curl of a gradient is zero:
Curl[Grad[f[x, y, z], {x, y, z}], {x, y, z}]Even for non-scalar inputs, the result is zero:
Curl[Grad[{f[x, y, z], g[x, y, z], h[x, y, z]}, {x, y, z}], {x, y, z}]This identity is respected by the Inactive form of Grad:
Curl[Inactive[Grad][f[x, y, z], {x, y, z}], {x, y, z}]Curl[Inactive[Grad][{f[x, y, z], g[x, y, z], h[x, y, z]}, {x, y, z}], {x, y, z}]In dimension
, Curl is only defined for tensors of rank less than
:
Curl[f[x, y], {x, y}]Curl[{f[x, y], g[x, y]}, {x, y}]Curl[{{a[x, y], b[x, y]}, {c[x, y], d[x, y]}}, {x, y}]Curl is proportional to an antisymmetrized Grad followed by a call to HodgeDual:
Curl[f[x, y], {x, y}] == HodgeDual@Symmetrize[Grad[f[x, y], {x, y}], Antisymmetric[All]]The proportionality constant is
, where r is the rank of f:
f = {x ^ 2y, z x y, z ^ 3};r = TensorRank[f]Curl[f, {x, y, z}] == (-1)^r(r + 1)HodgeDual[Symmetrize[Grad[f, {x, y, z}], Antisymmetric[All]]]Compute Curl in a Euclidean coordinate chart c by transforming to and then back from Cartesian coordinates:
TransformedField["Spherical" -> "Cartesian", {f[r, θ, φ], g[r, θ, φ], h[r, θ, φ]}, {r, θ, φ} -> {x, y, z}]//MatrixFormCurl[%, {x, y, z}]//Simplify//MatrixFormFullSimplify[TransformedField["Cartesian" -> "Spherical", %, {x, y, z} -> {r, θ, φ}], r > 0 && 0 < θ < π && -π < φ < π]//MatrixFormThe result is the same as directly computing Curl[f,{x1,…,xn},c]:
% == Curl[{f[r, θ, φ], g[r, θ, φ], h[r, θ, φ]}, {r, θ, φ}, "Spherical"]//FullSimplifyIn dimension
, the curl of a scalar is a tensor of rank
. Thus, for
the result is a rank-2 tensor:
cur = Curl[x ^ 2 + y ^ 2 + z ^ 2, {x, y, z}]Normal[cur]The curl of a tensor of rank
is a scalar:
Curl[cur, {x, y, z}]The double curl of a scalar field is the Laplacian of that scalar. In two dimensions:
Curl[Curl[f[x, y], {x, y}], {x, y}]Laplacian[f[x, y], {x, y}]The same result holds in three dimensions:
Curl[Curl[f[x, y, z], {x, y, z}], {x, y, z}]//CancelLaplacian[f[x, y, z], {x, y, z}]Interactive Examples (1)
View expressions for the curl of a vector function in different coordinate systems:
systems = {{"BipolarCylindrical", {a}}, {"Bispherical", {a}}, "Cartesian", "CircularParabolic", {"Conical", {b, c}}, "Cylindrical", {"EllipticCylindrical", {a}}, {"OblateSpheroidal", {a}}, "ParabolicCylindrical", {"ProlateSpheroidal", {a}}, "Spherical", {"Toroidal", {a}}};Manipulate[Block[{f, varNames, vars, vec},
varNames = CoordinateChartData[{Coordinates, 3}, "StandardCoordinateNames"];vars = ToExpression /@ varNames;
vec = Subscript[f, HoldForm[#]]@@vars& /@ varNames;
Inactive[Curl][vec, vars] == Simplify@Curl[vec, vars, {Coordinates}]], {{Coordinates, "Cartesian"}, systems}]See Also
Grad Div Laplacian CoordinateChartData Cross HodgeDual D DSolve NDSolve NDEigensystem NDEigenvalues
Characters: \[Del]
Tech Notes
Related Guides
Text
Wolfram Research (2012), Curl, Wolfram Language function, https://reference.wolfram.com/language/ref/Curl.html (updated 2014).
CMS
Wolfram Language. 2012. "Curl." Wolfram Language & System Documentation Center. Wolfram Research. Last Modified 2014. https://reference.wolfram.com/language/ref/Curl.html.
APA
Wolfram Language. (2012). Curl. Wolfram Language & System Documentation Center. Retrieved from https://reference.wolfram.com/language/ref/Curl.html
BibTeX
@misc{reference.wolfram_2026_curl, author="Wolfram Research", title="{Curl}", year="2014", howpublished="\url{https://reference.wolfram.com/language/ref/Curl.html}", note=[Accessed: 13-June-2026]}
BibLaTeX
@online{reference.wolfram_2026_curl, organization={Wolfram Research}, title={Curl}, year={2014}, url={https://reference.wolfram.com/language/ref/Curl.html}, note=[Accessed: 13-June-2026]}