<!DOCTYPE html>
<!-- Generated by pkgdown: do not edit by hand --><html lang="en"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"><title>Curl of 2D Vector Field — curl • oce</title><script src="../deps/jquery-3.6.0/jquery-3.6.0.min.js"></script><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"><link href="../deps/bootstrap-5.3.1/bootstrap.min.css" rel="stylesheet"><script src="../deps/bootstrap-5.3.1/bootstrap.bundle.min.js"></script><link href="../deps/font-awesome-6.4.2/css/all.min.css" rel="stylesheet"><link href="../deps/font-awesome-6.4.2/css/v4-shims.min.css" rel="stylesheet"><script src="../deps/headroom-0.11.0/headroom.min.js"></script><script src="../deps/headroom-0.11.0/jQuery.headroom.min.js"></script><script src="../deps/bootstrap-toc-1.0.1/bootstrap-toc.min.js"></script><script src="../deps/clipboard.js-2.0.11/clipboard.min.js"></script><script src="../deps/search-1.0.0/autocomplete.jquery.min.js"></script><script src="../deps/search-1.0.0/fuse.min.js"></script><script src="../deps/search-1.0.0/mark.min.js"></script><!-- pkgdown --><script src="../pkgdown.js"></script><meta property="og:title" content="Curl of 2D Vector Field — curl"><meta name="description" content="Calculate the z component of the curl of an x-y vector field."><meta property="og:description" content="Calculate the z component of the curl of an x-y vector field."></head><body>
    <a href="#main" class="visually-hidden-focusable">Skip to contents</a>


    <nav class="navbar navbar-expand-lg fixed-top bg-light" data-bs-theme="light" aria-label="Site navigation"><div class="container">

    <a class="navbar-brand me-2" href="../index.html">oce</a>

    <small class="nav-text text-muted me-auto" data-bs-toggle="tooltip" data-bs-placement="bottom" title="">1.8-4</small>


    <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbar" aria-controls="navbar" aria-expanded="false" aria-label="Toggle navigation">
      <span class="navbar-toggler-icon"></span>
    </button>

    <div id="navbar" class="collapse navbar-collapse ms-3">
      <ul class="navbar-nav me-auto"><li class="active nav-item"><a class="nav-link" href="../reference/index.html">Reference</a></li>
<li class="nav-item dropdown">
  <button class="nav-link dropdown-toggle" type="button" id="dropdown-articles" data-bs-toggle="dropdown" aria-expanded="false" aria-haspopup="true">Articles</button>
  <ul class="dropdown-menu" aria-labelledby="dropdown-articles"><li><a class="dropdown-item" href="../articles/A_oce.html">1. Introduction to Oce</a></li>
    <li><a class="dropdown-item" href="../articles/B_ctd.html">2. Analysis of CTD data</a></li>
    <li><a class="dropdown-item" href="../articles/C_adp.html">3. Analysis of acoustic-Doppler data</a></li>
    <li><a class="dropdown-item" href="../articles/D_map_projections.html">4. Using map projections</a></li>
    <li><a class="dropdown-item" href="../articles/E_flags.html">5. Dealing with data-quality flags</a></li>
    <li><a class="dropdown-item" href="../articles/F_subclassing.html">6. Subclassing oce objects</a></li>
    <li><a class="dropdown-item" href="../articles/G_altering_defaults.html">7. Altering oce Defaults</a></li>
    <li><a class="dropdown-item" href="../articles/H_tides.html">8. Tidal Analysis</a></li>
  </ul></li>
<li class="nav-item"><a class="nav-link" href="../news/index.html">Changelog</a></li>
      </ul><ul class="navbar-nav"><li class="nav-item"><form class="form-inline" role="search">
 <input class="form-control" type="search" name="search-input" id="search-input" autocomplete="off" aria-label="Search site" placeholder="Search for" data-search-index="../search.json"></form></li>
<li class="nav-item"><a class="external-link nav-link" href="https://github.com/dankelley/oce/" aria-label="GitHub"><span class="fa fab fa-github fa-lg"></span></a></li>
      </ul></div>


  </div>
</nav><div class="container template-reference-topic">
<div class="row">
  <main id="main" class="col-md-9"><div class="page-header">

      <h1>Curl of 2D Vector Field</h1>
      <small class="dont-index">Source: <a href="https://github.com/dankelley/oce/blob/HEAD/R/misc.R" class="external-link"><code>R/misc.R</code></a></small>
      <div class="d-none name"><code>curl.Rd</code></div>
    </div>

    <div class="ref-description section level2">
    <p>Calculate the z component of the curl of an x-y vector field.</p>
    </div>

    <div class="section level2">
    <h2 id="ref-usage">Usage<a class="anchor" aria-label="anchor" href="#ref-usage"></a></h2>
    <div class="sourceCode"><pre class="sourceCode r"><code><span><span class="fu">curl</span><span class="op">(</span><span class="va">u</span>, <span class="va">v</span>, <span class="va">x</span>, <span class="va">y</span>, geographical <span class="op">=</span> <span class="cn">FALSE</span>, method <span class="op">=</span> <span class="fl">1</span><span class="op">)</span></span></code></pre></div>
    </div>

    <div class="section level2">
    <h2 id="arguments">Arguments<a class="anchor" aria-label="anchor" href="#arguments"></a></h2>


<dl><dt id="arg-u">u<a class="anchor" aria-label="anchor" href="#arg-u"></a></dt>
<dd><p>matrix containing the 'x' component of a vector field</p></dd>


<dt id="arg-v">v<a class="anchor" aria-label="anchor" href="#arg-v"></a></dt>
<dd><p>matrix containing the 'y' component of a vector field</p></dd>


<dt id="arg-x">x<a class="anchor" aria-label="anchor" href="#arg-x"></a></dt>
<dd><p>the x values for the matrices, a vector of length equal to the
number of rows in <code>u</code> and <code>v</code>.</p></dd>


<dt id="arg-y">y<a class="anchor" aria-label="anchor" href="#arg-y"></a></dt>
<dd><p>the y values for the matrices, a vector of length equal to the
number of cols in <code>u</code> and <code>v</code>.</p></dd>


<dt id="arg-geographical">geographical<a class="anchor" aria-label="anchor" href="#arg-geographical"></a></dt>
<dd><p>logical value indicating whether <code>x</code> and <code>y</code>
are longitude and latitude, in which case spherical trigonometry is used.</p></dd>


<dt id="arg-method">method<a class="anchor" aria-label="anchor" href="#arg-method"></a></dt>
<dd><p>A number indicating the method to be used to calculate the
first-difference approximations to the derivatives.  See “Details”.</p></dd>

</dl></div>
    <div class="section level2">
    <h2 id="value">Value<a class="anchor" aria-label="anchor" href="#value"></a></h2>
    <p>A list containing vectors <code>x</code> and <code>y</code>, along with matrix
<code>curl</code>.  See “Details” for the lengths and dimensions, for
various values of <code>method</code>.</p>
    </div>
    <div class="section level2">
    <h2 id="details">Details<a class="anchor" aria-label="anchor" href="#details"></a></h2>
    <p>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 <code>method</code>.</p><ul><li><p>For <code>method=1</code>, 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 of \(v_{i+1,j}-v_{i-1,j}\) to the
x extent of the grid cell at index \(j\). (The cell extents depend on
the value of <code>geographical</code>.)  Then, the edges are filled in with
nearest-neighbour values. Finally, the corners are filled in with the
adjacent value along a diagonal.  If <code>geographical=TRUE</code>, then <code>x</code>
and <code>y</code> are taken to be longitude and latitude in degrees, and the
earth shape is approximated as a sphere with radius 6371km.  The resultant
<code>x</code> and <code>y</code> are identical to the provided values, and the
resultant <code>curl</code> is a matrix with dimension identical to that of
<code>u</code>.</p></li>
<li><p>For <code>method=2</code>, 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 of
\(0.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 indices \(j\) and
\(j+1\). (The cell extents depend on the value of
<code>geographical</code>.)  The returned <code>x</code> and <code>y</code> values are the
mid-points of the supplied values. Thus, the returned <code>x</code> and <code>y</code>
are shorter than the supplied values by 1 item, and the returned <code>curl</code>
matrix dimensions are similarly reduced compared with the dimensions of
<code>u</code> and <code>v</code>.</p></li>
</ul></div>
    <div class="section level2">
    <h2 id="see-also">See also<a class="anchor" aria-label="anchor" href="#see-also"></a></h2>
    <div class="dont-index"><p>Other things relating to vector calculus:
<code><a href="grad.html">grad</a>()</code></p></div>
    </div>
    <div class="section level2">
    <h2 id="author">Author<a class="anchor" aria-label="anchor" href="#author"></a></h2>
    <p>Dan Kelley and Chantelle Layton</p>
    </div>

    <div class="section level2">
    <h2 id="ref-examples">Examples<a class="anchor" aria-label="anchor" href="#ref-examples"></a></h2>
    <div class="sourceCode"><pre class="sourceCode r"><code><span class="r-in"><span><span class="kw"><a href="https://rdrr.io/r/base/library.html" class="external-link">library</a></span><span class="op">(</span><span class="va"><a href="https://dankelley.github.io/oce/">oce</a></span><span class="op">)</span></span></span>
<span class="r-in"><span><span class="co"># 1. Shear flow with uniform curl.</span></span></span>
<span class="r-in"><span><span class="va">x</span> <span class="op">&lt;-</span> <span class="fl">1</span><span class="op">:</span><span class="fl">4</span></span></span>
<span class="r-in"><span><span class="va">y</span> <span class="op">&lt;-</span> <span class="fl">1</span><span class="op">:</span><span class="fl">10</span></span></span>
<span class="r-in"><span><span class="va">u</span> <span class="op">&lt;-</span> <span class="fu"><a href="https://rdrr.io/r/base/outer.html" class="external-link">outer</a></span><span class="op">(</span><span class="va">x</span>, <span class="va">y</span>, <span class="kw">function</span><span class="op">(</span><span class="va">x</span>, <span class="va">y</span><span class="op">)</span> <span class="va">y</span> <span class="op">/</span> <span class="fl">2</span><span class="op">)</span></span></span>
<span class="r-in"><span><span class="va">v</span> <span class="op">&lt;-</span> <span class="fu"><a href="https://rdrr.io/r/base/outer.html" class="external-link">outer</a></span><span class="op">(</span><span class="va">x</span>, <span class="va">y</span>, <span class="kw">function</span><span class="op">(</span><span class="va">x</span>, <span class="va">y</span><span class="op">)</span> <span class="op">-</span><span class="va">x</span> <span class="op">/</span> <span class="fl">2</span><span class="op">)</span></span></span>
<span class="r-in"><span><span class="va">C</span> <span class="op">&lt;-</span> <span class="fu">curl</span><span class="op">(</span><span class="va">u</span>, <span class="va">v</span>, <span class="va">x</span>, <span class="va">y</span>, <span class="cn">FALSE</span><span class="op">)</span></span></span>
<span class="r-in"><span></span></span>
<span class="r-in"><span><span class="co"># 2. Rankine vortex: constant curl inside circle, zero outside</span></span></span>
<span class="r-in"><span><span class="va">rankine</span> <span class="op">&lt;-</span> <span class="kw">function</span><span class="op">(</span><span class="va">x</span>, <span class="va">y</span><span class="op">)</span> <span class="op">{</span></span></span>
<span class="r-in"><span>    <span class="va">r</span> <span class="op">&lt;-</span> <span class="fu"><a href="https://rdrr.io/r/base/MathFun.html" class="external-link">sqrt</a></span><span class="op">(</span><span class="va">x</span><span class="op">^</span><span class="fl">2</span> <span class="op">+</span> <span class="va">y</span><span class="op">^</span><span class="fl">2</span><span class="op">)</span></span></span>
<span class="r-in"><span>    <span class="va">theta</span> <span class="op">&lt;-</span> <span class="fu"><a href="https://rdrr.io/r/base/Trig.html" class="external-link">atan2</a></span><span class="op">(</span><span class="va">y</span>, <span class="va">x</span><span class="op">)</span></span></span>
<span class="r-in"><span>    <span class="va">speed</span> <span class="op">&lt;-</span> <span class="fu"><a href="https://rdrr.io/r/base/ifelse.html" class="external-link">ifelse</a></span><span class="op">(</span><span class="va">r</span> <span class="op">&lt;</span> <span class="fl">1</span>, <span class="fl">0.5</span> <span class="op">*</span> <span class="va">r</span>, <span class="fl">0.5</span> <span class="op">/</span> <span class="va">r</span><span class="op">)</span></span></span>
<span class="r-in"><span>    <span class="fu"><a href="https://rdrr.io/r/base/list.html" class="external-link">list</a></span><span class="op">(</span>u <span class="op">=</span> <span class="op">-</span><span class="va">speed</span> <span class="op">*</span> <span class="fu"><a href="https://rdrr.io/r/base/Trig.html" class="external-link">sin</a></span><span class="op">(</span><span class="va">theta</span><span class="op">)</span>, v <span class="op">=</span> <span class="va">speed</span> <span class="op">*</span> <span class="fu"><a href="https://rdrr.io/r/base/Trig.html" class="external-link">cos</a></span><span class="op">(</span><span class="va">theta</span><span class="op">)</span><span class="op">)</span></span></span>
<span class="r-in"><span><span class="op">}</span></span></span>
<span class="r-in"><span><span class="va">x</span> <span class="op">&lt;-</span> <span class="fu"><a href="https://rdrr.io/r/base/seq.html" class="external-link">seq</a></span><span class="op">(</span><span class="op">-</span><span class="fl">2</span>, <span class="fl">2</span>, length.out <span class="op">=</span> <span class="fl">100</span><span class="op">)</span></span></span>
<span class="r-in"><span><span class="va">y</span> <span class="op">&lt;-</span> <span class="fu"><a href="https://rdrr.io/r/base/seq.html" class="external-link">seq</a></span><span class="op">(</span><span class="op">-</span><span class="fl">2</span>, <span class="fl">2</span>, length.out <span class="op">=</span> <span class="fl">50</span><span class="op">)</span></span></span>
<span class="r-in"><span><span class="va">u</span> <span class="op">&lt;-</span> <span class="fu"><a href="https://rdrr.io/r/base/outer.html" class="external-link">outer</a></span><span class="op">(</span><span class="va">x</span>, <span class="va">y</span>, <span class="kw">function</span><span class="op">(</span><span class="va">x</span>, <span class="va">y</span><span class="op">)</span> <span class="fu">rankine</span><span class="op">(</span><span class="va">x</span>, <span class="va">y</span><span class="op">)</span><span class="op">$</span><span class="va">u</span><span class="op">)</span></span></span>
<span class="r-in"><span><span class="va">v</span> <span class="op">&lt;-</span> <span class="fu"><a href="https://rdrr.io/r/base/outer.html" class="external-link">outer</a></span><span class="op">(</span><span class="va">x</span>, <span class="va">y</span>, <span class="kw">function</span><span class="op">(</span><span class="va">x</span>, <span class="va">y</span><span class="op">)</span> <span class="fu">rankine</span><span class="op">(</span><span class="va">x</span>, <span class="va">y</span><span class="op">)</span><span class="op">$</span><span class="va">v</span><span class="op">)</span></span></span>
<span class="r-in"><span><span class="va">C</span> <span class="op">&lt;-</span> <span class="fu">curl</span><span class="op">(</span><span class="va">u</span>, <span class="va">v</span>, <span class="va">x</span>, <span class="va">y</span>, <span class="cn">FALSE</span><span class="op">)</span></span></span>
<span class="r-in"><span><span class="co"># plot results</span></span></span>
<span class="r-in"><span><span class="fu"><a href="https://rdrr.io/r/graphics/par.html" class="external-link">par</a></span><span class="op">(</span>mfrow <span class="op">=</span> <span class="fu"><a href="https://rdrr.io/r/base/c.html" class="external-link">c</a></span><span class="op">(</span><span class="fl">2</span>, <span class="fl">2</span><span class="op">)</span><span class="op">)</span></span></span>
<span class="r-in"><span><span class="fu"><a href="imagep.html">imagep</a></span><span class="op">(</span><span class="va">x</span>, <span class="va">y</span>, <span class="va">u</span>, zlab <span class="op">=</span> <span class="st">"u"</span>, asp <span class="op">=</span> <span class="fl">1</span><span class="op">)</span></span></span>
<span class="r-in"><span><span class="fu"><a href="imagep.html">imagep</a></span><span class="op">(</span><span class="va">x</span>, <span class="va">y</span>, <span class="va">v</span>, zlab <span class="op">=</span> <span class="st">"v"</span>, asp <span class="op">=</span> <span class="fl">1</span><span class="op">)</span></span></span>
<span class="r-in"><span><span class="fu"><a href="imagep.html">imagep</a></span><span class="op">(</span><span class="va">x</span>, <span class="va">y</span>, <span class="va">C</span><span class="op">$</span><span class="va">curl</span>, zlab <span class="op">=</span> <span class="st">"curl"</span>, asp <span class="op">=</span> <span class="fl">1</span><span class="op">)</span></span></span>
<span class="r-in"><span><span class="fu"><a href="https://rdrr.io/r/graphics/hist.html" class="external-link">hist</a></span><span class="op">(</span><span class="va">C</span><span class="op">$</span><span class="va">curl</span>, breaks <span class="op">=</span> <span class="fl">100</span><span class="op">)</span></span></span>
<span class="r-plt img"><img src="curl-1.png" alt="" width="700" height="700"></span>
</code></pre></div>
    </div>
  </main><aside class="col-md-3"><nav id="toc" aria-label="Table of contents"><h2>On this page</h2>
    </nav></aside></div>


    <footer><div class="pkgdown-footer-left">
  <p>Developed by Dan Kelley, Clark Richards.</p>
</div>

<div class="pkgdown-footer-right">
  <p>Site built with <a href="https://pkgdown.r-lib.org/" class="external-link">pkgdown</a> 2.1.0.9000.</p>
</div>

    </footer></div>





  </body></html>

