Skip to content

Submanifolds

A hypersurface embedded in carries two geometries: the one it inherits as a metric space, and the one describing how it curves inside the ambient space. TensND represents both with SubManifoldSym (src/submanifold.jl), which is a CoorSystemSym with one coordinate fewer than the ambient dimension and a unit normal completing the frame.

Tangent frame and normal

Let parametrize the surface. The tangent vectors, Lamé coefficients and unit tangents are those of Curvilinear differential calculus,

and the frame is closed by the unit normal , built as the generalized cross product of the tangent vectors and stored last with  . Reversing two coordinates reverses , and with it the sign of the second fundamental form below — the orientation is a choice, and it must be stated whenever a curvature is reported.

The two fundamental forms

  • — the first fundamental form, the metric induced by the embedding. It measures lengths and angles within the surface and knows nothing of the ambient space. submetric.

  • — the second fundamental form, the normal component of the variation of the tangent frame. It measures how the surface bends in the ambient space. curvature.

The second equality follows from    by differentiation, and is the Weingarten relation.

Both are stored as -dimensional order-2 tensors with a vanishing last row and column, so they combine directly with tensors expressed in the full embedded frame.

Gauss and Weingarten

Decomposing on the embedded frame gives the two classical equations, tangential and normal:

SubManifoldSym stores exactly this: the connection array holds the intrinsic Christoffel symbols in its tangential block, in the slice    (Gauss), and in    (Weingarten).

connection, formerly Riemann

connection returns the purely tangential block        — the Christoffel symbols of the induced metric. These are connection coefficients: they are not tensor components, they change under a change of chart by an inhomogeneous rule, and they can be made to vanish at any single point. A Riemann curvature tensor can do none of those things — which is why the accessor, once misleadingly called Riemann, is now connection. The old name still works and forwards, with a deprecation warning.

For a sphere of radius parametrized by the function returns

which are indeed the sphere's connection coefficients. The name is The intrinsic curvature is recovered from and by the Gauss equation below.

Curvatures

With the shape operator   — the second form with one index raised —

QuantityDefinitionSphere of radius , outward normal
principal curvatureseigenvalues of  
mean curvature   
Gaussian curvature 

Gauss's Theorema Egregium is that depends only on , even though its definition uses : it is an intrinsic quantity. The cylinder is the standard illustration — one principal curvature vanishes, so   and the cylinder is intrinsically flat, which is why it can be unrolled onto a plane without distortion while a sphere cannot.

Worked closed forms

For a sphere of radius parametrized by , with the outward normal  :

The proportionality    is the defining property of an umbilical surface: every direction curves identically.

SurfaceComment
plane 
sphere, radius umbilical
cylinder, radius intrinsically flat

Differential operators on the surface

Because SubManifoldSym is an AbstractCoorSystem, the operators GRAD, DIV, LAPLACE apply to fields defined on the surface, with the intrinsic connection. The relation that ties the two geometries together is the Weingarten equation read as a gradient:

It is the cheapest check that an implementation's normal orientation and curvature sign agree, and it is pinned by a test (Testing and conventions).

Compare tensors, not stored arrays

This is an identity between tensors, and the two sides are not stored the same way: comes out on one basis and variance, on another. Subtracting their get_arrays therefore gives a nonzero, and rather convincing, wrong answer — on a sphere of radius the raw arrays differ by a factor , so the discrepancy even vanishes for  .

Bring both to a common basis and variance first — components(t, ℬ, var) or change_tens — after which the difference is exactly zero in every variance. This is the practical face of Bases and variance: a tensor is not its component array, and only components in the same basis may be compared.

Declare the parameter ranges, or fight Abs

Declaring merely real leaves SymPy unable to reduce to , and the curvature comes back multiplied by . The results are correct but unreadable. Pass the rules of SubManifoldSym — or restrict the symbol's assumptions — so that the sign is resolved. This is the same simplification machinery described on Curvilinear differential calculus.