## 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 | / OmegaThe 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 ) / OmegaThe 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");