Function Repository Resource:

LaplaceBeltramiOperator

Source Notebook

Compute the Laplace–Beltrami operator of a mesh region

Contributed by: Gabriel St-Pierre-Lemieux (Université d'Ottawa and the National Research Council Canada)

ResourceFunction["LaplaceBeltramiOperator"][mr]

generates the eigenvalues and eigenvectors of the Laplace-Beltrami operator for the mesh region mr.

Details

ResourceFunction["LaplaceBeltramiOperator"] takes the same options as Eigensystem.
If mr is a BoundaryMeshRegion, LaplaceBeltrami first applies TriangulateMesh to it.
The matrices generated by ResourceFunction["LaplaceBeltramiOperator"] can be really large and the solution can take a lot of time to compute. In most applications, only the few first eigenvalues and eigenvectors are useful.

Examples

Basic Examples (4) 

A mesh representing the Space Shuttle:

In[1]:=
shuttle = ExampleData[{"Geometry3D", "SpaceShuttle"}, "MeshRegion"]
Out[1]=

Compute the eigensystem of the Laplace-Beltrami operator:

In[2]:=
{shuttleEigenValue, shuttleEigenVectors} = ResourceFunction["LaplaceBeltramiOperator"][shuttle];

Plot the eigenvalues:

In[3]:=
ListLinePlot[shuttleEigenValue]
Out[3]=

Visualize the eigenvectors on the mesh region:

In[4]:=
With[{shuttlePoints = MeshCoordinates[shuttle], shuttleFaces = MeshCells[shuttle, 2]},
  Partition[Table[
    Graphics3D[{EdgeForm[], GraphicsComplex[shuttlePoints, shuttleFaces, VertexColors -> (ColorData["Rainbow"] /@ Rescale[shuttleEigenVectors[[e]]])]}, Lighting -> "Neutral",
      PlotLabel -> StringForm["Eigenvector ``", e]], {e, 1, 9}
    ], 3]] // GraphicsGrid
Out[4]=

Applications (1) 

The Laplace-Beltrami operator can be used to compute how the heat is diffused on a surface. In this example, the heat kernel signature (HKS) is computed from a heat impulse:

In[5]:=
shuttle = ExampleData[{"Geometry3D", "SpaceShuttle"}, "MeshRegion"];
{shuttleEigenValue, shuttleEigenVectors} = ResourceFunction["LaplaceBeltramiOperator"][shuttle]; 
heatKernelSignature[t_] := Total[Exp[shuttleEigenValue*t]*shuttleEigenVectors*
   shuttleEigenVectors, {2}];
shuttleHKS = heatKernelSignature[0.0001];
Graphics3D[{EdgeForm[], GraphicsComplex[MeshCoordinates[shuttle], MeshCells[shuttle, 2], VertexColors -> (ColorData["Rainbow"] /@ Rescale[shuttleHKS])]}, Lighting -> "Neutral", ViewPoint -> {-1.512, 1.953, 2.313}]
Out[6]=

Publisher

Gabriel Lemieux

Version History

  • 1.0.0 – 13 February 2023

License Information