Norms

Let \(f\) be a bounded function on domain \(\Omega\).

1. L2 norms

For \(f \in L^2(\Omega)\) use normL2():

\|\| f \|\|_{L^2(\Omega)} = \sqrt{\int_\Omega |f|^2}

1.1. Interface

normL2( _range, _expr, _quad, _geomap );

Or the squared norm:

normL2Squared( _range, _expr, _quad, _geomap );

Required parameters:

  • _range = domain of integration

  • _expr = measurable function

Optional parameters:

  • _quad = quadrature to use (default: runtime-chosen order)

  • _geomap = geometric mapping (default: GEOMAP_OPT)

1.2. Example

From doc/manual/laplacian/laplacian.cpp:

double L2error = normL2( _range = elements(mesh), _expr = ( idv(u) - g ) );

2. H1 norms

H1 norm or semi-norm (for \(f \in H^1(\Omega)\)) can be computed with normH1() and normSemiH1().

\begin{aligned} \|\| f \|\|_{H^1(\Omega)} &= \sqrt{\int_\Omega |f|^2 + |\nabla f|^2} \\ |f|_{H^1(\Omega)} &= \sqrt{\int_\Omega |\nabla f|^2} \end{aligned}

2.1. Interface

normH1( _range, _expr, _grad_expr, _quad, _geomap );

Or semi-norm:

normSemiH1( _range, _grad_expr, _quad, _geomap );

Required parameters:

  • _range = domain of integration

  • _expr = measurable function

  • _grad_expr = gradient expression (row vector)

2.2. Example

auto g = sin(2*pi*Px())*cos(2*pi*Py());
auto gradg = 2*pi*cos(2*pi*Px())*cos(2*pi*Py())*oneX()
           - 2*pi*sin(2*pi*Px())*sin(2*pi*Py())*oneY();
// gradg is a column vector; use trans() to provide a row gradient
double normH1_g = normH1( _range = elements(mesh), _expr = g, _grad_expr = trans(gradg) );

3. L-infinity norm

Use normLinf() to approximate the infinity norm by sampling (returns value and coordinates):

\|\| f \|\|_\infty = \sup_{x \in \Omega} |f(x)|

3.1. Interface

normLinf( _range, _expr, _pset, _geomap );

Required parameters:

  • _range = domain of integration

  • _expr = measurable function

  • _pset = set of sampling points (e.g. quadrature points)

Optional parameters:

  • _geomap = geometric mapping (default GEOMAP_OPT)

The returned object provides:

  • value() — maximum value

  • operator()() — synonym to value()

  • arg() — coordinates where the maximum occurs

3.2. Example

auto uMax = normLinf( _range = elements(mesh), _expr = idv(u), _pset = _Q<5>() );
std::cout << "maximum value: " << uMax.value() << std::endl
          << " arg: " << uMax.arg() << std::endl;