# Nonlinear Form Integrators

$ \newcommand{\cross}{\times} \newcommand{\inner}{\cdot} \newcommand{\div}{\nabla\cdot} \newcommand{\curl}{\nabla\times} \newcommand{\grad}{\nabla} \newcommand{\ddx}[1]{\frac{d#1}{dx}} $

Nonlinear form integrators are used to express the local action of a general nonlinear finite element operator. Depending on the implementation they can also provide the capability to assemble the local gradient operator or to compute the local energy.

## TMOP integrator for variational minimization

The `TMOP_Integrator`

is used for mesh optimization by node movement.
It represents the nonlinear objective function that arises in the Target-Matrix
Optimization Paradigm (TMOP), as described in
this publication.
The local action and gradient, for an element $E_p$ in physical space, of the
integrator compute

\begin{equation} F(x) = \int_{E_t} \frac{\partial \mu(J_{pt})}{\partial x} ~ d x_t \,, \quad \partial F(x) = \int_{E_t} \frac{\partial^2 \mu(J_{pt})}{\partial{x^2}} ~ d x_t \,, \end{equation}

where $x$ is the vector of positions for the mesh nodes of $E_p$;
$x_t$ are positions in the target element $E_t$, which corresponds to $E_p$
(see class `TargetConstructor`

), and
$J_{pt}$ is the Jacobian of the transformation from $E_t$ to $E_p$;
and $\mu$ is a mesh quality metric that is evaluated at quadrature points
(see class `TMOP_QualityMetric`

).
The local energy of the integrator represents the integral of $\mu$ over the
target element.

## Convective acceleration

The `VectorConvectionNLFIntegrator`

implements the local action of $(u \cdot
\grad u, v)$, where $u, v \in H_1^d$ for $d = 2, 3$. This term arises e.g. in
the weak form of the Navier-Stokes equations. It also allows to assemble the
local gradient which is represented by the linearization of the local action
around $\delta u$. Using the definition of the Gateaux derivative for functions

\begin{equation} F'(u, \delta u) = \lim_{\epsilon \to \infty} \frac{F(u + \epsilon \delta u) - F(u)}{\epsilon} \end{equation}

with $F(u) = u \cdot \grad u$, we arrive at

\begin{equation} F'(u, \delta u) = u \cdot \grad \delta u + \delta u \cdot \grad u. \end{equation}

The local gradient $(F'(u, \delta u), v)$ can be computed by calling the
`GetGradient`

method of `NonlinearForm`

.