Rodin::Eikonal namespace

Module which provides solvers for the Eikonal equation.

The Eikonal equation is a non-linear partial differential equation of the form:

\[ |\nabla u| = F(x) \]

where $ F(x) $ is a speed function. When $ F = 1 $ , the solution represents the distance function.

Fast Marching Method (FMM)

The primary solver is FMM, which implements the Fast Marching Method on unstructured simplicial meshes. The algorithm propagates a wavefront from seed vertices, updating arrival times in causal order using a priority queue. Vertex states during propagation:

StateDescription
FarNot yet visited
ConsideredIn the priority queue, tentative value computed
AcceptedFinalized — arrival time is correct

The FMM specialization for P1 finite elements on local meshes supports:

  • Arbitrary spatial dimension (2D triangular, 3D tetrahedral, surface meshes)
  • User-defined speed functions $ F(x) $
  • Seed interface specification (initial zero-distance vertices)

Typical Usage

P1 Vh(mesh);
GridFunction u(Vh);

// Speed function F(x) = 1 (distance computation)
auto speed = [](const Geometry::Point&) -> Real { return 1.0; };

Eikonal::FMM fmm(u, speed);
fmm.seed(interfaceVertices).solve();

Classes

template<class Solution, class SpeedFunction>
class FMM
Fast marching method for solving the Eikonal equation.
template<class Data, class SpeedFunction>
class FMM<Variational::GridFunction<Variational::P1<Real, Geometry::Mesh<Context::Local>>, Data>, SpeedFunction>
FMM specialization for P1 finite elements on local meshes.

Functions

template<class Solution, class SpeedFunction>
FMM(Solution& u, SpeedFunction&& speed) -> FMM< Solution, SpeedFunction >
Deduction guide for FMM constructor.

Function documentation

template<class Solution, class SpeedFunction>
Rodin::Eikonal::FMM(Solution& u, SpeedFunction&& speed) -> FMM< Solution, SpeedFunction >

Deduction guide for FMM constructor.

Allows template argument deduction when constructing FMM objects.