---
name: "s_curl"
section: "3rheolef"
platform: "linux"
package: "librheolef-dev"
version: "6.1-2.1"
release: "Debian 7 (Wheezy)"
platforms: ["linux"]
url: "https://new.carta.tech/s_curl"
---

# s\_curl(3rheolef)

## NAME

**s\_curl** -- curl-like operator for the Stokes stream function computation

## SYNOPSIS

```
      form(const space M, const space& V, "s_curl");

```

## DESCRIPTION

Assembly the form associated to the s\_curl operator on a finite element space **V**:

```
                /
                |
      b(xi,u) = |  u.s_curl(xi) dx
                |
                / Omega

```

The M and V space may be a either **P1** or **P2** finite element space. The M space is scalar-valued while the V is vector-valued. See also form(2) and space(2).

For cartesian coordinate systems, this form coincide with the usual "curl" one (see curl(3)). In the axisymmetric case:

```
                /
                | (d xi      d xi   )
      b(xi,u) = | (---- ur - ---- uz) r dr dz
                | (d z       d r    )
                / Omega

```

The b form is denoted as "s\_curl", for Stokes stream function computation (see s\_grad\_grad(3)) as it is closely related to the "curl" operator (see curl(3)), but differs by the r and 1/r factors, as:

```
                   (       d (r xi)     d xi )
        curl(xi) = ( (1/r) -------- ; - -----)
                   (         d r        d z  )

```

while

```
                   ( d xi       d xi )
      s_curl(xi) = ( ----  ;  - ---- )
                   ( d r        d z  )

```

Notice also that the differentiation is performed on the xi variable here: b(xi,u)=(s\_curl(xi),u) while the "curl" form brings the differentiation on the u vector-valued variable: (curl(u),xi), i.e. a transpose formulation.

## ORIENTATION AND SIGN FIX

The (r,theta,z) coordinate system has positive orientation, thus (z,r,theta) and (z,r) are positive also. But (r,z,theta) and (r,z) are negative : the sign of s\_curl is then inverted to obtain the same result as if (z,r) was used.

## EXAMPLE

The following piece of code build the form associated to the **P1** approximation:

```
        geo g("square");
        space M(g, "P1");
        space V(g, "P1", "vector");
        form a(M, V, "s_curl");

```

## SEE ALSO

form(2), space(2), curl(3), s\_grad\_grad(3), curl(3)
