DifferentialGeometry Lessons - Maple Programming Help

Home : Support : Online Help : Mathematics : DifferentialGeometry : Lessons and Tutorials : DifferentialGeometry : DifferentialGeometry/LessonsAndTutorials/DifferentialGeometry/DGinfo

DifferentialGeometry Lessons

Lesson 12: DGinfo

Overview

This lesson is dedicated to the Tools command DGinfo.  This command provides access to the information internal to DifferentialGeometry objects (vectors, forms, tensors, and transformations) and to the user-defined coordinate systems, frames, and Lie algebras.The DGinfo command is used primarily when writing new application programs.

In this lesson, you will learn to do the following:

 – Interpret the internal representation of a differential geometry object.
 – Find the frame in which a vector field, differential form, or tensor is defined.
 – Find the domain and range frames of a transformation.
 – Determine the DifferentialGeometry type of a object (ie, vector, differential form, tensor ...).
 – Find the degree of a differential form and the index type of a tensor.
 – Find the differential order of a function, vector field, or differential form defined on a jet space.
 – Obtain the list or set of coefficients of a given vector field, differential form, or tensor.
 – List the coordinates defined for a given frame.
 – Obtain the bases for the tangent space and cotangent space for a given frame.
 – Obtain the structure equations for an anholonomic frame.

For the full list of keyword options for the command DGinfo, see the help page DGinfo.

ObjectAttributes, ObjectComponents

All DifferentialGeomety objects are defined by unevaluated functions of the form _DG([A, C]).

 – Here A is the attribute list and C is the component list.
 – The first element of the attribute list A always specifies the object type.
 – The second element of the attribute list A always specifies the frame information for the object.
 – Other attributes include form degree, tensor index type, Jacobian, etc...
 – The component list is a list of two-element sublists C = [C1, C2, C3 , ...].  The first element of the sublist Ck specifies the component and the second element of Ck gives the coefficient for that component.
 – The use of the unevaluated function _DG enables the DifferentialGeometry package to control the printing (and LaTeX formatting) of all the various DifferentialGeometry objects (see print).

The DGinfo keywords "ObjectAttributes", "ObjectComponents" return the attribute list and the component list of the given DifferentialGeometry object.  Other keywords return specific entries in the attribute list and component list.

 > with(DifferentialGeometry): with(Tools):
 E1 > DGsetup([x, y, z], M): DGsetup([t], R):

Define a vector field:

 R > X := evalDG(a*D_x + b*D_y + c*D_z);
 ${X}{≔}{a}{}{\mathrm{D_x}}{+}{b}{}{\mathrm{D_y}}{+}{c}{}{\mathrm{D_z}}$ (2.1)
 M > op(0, X);
 ${\mathrm{_DG}}$ (2.2)
 M > internalX := op(X);
 ${\mathrm{internalX}}{≔}\left[\left[{"vector"}{,}{M}{,}\left[{}\right]\right]{,}\left[\left[\left[{1}\right]{,}{a}\right]{,}\left[\left[{2}\right]{,}{b}\right]{,}\left[\left[{3}\right]{,}{c}\right]\right]\right]$ (2.3)

We see that the internal representation of X is a list with 2 components.

 M > nops(internalX);
 ${2}$ (2.4)
 M > AttributeList := internalX[1];
 ${\mathrm{AttributeList}}{≔}\left[{"vector"}{,}{M}{,}\left[{}\right]\right]$ (2.5)
 M > ComponentList := internalX[2];
 ${\mathrm{ComponentList}}{≔}\left[\left[\left[{1}\right]{,}{a}\right]{,}\left[\left[{2}\right]{,}{b}\right]{,}\left[\left[{3}\right]{,}{c}\right]\right]$ (2.6)

The attribute list and component list can be obtained directly from DGinfo.

 M > DGinfo(X, "ObjectAttributes");
 $\left[{"vector"}{,}{M}{,}\left[{}\right]\right]$ (2.7)
 M > DGinfo(X, "ObjectComponents");
 $\left[\left[\left[{1}\right]{,}{a}\right]{,}\left[\left[{2}\right]{,}{b}\right]{,}\left[\left[{3}\right]{,}{c}\right]\right]$ (2.8)

Here are the attribute and component lists for a 2-form alpha.

 M > alpha := evalDG(x^2*dx &w dy - y^2*dy &w dz);
 ${\mathrm{α}}{≔}{{x}}^{{2}}{}{\mathrm{dx}}{}{\mathrm{^}}{}{\mathrm{dy}}{-}{{y}}^{{2}}{}{\mathrm{dy}}{}{\mathrm{^}}{}{\mathrm{dz}}$ (2.9)
 M > DGinfo(alpha, "ObjectAttributes");
 $\left[{"form"}{,}{M}{,}{2}\right]$ (2.10)
 M > DGinfo(alpha, "ObjectComponents");
 $\left[\left[\left[{1}{,}{2}\right]{,}{{x}}^{{2}}\right]{,}\left[\left[{2}{,}{3}\right]{,}{-}{{y}}^{{2}}\right]\right]$ (2.11)

Here are the attribute and component lists for a rank 3 tensor T.

 M > T := evalDG(dx &t dy &t D_z - dy &t dz &t D_x);
 ${T}{≔}{\mathrm{dx}}{}{\mathrm{dy}}{}{\mathrm{D_z}}{-}{\mathrm{dy}}{}{\mathrm{dz}}{}{\mathrm{D_x}}$ (2.12)
 M > DGinfo(T, "ObjectAttributes");
 $\left[{"tensor"}{,}{M}{,}\left[\left[{"cov_bas"}{,}{"cov_bas"}{,}{"con_bas"}\right]{,}\left[{}\right]\right]\right]$ (2.13)
 M > DGinfo(T, "ObjectComponents");
 $\left[\left[\left[{1}{,}{2}{,}{3}\right]{,}{1}\right]{,}\left[\left[{2}{,}{3}{,}{1}\right]{,}{-}{1}\right]\right]$ (2.14)

Here are the attribute and component lists for a transformation.

 M > Phi := Transformation(R, M, [x = t*cos(t), y = t*sin(t), z = t^2]);
 ${\mathrm{Φ}}{≔}\left[{x}{=}{t}{}{\mathrm{cos}}{}\left({t}\right){,}{y}{=}{t}{}{\mathrm{sin}}{}\left({t}\right){,}{z}{=}{{t}}^{{2}}\right]$ (2.15)
 R > DGinfo(Phi, "ObjectAttributes");
 $\left[{"transformation"}{,}\left[\left[{R}{,}{0}\right]{,}\left[{M}{,}{0}\right]\right]{,}\left[{}\right]{,}\left[\left[\begin{array}{c}{\mathrm{cos}}{}\left({t}\right){-}{t}{}{\mathrm{sin}}{}\left({t}\right)\\ {\mathrm{sin}}{}\left({t}\right){+}{t}{}{\mathrm{cos}}{}\left({t}\right)\\ {2}{}{t}\end{array}\right]\right]\right]$ (2.16)
 R > DGinfo(Phi, "ObjectComponents");
 $\left[\left[{t}{}{\mathrm{cos}}{}\left({t}\right){,}{x}\right]{,}\left[{t}{}{\mathrm{sin}}{}\left({t}\right){,}{y}\right]{,}\left[{{t}}^{{2}}{,}{z}\right]\right]$ (2.17)

ObjectType

The first attribute in the attribute list of a DifferentialGeometry object is its type.  This information can be obtained with the command DGinfo using the keyword "ObjectType".  At present, the following object types are used in the DifferentialGeometry package: "biform", "DE", "form", "LieAlgebra", "moving_frame", "tensor", "transformation", "representation", "vector".

 E1 > with(DifferentialGeometry): with(LieAlgebras): with(Tools):
 R > DGsetup([x, y], M):

Find the type of the differential form dx.

 M > lprint(dx);
 _DG([["form", M, 1], [[[1], 1]]])
 M > DGinfo(dx, "ObjectType");
 ${"form"}$ (3.1)

Find the type of the vector D_x.

 M > lprint(D_x);
 _DG([["vector", M, []], [[[1], 1]]])
 M > DGinfo(D_x, "ObjectType");
 ${"vector"}$ (3.2)

Find the type of the tensor D_xdy.

 M > lprint(D_x &tensor dy);
 _DG([["tensor", M, [["con_bas", "cov_bas"], []]], [[[1, 2], 1]]])
 M > DGinfo(D_x &tensor dy, "ObjectType");
 ${"tensor"}$ (3.3)

Find the type of the transformation f.

 M > f := Transformation(M, M, [x= 1, y = y]);
 ${f}{≔}\left[{x}{=}{1}{,}{y}{=}{y}\right]$ (3.4)
 M > lprint(f);
 _DG([["transformation", [[M, 0], [M, 0]], [], [Matrix(2,2,{(2, 2) = 1},datatype = anything,storage = rectangular,order = Fortran_order,shape = [])]], [[1, x], [y, y]]])
 M > DGinfo(f, "ObjectType");
 ${"transformation"}$ (3.5)

ObjectFrame, DomainFrame, RangeFrame

If X is a vector field, differential form, or tensor, then the second element in the attribute list is the name of the frame in which the object X is defined.

If X is a transformation, then the second element in the attribute list is a list defining the range and domain of the transformation.

 M > with(DifferentialGeometry): with(Tools):
 M > DGsetup([x, y], M): DGsetup([u, v], N):

Find the frame of the vector D_x.

 N > DGinfo(D_x, "ObjectFrame");
 ${M}$ (4.1)

Find the frame of the 1-form du.

 N > DGinfo(du, "ObjectFrame");
 ${N}$ (4.2)
 N > f := Transformation(M, N, [u = x^2 + y^2, v = x/y]);
 ${f}{≔}\left[{u}{=}{{x}}^{{2}}{+}{{y}}^{{2}}{,}{v}{=}\frac{{x}}{{y}}\right]$ (4.3)

Find the domain and range of the transformation f.

 M > DGinfo(f, "DomainFrame");
 ${M}$ (4.4)
 M > DGinfo(f, "RangeFrame");
 ${N}$ (4.5)

FormDegree, TensorType, TensorIndexType, TensorDensityType, TensorIndexPart1, TensorIndexPart2

 M > with(DifferentialGeometry): with(Tensor): with(Tools):
 M > DGsetup([x, y], [u], M):

Find the degree of the differential form alpha.

 M > alpha := evalDG(dx &w dy);
 ${\mathrm{α}}{≔}{\mathrm{dx}}{}{\mathrm{^}}{}{\mathrm{dy}}$ (5.1)
 M > DGinfo(alpha, "FormDegree");
 ${2}$ (5.2)

Find the tensor index type and density type of the tensor T.  For a discussion of the different index types, see Lesson 9: Tensor Algebra.

 M > T := evalDG(D_x &t dy &t PermutationSymbol("con_vrt"));
 ${T}{≔}{\mathrm{D_x}}{}{\mathrm{dy}}{}{\mathrm{D_u}}$ (5.3)
 M > DGinfo(T, "TensorType");
 $\left[\left[{"con_bas"}{,}{"cov_bas"}{,}{"con_vrt"}\right]{,}\left[\left[{"vrt"}{,}{1}\right]\right]\right]$ (5.4)

Find just the index type.

 M > DGinfo(T, "TensorIndexType");
 $\left[{"con_bas"}{,}{"cov_bas"}{,}{"con_vrt"}\right]$ (5.5)

Find just the density type.

 M > DGinfo(T, "TensorDensityType");
 $\left[\left[{"vrt"}{,}{1}\right]\right]$ (5.6)

Find the valency type of a tensor index ("con" or "cov").

 M > DGinfo("con_bas", "TensorIndexPart1");
 ${"con"}$ (5.7)

Find the spatial type of a tensor index ("bas" or "vrt").

 M > DGinfo("con_bas", "TensorIndexPart2");
 ${"bas"}$ (5.8)

JacobianMatrix

The Jacobian matrix of a transformation defined by the command Transformation is computed and stored in the internal representation of the transformation.  The Jacobian matrix can be retrieved using the command DGinfo with the keyword "JacobianMatrix".

 M > with(DifferentialGeometry): with(Tools):
 M > DGsetup([x, y, z], M): DGsetup([u, v], N):
 N > Phi := Transformation(N, M, [x = u, y = v, z = 1 - u^2 - v^2]);
 ${\mathrm{Φ}}{≔}\left[{x}{=}{u}{,}{y}{=}{v}{,}{z}{=}{1}{-}{{u}}^{{2}}{-}{{v}}^{{2}}\right]$ (6.1)
 N > DGinfo(Phi, "JacobianMatrix");
 $\left[\begin{array}{cc}{1}& {0}\\ {0}& {1}\\ {-}{2}{}{u}& {-}{2}{}{v}\end{array}\right]$ (6.2)

CoefficientSet, CoefficientList

With the keyword "CoefficientSet", DGinfo returns the set of all coefficients of a vector field, differential form, or tensor.  With the keyword "CoefficientList", one can retrieve a list of all coefficients or just a specific list of coefficients.

 E1 > with(DifferentialGeometry): with(Tools):
 N > DGsetup([x, y, z, w], M):
 M > omega := evalDG(a*dx &w dy + b*dx &w dz + b*dy &w dz + d*dx &w dw + e*dz &w dw);
 ${\mathrm{ω}}{≔}{a}{}{\mathrm{dx}}{}{\mathrm{^}}{}{\mathrm{dy}}{+}{b}{}{\mathrm{dx}}{}{\mathrm{^}}{}{\mathrm{dz}}{+}{d}{}{\mathrm{dx}}{}{\mathrm{^}}{}{\mathrm{dw}}{+}{b}{}{\mathrm{dy}}{}{\mathrm{^}}{}{\mathrm{dz}}{+}{e}{}{\mathrm{dz}}{}{\mathrm{^}}{}{\mathrm{dw}}$ (7.1)

Find the set of coefficients of the 2-form omega.

 M > DGinfo(omega, "CoefficientSet");
 $\left\{{a}{,}{b}{,}{e}{,}{d}\right\}$ (7.2)

Find the list of all coefficients of omega.

 M > DGinfo(omega, "CoefficientList", "all");
 $\left[{a}{,}{b}{,}{d}{,}{b}{,}{e}\right]$ (7.3)

Find the coefficients of dx^dy, dx^dz, dy^dw in the 2-form omega.

 M > DGinfo(omega, "CoefficientList", [dx &w dy, dx &w dz, dy &w dw]);
 $\left[{a}{,}{b}{,}{0}\right]$ (7.4)

Find the coefficients of dx^dy, dx^dz, dy^dw in the 2-form omega (alternative method).

 M > DGinfo(omega, "CoefficientList", [[1, 2], [1, 3], [2, 4]]);
 $\left[{a}{,}{b}{,}{0}\right]$ (7.5)

CurrentFrame, FrameNames, FrameGlobals

The command DGinfo also provides information regarding all the user-defined coordinates systems, frames, and Lie algebras.

 E1 > restart: with(DifferentialGeometry): with(Tools):
 > DGsetup([x, y], M):
 M > DGsetup([t], R):
 R > DGsetup([x, y], [z], E):

Find the current frame.

 E > DGinfo("CurrentFrame");
 ${E}$ (8.1)

List all the defined frames.

 E > DGinfo("FrameNames");
 $\left[{E}{,}{M}{,}{R}\right]$ (8.2)

List all the assigned and protected names for a given frame.

 E > DGinfo(E,"FrameGlobals");
 $\left\{{x}{,}{E}{,}{y}{,}{z}{,}{\mathrm{D_x}}{,}{\mathrm{D_y}}{,}{\mathrm{D_z}}{,}{\mathrm{dx}}{,}{\mathrm{dy}}{,}{\mathrm{dz}}\right\}$ (8.3)

Display all the information for a given frame.

 E > DGinfo(M, "FrameInformation");
 ${\mathrm{frame name: M}}$ ${\mathrm{library name: CoordinateProtocol}}$ ${\mathrm{Frame Variables:}}$ $\left[{x}{,}{y}\right]$ ${\mathrm{Frame Labels}}$ $\left[{\mathrm{D_x}}{,}{\mathrm{D_y}}\right]$ ${\mathrm{Coframe Labels}}$ $\left[{\mathrm{dx}}{,}{\mathrm{dy}}\right]$ ${\mathrm{--------------}}$ (8.4)

If the frame is not a coordinate frame, then "FrameInformation" also returns the structure equations.

 E > ChangeFrame(M):
 M > Omega := FrameData([1/y*dx, 1/x*dy], P);
 ${\mathrm{Ω}}{≔}\left[{d}{}{\mathrm{Θ1}}{=}\frac{{x}{}{\mathrm{Θ1}}{}{\mathrm{^}}{}{\mathrm{Θ2}}}{{y}}{,}{d}{}{\mathrm{Θ2}}{=}{-}\frac{{y}{}{\mathrm{Θ1}}{}{\mathrm{^}}{}{\mathrm{Θ2}}}{{x}}\right]$ (8.5)
 M > DGsetup(Omega, [E], [beta]);
 ${\mathrm{frame name: P}}$ (8.6)
 P > DGinfo(P, "FrameInformation");
 ${\mathrm{frame name: P}}$ ${\mathrm{library name: AnholonomicFrameProtocol}}$ ${\mathrm{Frame Variables:}}$ $\left[{x}{,}{y}\right]$ ${\mathrm{Frame Labels}}$ $\left[{\mathrm{E1}}{,}{\mathrm{E2}}\right]$ ${\mathrm{Coframe Labels}}$ $\left[{\mathrm{β1}}{,}{\mathrm{β2}}\right]$ ${\mathrm{ext_d:}}{,}{x}{,}{y}{}{\mathrm{β1}}$ ${\mathrm{ext_d:}}{,}{y}{,}{x}{}{\mathrm{β2}}$ ${\mathrm{ext_d:}}{,}{\mathrm{β1}}{,}\frac{{x}{}{\mathrm{β1}}{}{\mathrm{^}}{}{\mathrm{β2}}}{{y}}$ ${\mathrm{ext_d:}}{,}{\mathrm{β2}}{,}{-}\frac{{y}{}{\mathrm{β1}}{}{\mathrm{^}}{}{\mathrm{β2}}}{{x}}$ ${\mathrm{--------------}}$ (8.7)

FrameBaseDimension, FrameFiberDimension

These keywords simply return the dimensions of the manifold and, in the case of a fiber bundle, the dimensions of the base and fiber spaces.

 P > with(DifferentialGeometry): with(Tools):
 P > DGsetup([x, y, z], M): DGsetup([x, y], [u, v, w, z], E):

Find the dimension of the manifold M.

 E > DGinfo(M, "FrameBaseDimension");
 ${3}$ (9.1)

Find the base dimension of bundle E.

 E > DGinfo(E, "FrameBaseDimension");
 ${2}$ (9.2)

Find the fiber dimension of the bundle E.

 E > DGinfo(E, "FrameFiberDimension");
 ${4}$ (9.3)

FrameIndependentVariables, FrameDependentVariables

These keywords simply return the coordinates of the manifold or, in the case of a fiber bundle, the base and fiber space coordinates.

 E > with(DifferentialGeometry): with(Tools):
 E > DGsetup([x, y, z], M):
 M > DGsetup([x, y], [u, v, w, z], E):

Find the coordinates of the manifold M.

 E > DGinfo(M, "FrameIndependentVariables");
 $\left[{x}{,}{y}{,}{z}\right]$ (10.1)

Find the base coordinates for the bundle E.

 E > DGinfo(E, "FrameIndependentVariables");
 $\left[{x}{,}{y}\right]$ (10.2)

Find the fiber coordinates of the bundle E.

 E > DGinfo(E, "FrameDependentVariables");
 $\left[{u}{,}{v}{,}{w}{,}{z}\right]$ (10.3)

FrameBaseVectors, FrameBaseForms, FrameFiberVectors, FrameFiberForms

These keywords return the basis for the tangent and cotangent spaces.  These options for DGinfo are useful in conjunction with the commands GetComponents and DGzip.

 E > with(DifferentialGeometry): with(Tools):
 E > DGsetup([x, y, z], M): DGsetup([x, y], [u, v, w, z], E):

List the basis vectors for the tangent space of M.

 E > DGinfo(M, "FrameBaseVectors");
 $\left[{\mathrm{D_x}}{,}{\mathrm{D_y}}{,}{\mathrm{D_z}}\right]$ (11.1)

List the basis of 1-forms for the cotangent space of M.

 M > DGinfo(M, "FrameBaseForms");
 $\left[{\mathrm{dx}}{,}{\mathrm{dy}}{,}{\mathrm{dz}}\right]$ (11.2)

List the basis for the vertical vectors on E.

 M > DGinfo(E, "FrameFiberVectors");
 $\left[{\mathrm{D_u}}{,}{\mathrm{D_v}}{,}{\mathrm{D_w}}{,}{\mathrm{D_z}}\right]$ (11.3)
 E > DGinfo(E, "FrameFiberForms");
 $\left[{\mathrm{du}}{,}{\mathrm{dv}}{,}{\mathrm{dw}}{,}{\mathrm{dz}}\right]$ (11.4)

Here are simple computations which illustrate the use of DGinfo/"FrameBaseVectors" with the commands DGzip and GetComponents.

 E > F := DGinfo(M, "FrameBaseVectors");
 ${F}{≔}\left[{\mathrm{D_x}}{,}{\mathrm{D_y}}{,}{\mathrm{D_z}}\right]$ (11.5)
 M > X := DGzip([a, b, c], F, "plus");
 ${X}{≔}{a}{}{\mathrm{D_x}}{+}{b}{}{\mathrm{D_y}}{+}{c}{}{\mathrm{D_z}}$ (11.6)
 M > C := GetComponents(X, F);
 ${C}{≔}\left[{a}{,}{b}{,}{c}\right]$ (11.7)