What can I do with it?

Each recipe is a short program from the repository's examples/ directory, with the output it prints. The test suite runs every one of them, so what you read here is what the library does today. Each says what it assumes of your data and what it costs.

Project a function in ten lines

Build a mesh, project a smooth function onto the lowest-order space and read the value at a point.

Use your own mesh, and see what bad input does

Pass vertex and tetrahedron arrays from Gmsh, TetGen or your own code, check them, and find the cell that contains a point.

Read a mesh from Gmsh

Load a .msh file (ASCII, format 2.2 or 4.1, first-order tetrahedra) with parseGmsh and use it like any other mesh. What cannot be used is an error that says why.

The four form degrees

A potential, an edge field, a flux and a density: what each one projects to and where it lives.

A field that is infinite at a vertex

The canonical interpolation refuses it; the stable operator integrates against a weight and stays finite. This is what the bounded operators are for.

Check that the projection commutes with the derivative

The gradient of the projection is the projection of the gradient, so curl-free fields stay curl-free. Two ways to see it.

Keep the values on the boundary

Which operators reproduce boundary values exactly, and which trade that for needing less of the input.

Refine where it matters

Bisect the cells around a feature, keep the mesh conforming, and watch the error near the feature fall.

Time-dependent data

Locate the evaluation points once, then project each new time step cheaply.

Use all the cores

Project one field at many points on worker threads, or compute the coefficients of a bounded operator on a pool. The result is bitwise the same as on one thread.

Higher polynomial degree

Canonical interpolation of any degree, the locally bounded higher-order projection, and the trace-preserving operator above the lowest order.