Calculating Gaussian Curvature Using Differential Forms
Frank Wang, fwang@lagcc.cuny.edu
Riemannian geometry is customarily developed by tensor methods, which is not necessarily the most computationally efficient approach. Using the language of differential forms, Elie Cartan's formulation of the Riemannian geometry can be elegantly summarized in two structural equations. Essentially, the local curvature of the manifold is a measure of how the connection varies from point to point. This Maple worksheet uses the DifferentialGeometry package to solves three problems in Harley Flanders' book on differential forms to demonstrate the implementation of Cartan's method.
Our discussion follows that of Flanders'. On a (curved) manifold, we can attach to each point a righthanded orthonormal frames . As we move from point to point, we expect that the local frame will rotate. Cartan's first structural equation is
(I) .
The differentiation (exterior derivative) of the frames is related to the connection 1form , which connects nearby frames. Curvature should be given by some 2forms, which can only be a combination of and . The second structure equation defines the curvature 2form :
(II) .
The abstract notation above is perhaps quite difficult for students to comprehend. We will focus on a surface in a threedimensional Euclidean space (= ) to provide some concrete examples.
Consider a smooth surface Σ in = . We choose a moving frame at each point of Σ in such a way that is the normal to the surface. Since is constrained to move in the surface,
where and are 1forms. It should be clear that the 2form represents the element of area of Σ.
From Flanders' book page 41.
The exterior derivative of can be expressed in terms of , But $=1therefore $=0. We have
=ϖ e_{2}
Similarly,
Imagine that we live on a twodimensional surface, we will have no knowledge about how varies. Let's omit writing . Even if we don't know the normal vector, the Gauss curvature can still be determined from σ1 and σ2, as it is an intrinsic quantity. In the present case (two dimensions), the curvature twoform is just , since .
In the following, we will use the crucial formula
to calculate the Gauss curvature .
Problem: Set up a frame and the structue equations for a sphere of radius . Compute the curvatures.
Using spherical coordinates to express the location on a sphere of radius , we have
> 
x := R*sin(theta)*cos(phi); y := R*sin(theta)*sin(phi); z := R*cos(theta);


(1) 
We make a 3D plot of such a sphere.
> 
plot3d(eval([x , y, z], R=1), theta=0..Pi, phi=0..2*Pi, scaling=constrained);

> 
with(LinearAlgebra): with(DifferentialGeometry):

Here we use capital X for the position vector, which should not be confused with the first component of Cartesian coordinates.

(2) 
Tangent vectors along the and directions are the natural choice of bases.
> 
v1 := map(diff, X, theta);


(3) 
> 
v2 := map(diff, X, phi);


(4) 
Normalizing these two vector fields
> 
e1 := simplify(Normalize(v1, Euclidean, conjugate=false)) assuming R>0;


(5) 
> 
e2 := simplify(Normalize(v2, Euclidean, conjugate=false)) assuming R>0, theta>0, theta<Pi;


(6) 
and forming the normal vector
> 
e3 := simplify(CrossProduct(e1, e2));


(7) 
we obtain a orthonormal frame. We set up a manifold (a surface in =)
> 
DGsetup([theta, phi], M);


(8) 
then find the exterior derivative of and , denoted by the obvious symbols de1 and de2.
M > 
dX := ExteriorDerivative(X);


(9) 
M > 
de1 := ExteriorDerivative(e1);


(10) 
M > 
de2 := ExteriorDerivative(e2);


(11) 
The connection form ϖ (which we use omega for it below) can be extracted from either de1 or de2.
M > 
omega := evalDG(DotProduct(de1, e2, conjugate=false));


(12) 
M > 
sigma1 := evalDG(DotProduct(dX, e1, conjugate=false));


(13) 
M > 
sigma2 := evalDG(DotProduct(dX, e2, conjugate=false));


(14) 
Once we have the connection form, we find its exterior derivative
M > 
dw := ExteriorDerivative(omega);


(15) 
We obtain the Gauss curvature from the formula
M > 
K := GetComponents(dw, [sigma1 &wedge sigma2]);


(16) 
It is not surprising that the Gauss curvature of a sphere of radius is .
Problem: Find Gaussian curvature of the surface of revolution obtained by revolving the curve
about the axis.
> 
x := cos(theta) + log(tan(theta/2));


(17) 

(18) 
Let us first see what this curve looks like.
> 
plot([x, y, theta=Pi/2..Pi], scaling=constrained);

The surface of revolution appears as
> 
plot3d([x, y*cos(phi), y*sin(phi)], theta=Pi/2..3*Pi/2, phi=0..2*Pi, scaling=constrained);

> 
with(LinearAlgebra): with(DifferentialGeometry):

Again, we use capital X for the position vector.
> 
X := < x  y*cos(phi)  y*sin(phi) >;


(19) 
The procedure of obtaining an orthonormal frame is similar to that of the previous example. Actually, we can just copy from there and make minor changes.
> 
v1 := simplify(map(diff, X, theta));


(20) 
> 
v2 := map(diff, X, phi);


(21) 
> 
e1 := simplify(Normalize(v1, Euclidean, conjugate=false)) assuming theta>Pi/2, theta<Pi;


(22) 
> 
e2 := simplify(Normalize(v2, Euclidean, conjugate=false)) assuming theta>Pi/2, theta<Pi;


(23) 
> 
e3 := simplify(CrossProduct(e1, e2));


(24) 
> 
DGsetup([theta, phi], M);


(25) 
M > 
dX := ExteriorDerivative(X);


(26) 
M > 
de1 := ExteriorDerivative(e1);


(27) 
M > 
de2 := ExteriorDerivative(e2);


(28) 
Here we obtain the connection form ϖ
M > 
omega := evalDG(DotProduct(de1, e2, conjugate=false));


(29) 
M > 
sigma1 := evalDG(DotProduct(dX, e1, conjugate=false));


(30) 
M > 
sigma2 := evalDG(DotProduct(dX, e2, conjugate=false));


(31) 
M > 
dw := ExteriorDerivative(omega);


(32) 
Using the formula , the Gauss curvature is found
M > 
K := GetComponents(dw, [sigma1 &wedge sigma2]);


(33) 
For this surface, the curvature is a constant: .
Problem: Given a surface in the form , develop formulas for and in terms of and its partial derivatives.
> 
with(LinearAlgebra): with(DifferentialGeometry):

Once again we define the position vector (with capital X) whose components are .
> 
X := < x  y  f(x,y) >;


(34) 
We can find two independent tangent vectors on the surface.

(35) 

(36) 
We apply the GramSchmidt process to construct a set of orthonomal unit vectors e1 and e2.
> 
e1 := Normalize(v1, Euclidean, conjugate=false);


(37) 
> 
u2 := v2  DotProduct(v2, e1, conjugate=false)*e1;


(38) 
> 
e2 := simplify(Normalize(u2, Euclidean, conjugate=false));


(39) 
> 
e3 := simplify(CrossProduct(e1, e2));


(40) 
The rest of the calculation is essentially the same as the previous two examples.

(41) 
M > 
dX := ExteriorDerivative(X);


(42) 
M > 
de1 := ExteriorDerivative(e1);


(43) 
M > 
de2 := ExteriorDerivative(e2);


(44) 
M > 
omega := evalDG(DotProduct(de1, e2, conjugate=false));


(45) 
M > 
sigma1 := evalDG(DotProduct(dX, e1, conjugate=false));


(46) 
M > 
sigma2 := evalDG(DotProduct(dX, e2, conjugate=false));


(47) 
M > 
dw := ExteriorDerivative(omega);


(48) 
Using the fact that
M > 
K := GetComponents(dw, [sigma1 &wedge sigma2]);


(49) 
We obtain this formula for in terms of and its partial derivatives.
Reference
Harley Flanders, Differential Forms with Applications wo the Physical Sciences. New York: Dover Publications (1989).
