(Original author Keenan Crane)
Originally we set out to develop exterior calculus. The objects we’ve looked at so far — \(k\)-forms, the wedge product \(\wedge\) and the Hodge star \(\star\) — actually describe a more general structure called an exterior algebra. To turn our algebra into a calculus, we also need to know how quantities change, as well as how to measure quantities. In other words, we need some tools for differentiation and integration. Let’s start with differentiation.
In our discussion of surfaces we briefly looked at the differential \(df\) of a surface \(f: M \rightarrow \mathbb{R}^3\), which tells us something about the way tangent vectors get “stretched out” as we move from the domain \(M\) to a curved surface sitting in \(\mathbb{R}^3\). More generally \(d\) is called the exterior derivative and is responsible for building up many of the differential operators in exterior calculus. The basic idea is that \(d\) tells us how quickly a \(k\)-form changes along every possible direction. But how exactly is it defined? So far we’ve seen only a high-level geometric description.
Div, Grad, and Curl
Before jumping into the exterior derivative, it’s worth reviewing what the basic vector derivatives \(\mathrm{div}\), \(\mathrm{grad}\), and \(\mathrm{curl}\) do, and more importantly, what they look like. The key player here is the operator \(\nabla\) (pronounced “nabla”) which can be expressed in coordinates as the vector of all partial derivatives:
\[ \nabla := \left( \frac{\partial}{\partial x^1}, \ldots, \frac{\partial}{\partial x^n} \right). \]
For instance, applying \(\nabla\) to a scalar function \(\phi: \mathbb{R}^n \rightarrow \mathbb{R}\) yields the gradient
\[ \nabla\phi = \left( \frac{\partial \phi}{\partial x^1}, \ldots, \frac{\partial \phi}{\partial x^n} \right), \]
which can be visualized as the direction of steepest ascent on some terrain:
We can also apply \(\nabla\) to a vector field \(X\) in two different ways. The dot product gives us the divergence
\[ \nabla \cdot X = \frac{\partial X^1}{\partial x^1} + \cdots + \frac{\partial X^n}{\partial x^n} \]
which measures how quickly the vector field is “spreading out”, and on \(\mathbb{R}^3\) the cross product gives us the curl
\[ \nabla \times X = \left( \frac{\partial X_3}{\partial x^2} – \frac{\partial X_2}{\partial x^3}, \frac{\partial X_1}{\partial x^3} – \frac{\partial X_3}{\partial x^1}, \frac{\partial X_2}{\partial x^1} – \frac{\partial X_1}{\partial x^2} \right), \]
which indicates how much a vector field is “spinning around.” For instance, here’s a pair of vector fields with a lot of divergence and a lot of curl, respectively:
(Note that in this case one field is just a 90-degree rotation of the other!) On a typical day it’s a lot more useful to think of \(\mathrm{div}\), \(\mathrm{grad}\) and \(\mathrm{curl}\) in terms of these kinds of pictures rather than the ugly expressions above.
Think Differential
Not surprisingly, we can express similar notions using exterior calculus. However, these notions will be a bit easier to generalize (for instance, what does “curl” mean for a vector field in \(\mathbb{R}^4\), where no cross product is defined?). Let’s first take a look at the exterior derivative of 0-forms (i.e., functions), which is often just called the differential. To keep things simple, we’ll start with real-valued functions \(\phi: \mathbb{R}^n \rightarrow \mathbb{R}\). In coordinates, the differential is defined as
\[ d\phi := \frac{\partial \phi}{\partial x^1} dx^1 + \cdots + \frac{\partial \phi}{\partial x^n} dx^n. \]
It’s important to note that the terms \(\frac{\partial \phi}{\partial x^i}\) actually correspond to partial derivatives of our function \(\phi\), whereas the terms \(dx^i\) simply denote an orthonormal basis for \(\mathbb{R}^n\). In other words, you can think of \(d\phi\) as just a list of all the partial derivatives of \(\phi\). Of course, this object looks a lot like the gradient \(\nabla \phi\) we saw just a moment ago. And indeed the two are closely related, except for the fact that \(\nabla \phi\) is a vector field and \(d\phi\) is a 1-form. More precisely,
\[ \nabla \phi = (d\phi)^\sharp. \]
Directional Derivatives
Another way to investigate the behavior of the exterior derivative is to see what happens when we stick a vector \(u\) into the 1-form \(df\). In coordinates we get something that looks like a dot product between the gradient of \(f\) and the vector \(u\):
\[ df(u) = \frac{\partial f}{\partial x^1} u^1 + \cdots + \frac{\partial f}{\partial x^n} u^n. \]
For instance, in \(\mathbb{R}^2\) we could stick in the unit vector \(u = (1,0)\) to get the partial derivative \(\frac{\partial f}{\partial x^1}\) along the first coordinate axis:
(Compare this picture to the picture of the gradient we saw above.) In general, \(df(u)\) represents the directional derivative of \(f\) along the direction \(u\). In other words, it tells us how quickly \(f\) changes if we take a short walk in the direction \(u\). Returning again to vector calculus notation, we have
\[ df(u) = u \cdot \nabla f. \]
Properties of the Exterior Derivative
How do derivatives of arbitrary \(k\)-forms behave? For one thing, we expect \(d\) to be linear — after all, a derivative is just the limit of a difference, and differences are certainly linear! What about the derivative of a wedge of two forms? Harkening back to good old-fashioned calculus, here’s a picture that explains the typical product rule \(\frac{\partial}{\partial x}(f(x)g(x)) = f'(x)g(x) + f(x)g'(x) \):
The dark region represents the value of \(fg\) at \(x\); the light blue region represents the change in this value as we move \(x\) some small distance \(h\). As \(h\) gets smaller and smaller, the contribution of the upper-right quadrant becomes negligible and we can write the derivative as the change in \(f\) times \(g\) plus the change in \(g\) times \(f\). (Can you make this argument more rigorous?) Since a \(k\)-form also measures a (signed) volume, this intuition also carries over to the exterior derivative of a wedge product. In particular, if \(\alpha\) is a \(k\)-form then \(d\) obeys the rule
\[ d(\alpha \wedge \beta) = d\alpha \wedge \beta + (-1)^{k}\alpha \wedge d\beta. \]
which says that the rate of change of the overall volume can be expressed in terms of changes in the constituent volumes, exactly as in the picture above.
Exterior Derivative of 1-Forms
To be a little more concrete, let’s see what happens when we differentiate a 1-form on \(\mathbb{R}^3\). Working things out in coordinates turns out to be a total mess, but in the end you may be pleasantly surprised with the simplicity of the outcome! (Later on we’ll see that these ideas can also be expressed quite nicely without coordinates using Stokes’ theorem, which paves the way to differentiation in the discrete setting.) Applying the linearity of \(d\), we have
\[
\begin{array}{rcl}
d\alpha
&=& d(\alpha_1 dx^1 + \alpha_2 dx^2 + \alpha_3 dx^3) \\
&=& d(\alpha_1 dx^1) + d(\alpha_2 dx^2) + d(\alpha_3 dx^3).
\end{array}
\]
Each term \(\alpha_j dx^j\) can really be thought of a wedge product \(\alpha_j \wedge dx^j\) between a 0-form \(\alpha_j\) and the corresponding basis 1-form \(dx^j\). Applying the exterior derivative to one of these terms we get
\[ d(\alpha_j \wedge dx^j) = (d\alpha_j) \wedge dx^j + \alpha_j \wedge \underbrace{(ddx^j)}_{=0} = \frac{\partial \alpha_j}{\partial x^i} dx^i \wedge dx^j. \]
To keep things short we used the Einstein summation convention here, but let’s really write out all the terms:
\[
\begin{array}{rcccccc}
d\alpha &=& \frac{\partial \alpha_1}{\partial x^1} dx^1 \wedge dx^1 &+& \frac{\partial \alpha_1}{\partial x^2} dx^2 \wedge dx^1 &+& \frac{\partial \alpha_1}{\partial x^3} dx^3 \wedge dx^1 \\
&& \frac{\partial \alpha_2}{\partial x^1} dx^1 \wedge dx^2 &+& \frac{\partial \alpha_2}{\partial x^2} dx^2 \wedge dx^2 &+& \frac{\partial \alpha_2}{\partial x^3} dx^3 \wedge dx^2 \\
&& \frac{\partial \alpha_3}{\partial x^1} dx^1 \wedge dx^3 &+& \frac{\partial \alpha_3}{\partial x^2} dx^2 \wedge dx^3 &+& \frac{\partial \alpha_3}{\partial x^3} dx^3 \wedge dx^3. \\
\end{array}
\]
Using the fact that \(\alpha \wedge \beta = -\beta \wedge \alpha\), we get a much simpler expression
\[
\begin{array}{rcl}
d\alpha &=& ( \frac{\partial \alpha_3}{\partial x^2} – \frac{\partial \alpha_2}{\partial x^3} ) dx^2 \wedge dx^3 \\
&& ( \frac{\partial \alpha_1}{\partial x^3} – \frac{\partial \alpha_3}{\partial x^1} ) dx^3 \wedge dx^1 \\
&& ( \frac{\partial \alpha_2}{\partial x^1} – \frac{\partial \alpha_1}{\partial x^2} ) dx^1 \wedge dx^2. \\
\end{array}
\]
Does this expression look familiar? If you look again at our review of vector derivatives, you’ll recognize that \(d\alpha\) basically looks like the curl of \(\alpha^\sharp\), except that it’s expressed as a 2-form instead of a vector field. Also remember (from our discussion of Hodge duality) that a 2-form and a 1-form are not so different here — geometrically they both specify some direction in \(\mathbb{R}^3\). Therefore, we can express the curl of any vector field \(X\) as
\[ \nabla \times X = \left( \star d X^\flat \right)^\sharp. \]
It’s worth stepping through the sequence of operations here to check that everything makes sense: \(\flat\) converts the vector field \(X\) into a 1-form \(X^\flat\); \(d\) computes something that looks like the curl, but expressed as a 2-form \(dX^\flat\); \(\star\) turns this 2-form into a 1-form \(\star d X^\flat\); and finally \(\sharp\) converts this 1-form back into the vector field \(\left( \star d X^\flat \right)^\sharp\). The take-home message here, though, is that the exterior derivative of a 1-form looks like the curl of a vector field.
So far we know how to express the gradient and the curl using \(d\). What about our other favorite vector derivative, the divergence? Instead of grinding through another tedious derivation, let’s make a simple geometric observation: in \(\mathbb{R}^2\) at least, we can determine the divergence of a vector field by rotating it by 90 degrees and computing its curl (consider the example we saw earlier). Moreover, in \(\mathbb{R}^2\) the Hodge star \(\star\) represents a rotation by 90 degrees, since it identifies any line with the direction orthogonal to that line:
Therefore, we might suspect that divergence can be computed by first applying the Hodge star, then applying the exterior derivative:
\[ \nabla \cdot X = \star d \star X^\flat. \]
The leftmost Hodge star accounts for the fact that \(d \star X^\flat\) is an \(n\)-form instead of a 0-form — in vector calculus divergence is viewed as a scalar quantity. Does this definition really work? Let’s give it a try in coordinates on \(\mathbb{R}^3\). First, we have
\[
\begin{array}{rcl} \star X^\flat &=& \star( X_1 dx^1 + X_2 dx^2 + X_3 dx^3 ) \\
&=& X_1 dx^2 \wedge dx^3 + X_2 dx^3 \wedge dx^1 + X_3 dx^1 \wedge dx^2.
\end{array}
\]
Differentiating we get
\[
\begin{array}{rcl} d \star X^\flat &=& \frac{\partial X_1}{\partial x^1} dx^1 \wedge dx^2 \wedge dx^3 + \\
&& \frac{\partial X_2}{\partial x^2} dx^2 \wedge dx^3 \wedge dx^1 + \\
&& \frac{\partial X_3}{\partial x^3} dx^3 \wedge dx^1 \wedge dx^2, \\
\end{array}
\]
but of course we can rearrange these wedge products to simply
\[ d \star X^\flat = \left( \frac{\partial X_1}{\partial x^1} + \frac{\partial X_2}{\partial x^2} + \frac{\partial X_3}{\partial x^3} \right) dx^1 \wedge dx^2 \wedge dx^3. \]
A final application of the Hodge star gives us the divergence
\[ \star d \star X^\flat = \frac{\partial X_1}{\partial x^1} + \frac{\partial X_2}{\partial x^2} + \frac{\partial X_3}{\partial x^3} \]
as desired.
In summary, for any scalar field \(\phi\) and vector field \(X\) we have
\[
\begin{array}{rcl}
\nabla \phi &=& (d\phi)^\sharp \\
\nabla \times X &=& \left( \star d X^\flat \right)^\sharp \\
\nabla \cdot X &=& \star d \star X^\flat
\end{array}
\]
One cute thing to notice here is that (in \(\mathbb{R}^3\)) \(\mathrm{grad}\), \(\mathrm{curl}\), and \(\mathrm{div}\) are more or less just \(d\) applied to a \(0-\), \(1-\) and \(2-\) form, respectively.
The Laplacian
Another key differential operator from vector calculus is the scalar Laplacian which (confusingly!) is often denoted by \(\Delta\) or \(\nabla^2\), and is defined as
\[ \Delta := \nabla \cdot \nabla, \]
i.e., the divergence of the gradient. Although the Laplacian may seem like just yet another in a long list of derivatives, it deserves your utmost respect: the Laplacian is central to the most fundamental of physical laws (any diffusion process and all forms of wave propagation, including the Schrödinger equation); its eigenvalues capture almost everything there is to know about a given piece of geometry (can you hear the shape of a drum?). Heavy tomes and entire lives have been devoted to the Laplacian, and in the discrete setting we’ll see that this one simple operator can be applied to a diverse array of tasks (surface parameterization, surface smoothing, vector field design and decomposition, distance computation, fluid simulation… you name it, we got it!).
Fortunately, now that we know how to write \(\mathrm{div}\), \(\mathrm{grad}\) and \(\mathrm{curl}\) using exterior calculus, expressing the scalar Laplacian is straightforward: \(\Delta = \star d \star d\). More generally, the \(k\)-form Laplacian is given by
\[ \Delta := \star d \star d + d \star d \star. \]
The name “Laplace-Beltrami” is used merely to indicate that the domain may have some amount of curvature (encapsulated by the Hodge star). Some people like to define the operator \(\delta := \star d \star\), called the codifferential, and write the Laplacian as \(\Delta = \delta d + d \delta\).
One question you might ask is: why is the Laplacian for 0-forms different from the general \(k\)-form Laplacian? Actually, it’s not — consider what happens when we apply the term \(d \star d \star\) to a 0-form \(\phi\): \(\star \phi\) is an \(n\)-form, and so \(d \star \phi\) must be an \((n+1)\)-form. But there are no \((n+1)\)-forms on an \(n\)-dimensional space! So this term is often omitted when writing the scalar Laplacian.