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 represenation 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);
|
| (2.1) |
| (2.2) |
| (2.3) |
We see that the internal representation of X is a list with 2 components.
| (2.4) |
M >
|
AttributeList := internalX[1];
|
| (2.5) |
M >
|
ComponentList := internalX[2];
|
| (2.6) |
The attribute list and component list can be obtained directly from DGinfo.
M >
|
DGinfo(X, "ObjectAttributes");
|
| (2.7) |
M >
|
DGinfo(X, "ObjectComponents");
|
| (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);
|
| (2.9) |
M >
|
DGinfo(alpha, "ObjectAttributes");
|
| (2.10) |
M >
|
DGinfo(alpha, "ObjectComponents");
|
| (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);
|
| (2.12) |
M >
|
DGinfo(T, "ObjectAttributes");
|
| (2.13) |
M >
|
DGinfo(T, "ObjectComponents");
|
| (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]);
|
| (2.15) |
R >
|
DGinfo(Phi, "ObjectAttributes");
|
| (2.16) |
R >
|
DGinfo(Phi, "ObjectComponents");
|
| (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):
|
Find the type of the differential form dx.
_DG([["form", M, 1], [[[1], 1]]])
| |
M >
|
DGinfo(dx, "ObjectType");
|
| (3.1) |
Find the type of the vector D_x.
_DG([["vector", M, []], [[[1], 1]]])
| |
M >
|
DGinfo(D_x, "ObjectType");
|
| (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");
|
| (3.3) |
Find the type of the transformation f.
M >
|
f := Transformation(M, M, [x= 1, y = y]);
|
| (3.4) |
_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");
|
| (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");
|
| (4.1) |
Find the frame of the 1-form du.
N >
|
DGinfo(du, "ObjectFrame");
|
| (4.2) |
N >
|
f := Transformation(M, N, [u = x^2 + y^2, v = x/y]);
|
| (4.3) |
Find the domain and range of the transformation f.
M >
|
DGinfo(f, "DomainFrame");
|
| (4.4) |
M >
|
DGinfo(f, "RangeFrame");
|
| (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);
|
| (5.1) |
M >
|
DGinfo(alpha, "FormDegree");
|
| (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"));
|
| (5.3) |
M >
|
DGinfo(T, "TensorType");
|
| (5.4) |
Find just the index type.
M >
|
DGinfo(T, "TensorIndexType");
|
| (5.5) |
Find just the density type.
M >
|
DGinfo(T, "TensorDensityType");
|
| (5.6) |
Find the valency type of a tensor index ("con" or "cov").
M >
|
DGinfo("con_bas", "TensorIndexPart1");
|
| (5.7) |
Find the spatial type of a tensor index ("bas" or "vrt").
M >
|
DGinfo("con_bas", "TensorIndexPart2");
|
| (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]);
|
| (6.1) |
N >
|
DGinfo(Phi, "JacobianMatrix");
|
| (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);
|
| (7.1) |
Find the set of coefficients of the 2-form omega.
M >
|
DGinfo(omega, "CoefficientSet");
|
| (7.2) |
Find the list of all coefficients of omega.
M >
|
DGinfo(omega, "CoefficientList", "all");
|
| (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]);
|
| (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]]);
|
| (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):
|
R >
|
DGsetup([x, y], [z], E):
|
Find the current frame.
E >
|
DGinfo("CurrentFrame");
|
| (8.1) |
List all the defined frames.
E >
|
DGinfo("FrameNames");
|
| (8.2) |
List all the assigned and protected names for a given frame.
E >
|
DGinfo(E,"FrameGlobals");
|
| (8.3) |
Display all the information for a given frame.
E >
|
DGinfo(M, "FrameInformation");
|
If the frame is not a coordinate frame, then "FrameInformation" also returns the structure equations.
M >
|
Omega := FrameData([1/y*dx, 1/x*dy], P);
|
| (8.5) |
M >
|
DGsetup(Omega, [E], [beta]);
|
| (8.6) |
P >
|
DGinfo(P, "FrameInformation");
|
|
|
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");
|
| (9.1) |
Find the base dimension of bundle E.
E >
|
DGinfo(E, "FrameBaseDimension");
|
| (9.2) |
Find the fiber dimension of the bundle E.
E >
|
DGinfo(E, "FrameFiberDimension");
|
| (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");
|
| (10.1) |
Find the base coordinates for the bundle E.
E >
|
DGinfo(E, "FrameIndependentVariables");
|
| (10.2) |
Find the fiber coordinates of the bundle E.
E >
|
DGinfo(E, "FrameDependentVariables");
|
| (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");
|
| (11.1) |
List the basis of 1-forms for the cotangent space of M.
M >
|
DGinfo(M, "FrameBaseForms");
|
| (11.2) |
List the basis for the vertical vectors on E.
M >
|
DGinfo(E, "FrameFiberVectors");
|
| (11.3) |
E >
|
DGinfo(E, "FrameFiberForms");
|
| (11.4) |
Here are simple computations which illustrate the use of DGinfo/"FrameBaseVectors" with the commands DGzip and GetComponents.
E >
|
F := DGinfo(M, "FrameBaseVectors");
|
| (11.5) |
M >
|
X := DGzip([a, b, c], F, "plus");
|
| (11.6) |
M >
|
C := GetComponents(X, F);
|
| (11.7) |
|
|
Exercises
|
|
|
Exercise 1
|
|
[i] Find the form degree of alpha.
[ii] Find the manifold on which the vector X is defined.
[iii] Find the index structure of the tensor T.
[iv] Find the coefficient of D_y in the vector X.
[v] Find the name of the range space for the transformation F.
[vi] Show that the Jacobian of the transformation F is full rank.
[vii] How many coordinate systems are presently defined?
[viii] What are the protected names for the coordinate system N?
[ix] What is the dimension of the manifold M?
[x] Create a general 1-form on M whose coefficients are arbitrary functions of the corrdinates.
E1 >
|
restart: with(DifferentialGeometry): with(Tools):
|
P >
|
X := evalDG(7*D_x - y*D_y + x*D_z);
|
| (12.1.1) |
M >
|
omega := evalDG(dx &w dy &w dz);
|
| (12.1.2) |
M >
|
T := evalDG(dx &t D_y &t dz - dy &t D_z &t dz);
|
| (12.1.3) |
M >
|
F := Transformation(M, P, [u = x*y, v = y*z]);
|
| (12.1.4) |
|
Solutions
|
|
Part [i] Find the form degree of alpha.
E1 >
|
DGinfo(omega, "FormDegree");
|
| (12.1.1.1) |
Part [ii] Find the manifold on which the vector X is defined.
M >
|
DGinfo(X, "ObjectFrame");
|
| (12.1.1.2) |
Part [iii] Find the index structure of the tensor T.
M >
|
DGinfo(T, "TensorIndexType");
|
| (12.1.1.3) |
Part [iv] Find the coefficient of D_y in the vector X.
M >
|
DGinfo(X, "CoefficientList", [D_y]);
|
| (12.1.1.4) |
Part [v] Find the name of the range space for the transformation F.
M >
|
DGinfo(F, "RangeFrame");
|
| (12.1.1.5) |
Part [vi] Show that the Jacobian of the transformation F is full rank.
M >
|
J := DGinfo(F, "JacobianMatrix");
|
| (12.1.1.6) |
M >
|
LinearAlgebra:-Rank(J);
|
| (12.1.1.7) |
Part [vii] How many coordinate systems are presently defined?
M >
|
nops(DGinfo("FrameNames"));
|
| (12.1.1.8) |
Part [viii] What are the protected names for the coordinate system N?
M >
|
DGinfo(M, "FrameGlobals");
|
| (12.1.1.9) |
Part [ix] What is the dimension of the manifold M?
M >
|
DGinfo(M, "FrameBaseDimension");
|
| (12.1.1.10) |
Part [x] Create a general 1-form on M whose coefficients are arbitrary functions of the corrdinates.
M >
|
vars := op(DGinfo(M, "FrameIndependentVariables"));
|
| (12.1.1.11) |
M >
|
C := [a1, a2, a3](vars);
|
| (12.1.1.12) |
M >
|
Omega := DGinfo(M, "FrameBaseForms");
|
| (12.1.1.13) |
M >
|
DGzip(C, Omega, "plus");
|
| (12.1.1.14) |
|
|
|
Exercise 2
|
|
Write a program TestFormList which will test if a list of differential forms are all defined on the same space and all have the same degree. Test your program on the following lists of forms.
M >
|
with(DifferentialGeometry):
|
M >
|
DGsetup([x,y,z], M): DGsetup([r,s,t], N):
|
N >
|
L1 := evalDG([dx, dy + dz, dx - dy + dz]);
|
| (12.2.1) |
M >
|
L2 := evalDG([dx, dy, dx &w dy]);
|
| (12.2.2) |
M >
|
L3 := evalDG([dr,ds,dz]);
|
| (12.2.3) |
|
Solution
|
|
M >
|
TestFormList := proc(Omega)
|
M >
|
fr := Tools:-DGinfo(Omega[1], "ObjectFrame");
|
M >
|
p := Tools:-DGinfo(Omega[1], "FormDegree");
|
M >
|
if Tools:-DGinfo(Omega[i], "ObjectFrame") <> fr then return(false) fi;
|
M >
|
if Tools:-DGinfo(Omega[i], "FormDegree") <> p then return(false) fi;
|
| (12.2.1.1) |
| (12.2.1.2) |
| (12.2.1.3) |
|
|
|
Exercise 3
|
|
Write a program CreateForm which will create a general 1-form on the current manifold. Design the program to accept a kernel letter for the coefficient functions.
Remark: This program can be generalized to create a general p-form using the command GenerateForms.
E1 >
|
with(DifferentialGeometry):
|
M >
|
DGsetup([x1,x2,x3,x4], P);
|
| (12.3.1) |
|
Solution
|
|
M >
|
CreateForm := proc(A)
|
M >
|
local M, C, Omega, n, vars;
|
M >
|
M := Tools:-DGinfo("CurrentFrame");
|
M >
|
Omega := Tools:-DGinfo(M, "FrameBaseForms");
|
M >
|
vars := Tools:-DGinfo(M, "FrameIndependentVariables"):
|
M >
|
C:= [seq(cat(A, i), i = 1 .. n)](op(vars));
|
M >
|
DGzip(C, Omega, "plus");
|
| (12.3.1.1) |
|
|
|
Exercise 4
|
|
The following set of exercises deal with the application of DGinfo to vector fields and differential forms defined on jet spaces. For each problem, first identify the relevant keyword from the DGinfo help page.
[i] Find the jet order of the function f, the differential form omega, and the vector field X.
[ii] Find the order of the jet spaces E1 and E2.
[iii] Find the dimension of the jet spaces E1 and E2.
[iv] List the independent variables, the dependent variables, and the jet space variables for the jet space E1.
[v] List the basis vector fields and differential forms for the jet space E2.
[vi] List the contact 1-forms defined on the jet space E1.
[vii] Find the order of the domain jet space for the transformations Phi and PhiP. Find the order of the range jet space for the transformations Phi and PhiP.
[viii] Find the type of the vector fields Y1, Y1P, Y2, and Y2P (See the help page AssignVectorType)
[ix] Find the type of the transformations Phi1, Phi1P, Phi2, and PhiP (See the help page AssignTransformationType)
[x] Find the variables in the expression A which are jet variables for the jet space E1.
[xi] Find the variables in the expression A which are not jet variables for the jet space E1.
E1 >
|
with(DifferentialGeometry): with(JetCalculus): with(Tools):
|
P >
|
DGsetup([t], [u], E1, 3):
|
E1 >
|
DGsetup([x, y], [z], E2, 2):
|
E2 >
|
f := z[1, 1, 1]*z[2, 2]^2;
|
| (12.4.1) |
E2 >
|
omega := evalDG(u[1, 1] &t du[1, 1, 1]);
|
| (12.4.2) |
E1 >
|
X := u[1, 1, 2, 2, 2]*D_x;
|
| (12.4.3) |
E2 >
|
Phi := Transformation(E2, E1,[t= x, u[] = z[1, 1]]);
|
| (12.4.4) |
E2 >
|
PhiP := Prolong(Phi, 3);
|
| (12.4.5) |
E2 >
|
Y1 := AssignVectorType(D_x + x*D_z[]);
|
| (12.4.6) |
E2 >
|
Y1P := Prolong(Y1, 2);
|
| (12.4.7) |
E2 >
|
Y2 := AssignVectorType(u[]*D_t);
|
| (12.4.8) |
E1 >
|
Y2P := Prolong(Y2, 2);
|
| (12.4.9) |
E1 >
|
Phi1 := AssignTransformationType(Flow(Y1, epsilon));
|
| (12.4.10) |
E2 >
|
Phi1P := Prolong(Phi1, 1);
|
| (12.4.11) |
E2 >
|
Phi2 := AssignTransformationType(Flow(Y2, epsilon));
|
| (12.4.12) |
E1 >
|
Phi2P := simplify(Prolong(Phi2, 2));
|
| (12.4.13) |
E1 >
|
A := r*u[1] + s*t*u[1, 1]^2;
|
| (12.4.14) |
|
Solutions
|
|
Part [i] Find the jet order of the functions f, the differential form omega, and the vector field X.
E1 >
|
f; DGinfo(f, "ObjectOrder");
|
| (12.4.1.1) |
E1 >
|
omega, DGinfo(f, "ObjectOrder");
|
| (12.4.1.2) |
Part [ii] Find the order of the jet spaces E1 and E2.
E1 >
|
DGinfo(E1, "FrameJetOrder");
|
| (12.4.1.3) |
E1 >
|
DGinfo(E2, "FrameJetOrder");
|
| (12.4.1.4) |
Part [iii] Find dimension of the jet spaces E1 and E2.
E1 >
|
DGinfo(3, "JetSpaceDimension", E1);
|
| (12.4.1.5) |
E1 >
|
DGinfo(2, "JetSpaceDimension", E2);
|
| (12.4.1.6) |
Part [iv] List the independent variables, the dependent variables and the jet space variables for the jet space E1.
E2 >
|
DGinfo(E1, "FrameIndependentVariables");
|
| (12.4.1.7) |
E2 >
|
DGinfo(E1, "FrameDependentVariables");
|
| (12.4.1.8) |
E2 >
|
DGinfo(E1, "FrameJetVariables");
|
| (12.4.1.9) |
Part [iv] List the basis vector fields and differential forms for the jet space E2.
E2 >
|
DGinfo(E2, "FrameJetVectors");
|
| (12.4.1.10) |
E2 >
|
DGinfo(E2, "FrameJetForms");
|
| (12.4.1.11) |
Part [vi] List the contact 1-forms define on the jet space E1.
E2 >
|
DGinfo(E1, "FrameVerticalBiforms");
|
| (12.4.1.12) |
Part [vii] Find the order of the domain jet space for the transformations Phi and PhiP. Find the order of the range jet space for the transformations Phi and PhiP.
| (12.4.1.13) |
E1 >
|
DGinfo(Phi, "DomainOrder");
|
| (12.4.1.14) |
E1 >
|
DGinfo(PhiP, "DomainOrder");
|
| (12.4.1.15) |
E1 >
|
DGinfo(Phi, "RangeOrder");
|
| (12.4.1.16) |
E1 >
|
DGinfo(PhiP, "RangeOrder");
|
| (12.4.1.17) |
Part [viii] Find the type of the vector fields Y1 and Y2 (See the help page AssignVectorType)
| (12.4.1.18) |
E2 >
|
DGinfo(Y1, "VectorType");
|
| (12.4.1.19) |
E2 >
|
DGinfo(Y1P, "VectorType");
|
| (12.4.1.20) |
| (12.4.1.21) |
E1 >
|
DGinfo(Y2, "VectorType");
|
| (12.4.1.22) |
E1 >
|
DGinfo(Y2P, "VectorType");
|
| (12.4.1.23) |
Part [ix] Find the type of the transformations Phi1, Phi1P, Phi2, and Phi2P (See the help page AssignTransformationType)
| (12.4.1.24) |
E1 >
|
DGinfo(Phi1, "TransformationType");
|
| (12.4.1.25) |
E1 >
|
DGinfo(Phi1P, "TransformationType");
|
| (12.4.1.26) |
| (12.4.1.27) |
E1 >
|
DGinfo(Phi2, "TransformationType");
|
| (12.4.1.28) |
E1 >
|
DGinfo(Phi2P, "TransformationType");
|
| (12.4.1.29) |
Part [x] Find the variables in the expression A which are jet variables for the jet space E1.
| (12.4.1.30) |
E1 >
|
DGinfo(A, "JetIndets");
|
| (12.4.1.31) |
Part [xi] Find the variables in the expression A which are not jet variables for the jet space E1.
| (12.4.1.32) |
E1 >
|
DGinfo(A, "NonJetIndets");
|
| (12.4.1.33) |
|
|
|
�Ian M. Anderson 2006
|