grade one selection

Curl of Curl. Tensor and GA expansion, and GA equivalent identity.

November 12, 2025 math and physics play , , , , , , , , , , ,

[Click here for a PDF version of this post]

In this blog post, we will expand \(\spacegrad \cross \lr{ \spacegrad \cross \Bf } = -\spacegrad^2 \Bf + \spacegrad \lr{ \spacegrad \cdot \Bf } \) two different ways, using tensor index gymnastics and using geometric algebra.

The tensor way.

To expand the curl using a tensor expansion, let’s first expand the cross product in coordinates
\begin{equation}\label{eqn:curlcurl2:20}
\begin{aligned}
\Ba \cross \Bb
&=
\lr{ \Be_r \cross \Be_s } a_r b_s \\
&=
\Be_t \cdot \lr{ \Be_r \cross \Be_s } \Be_t a_r b_s \\
&=
\epsilon_{rst} a_r b_s \Be_t.
\end{aligned}
\end{equation}
Here \( \epsilon_{rst} \) is the completely antisymmetric (Levi-Civita) tensor, and allows us to compactly express the geometrical nature of the triple product.

We can then expand the curl of the curl by applying this twice
\begin{equation}\label{eqn:curlcurl2:40}
\begin{aligned}
\spacegrad \cross \lr{ \spacegrad \cross \Bf }
&=
\epsilon_{rst} \partial_r \lr{ \spacegrad \cross \Bf }_s \Be_t \\
&=
\epsilon_{rst} \partial_r \lr{ \epsilon_{uvw} \partial_u f_v \Be_w }_s \Be_t \\
&=
\epsilon_{rst} \partial_r \epsilon_{uvs} \partial_u f_v \Be_t.
\end{aligned}
\end{equation}

It turns out that there’s a nice identity to reduce the single index contraction of a pair of Levi-Civita tensors.
\begin{equation}\label{eqn:curlcurl2:60}
\epsilon_{abt} \epsilon_{cdt} = \delta_{ac} \delta_{bd} – \delta_{ad} \delta_{bc}.
\end{equation}
To show this, consider the \( t = 1 \) term of this sum \( \epsilon_{ab1} \epsilon_{cd1} \). This is non-zero only for \( a,b,c,d \in \setlr{2,3} \). If \( a,b = c,d \), this is one, and if \( a,b = d,c \), this is minus one. We may summarize that as
\begin{equation}\label{eqn:curlcurl2:80}
\epsilon_{ab1} \epsilon_{cd1} = \delta_{ac} \delta_{bd} – \delta_{ad} \delta_{bc},
\end{equation}
but this holds for \( t = 2,3 \) too, so \ref{eqn:curlcurl2:60} holds generally.

We may now contract the tensors to find
\begin{equation}\label{eqn:curlcurl2:100}
\begin{aligned}
\spacegrad \cross \lr{ \spacegrad \cross \Bf }
&=
\epsilon_{rst} \epsilon_{uvs} \Be_t \partial_r \partial_u f_v \\
&=
-\epsilon_{rts} \epsilon_{uvs} \Be_t \partial_r \partial_u f_v \\
&=
-\lr{ \delta_{ru} \delta_{tv} – \delta_{rv} \delta_{tu} } \Be_t \partial_r \partial_u f_v \\
&=
– \Be_v \partial_u \partial_u f_v
+ \Be_u \partial_v \partial_u f_v \\
&=
-\spacegrad^2 \Bf + \spacegrad \lr{ \spacegrad \cdot \Bf }.
\end{aligned}
\end{equation}

Using geometric algebra.

Now let’s pull out the GA toolbox. We start with introducing a no-op grade-1 selection, and using the identity \( \Ba \cross \Bb = -I \lr{ \Ba \wedge \Bb } \)
\begin{equation}\label{eqn:curlcurl2:120}
\begin{aligned}
\spacegrad \cross \lr{ \spacegrad \cross \Bf }
&=
\gpgradeone{
\spacegrad \cross \lr{ \spacegrad \cross \Bf }
} \\
&=
\gpgradeone{
-I \lr{ \spacegrad \wedge \lr{ \spacegrad \cross \Bf } }
} \\
\end{aligned}
\end{equation}
We can now expand \( \Ba \wedge \Bb = \Ba \Bb – \Ba \cdot \Bb \)
\begin{equation}\label{eqn:curlcurl2:140}
\spacegrad \cross \lr{ \spacegrad \cross \Bf }
=
\gpgradeone{
-I \spacegrad \lr{ \spacegrad \cross \Bf }
+I \lr{ \spacegrad \cdot \lr{ \spacegrad \cross \Bf } }
}
\end{equation}
but that dot product is a scalar, leaving just a pseudoscalar, which has a zero grade-1 selection. This leaves
\begin{equation}\label{eqn:curlcurl2:160}
\begin{aligned}
\spacegrad \cross \lr{ \spacegrad \cross \Bf }
&=
\gpgradeone{
-I \spacegrad \lr{ -I \lr{ \spacegrad \wedge \Bf } }
} \\
&=
-\gpgradeone{
\spacegrad \lr{ \spacegrad \wedge \Bf }
}.
\end{aligned}
\end{equation}
We use \( \Ba \wedge \Bb = \Ba \Bb – \Ba \cdot \Bb \) once more
\begin{equation}\label{eqn:curlcurl2:180}
\begin{aligned}
\spacegrad \cross \lr{ \spacegrad \cross \Bf }
&=
-\gpgradeone{
\spacegrad \lr{ \spacegrad \Bf }
-\spacegrad \lr{ \spacegrad \cdot \Bf }
}
\\
&=
-\spacegrad^2 \Bf
+\spacegrad \lr{ \spacegrad \cdot \Bf }.
\end{aligned}
\end{equation}

GA identity.

It’s also worth noting that there’s a natural GA formulation of the curl of a curl. From the Laplacian and divergence relationship that we ended up with, we need only factor out the gradient
\begin{equation}\label{eqn:curlcurl2:200}
\begin{aligned}
\spacegrad \cross \lr{ \spacegrad \cross \Bf }
&=
-\spacegrad^2 \Bf +\spacegrad \lr{ \spacegrad \cdot \Bf } \\
&=
-\spacegrad \lr{ \spacegrad \Bf – \spacegrad \cdot \Bf } \\
&=
-\spacegrad \lr{ \spacegrad \wedge \Bf }.
\end{aligned}
\end{equation}
Because \( \spacegrad \wedge \lr{ \spacegrad \wedge \Bf } = 0 \), we may also write this as
\begin{equation}\label{eqn:curlcurl2:220}
\boxed{
\spacegrad \cdot \lr{ \spacegrad \wedge \Bf } = -\spacegrad \cross \lr{ \spacegrad \cross \Bf }.
}
\end{equation}
From the GA LHS, we see by inspection that
\begin{equation}\label{eqn:curlcurl2:240}
\spacegrad \cdot \lr{ \spacegrad \wedge \Bf } = \spacegrad^2 \Bf – \spacegrad \lr{ \spacegrad \cdot \Bf }.
\end{equation}

Verifying the GA form for the symmetric and antisymmetric components of the different rate of strain.

March 8, 2022 math and physics play , , , , , , , ,

[If mathjax doesn’t display properly for you, click here for a PDF of this post]

We found geometric algebra representations for the symmetric and antisymmetric components for a gradient-vector direct product. In particular, given
\begin{equation}\label{eqn:tensorComponents:20}
d\Bv = d\Bx \cdot \lr{ \spacegrad \otimes \Bv }
\end{equation}
we found
\begin{equation}\label{eqn:tensorComponents:40}
\begin{aligned}
d\Bx \cdot \Bd
&=
\inv{2} d\Bx \cdot \lr{
\spacegrad \otimes \Bv
+
\lr{\spacegrad \otimes \Bv }^\dagger
} \\
&=
\inv{2} \lr{
d\Bx \lr{ \spacegrad \cdot \Bv }
+
\gpgradeone{ \spacegrad d\Bx \Bv }
},
\end{aligned}
\end{equation}
and
\begin{equation}\label{eqn:tensorComponents:60}
\begin{aligned}
d\Bx \cdot \BOmega
&=
\inv{2} d\Bx \cdot \lr{
\spacegrad \otimes \Bv

\lr{\spacegrad \otimes \Bv }^\dagger
} \\
&=
\inv{2} \lr{
d\Bx \lr{ \spacegrad \cdot \Bv }

\gpgradeone{ d\Bx \Bv \spacegrad }
}.
\end{aligned}
\end{equation}

Let’s expand each of these in coordinates to verify that these are correct. For the symmetric component, that is
\begin{equation}\label{eqn:tensorComponents:80}
\begin{aligned}
d\Bx \cdot \Bd
&=
\inv{2}
\lr{
dx_i \partial_j v_j \Be_i
+
\partial_j dx_i v_k \gpgradeone{ \Be_j \Be_i \Be_k }
} \\
&=
\inv{2} dx_i
\lr{
\partial_j v_j \Be_i
+
\partial_j v_k \lr{ \delta_{ji} \Be_k + \lr{ \Be_j \wedge \Be_i } \cdot \Be_k }
} \\
&=
\inv{2} dx_i
\lr{
\partial_j v_j \Be_i
+
\partial_j v_k \lr{ \delta_{ji} \Be_k + \delta_{ik} \Be_j – \delta_{jk} \Be_i }
} \\
&=
\inv{2} dx_i
\lr{
\partial_j v_j \Be_i
+
\partial_i v_k \Be_k
+
\partial_j v_i \Be_j

\partial_j v_j \Be_i
} \\
&=
\inv{2} dx_i
\lr{
\partial_i v_k \Be_k
+
\partial_j v_i \Be_j
} \\
&=
dx_i \inv{2} \lr{ \partial_i v_j + \partial_j v_i } \Be_j.
\end{aligned}
\end{equation}
Sure enough, we that the product contains the matrix element of the symmetric component of \( \spacegrad \otimes \Bv \).

Now let’s verify that our GA antisymmetric tensor product representation works out.
\begin{equation}\label{eqn:tensorComponents:100}
\begin{aligned}
d\Bx \cdot \BOmega
&=
\inv{2}
\lr{
dx_i \partial_j v_j \Be_i

dx_i \partial_k v_j \gpgradeone{ \Be_i \Be_j \Be_k }
} \\
&=
\inv{2} dx_i
\lr{
\partial_j v_j \Be_i

\partial_k v_j
\lr{ \delta_{ij} \Be_k + \delta_{jk} \Be_i – \delta_{ik} \Be_j }
} \\
&=
\inv{2} dx_i
\lr{
\partial_j v_j \Be_i

\partial_k v_i \Be_k

\partial_k v_k \Be_i
+
\partial_i v_j \Be_j
} \\
&=
\inv{2} dx_i
\lr{
\partial_i v_j \Be_j

\partial_k v_i \Be_k
} \\
&=
dx_i
\inv{2}
\lr{
\partial_i v_j

\partial_j v_i
}
\Be_j.
\end{aligned}
\end{equation}
As expected, we that this product contains the matrix element of the antisymmetric component of \( \spacegrad \otimes \Bv \).

We also found previously that \( \BOmega \) is just a curl, namely
\begin{equation}\label{eqn:tensorComponents:120}
\BOmega = \inv{2} \lr{ \spacegrad \wedge \Bv } = \inv{2} \lr{ \partial_i v_j } \Be_i \wedge \Be_j,
\end{equation}
which directly encodes the antisymmetric component of \( \spacegrad \otimes \Bv \). We can also see that by fully expanding \( d\Bx \cdot \BOmega \), which gives
\begin{equation}\label{eqn:tensorComponents:140}
\begin{aligned}
d\Bx \cdot \BOmega
&=
dx_i \inv{2} \lr{ \partial_j v_k }
\Be_i \cdot \lr{ \Be_j \wedge \Be_k } \\
&=
dx_i \inv{2} \lr{ \partial_j v_k }
\lr{
\delta_{ij} \Be_k

\delta_{ik} \Be_j
} \\
&=
dx_i \inv{2}
\lr{
\lr{ \partial_i v_k } \Be_k

\lr{ \partial_j v_i }
\Be_j
} \\
&=
dx_i \inv{2}
\lr{
\partial_i v_j – \partial_j v_i
}
\Be_j,
\end{aligned}
\end{equation}
as expected.