=============================================================================== HELP FOR: grdef =============================================================================== CALLING SEQUENCE: grdef ( `new_tensor_name{indices}` ): grdef ( `new_tensor_name{indices} := tensor_equation` ): grdef ( `new_tensor_name{indices} := tensor_eq{indices}`, [symList], [asymList], [index_range] ): ------------------------------------------------------------------------------- SYNOPSIS: - This command is used to define new GRTensorII objects (eg. tensors) which are not included in the standard libraries. - grdef() allows the user to specify: exterior/interior products of tensors, covariant derivatives of tensors, summations over indices, symmetrization over indices, restricted summations over indices, tensors dependent on multiple metrics. - Symmetries present in the newly defined tensor can be specified, allowing optimized calculation. -- I. Defining a new tensor --------------------------------------------------- There are two ways to define a new tensor using grdef. The first method is to simply give it a name and `index structure'. The second method provides a complete definition in terms of previously defined tensors. Compare the following two invocations of grdef(): EG1. grdef ( `A{a b}` ): This command simply defines a covariant two-index tensor, A. This tensor would be accessed as A(dn,dn) in commands such as grcalc() and grdisplay(). However, no prescription for calculating this tensor has been given. Thus, when the command grcalc ( A(dn,dn) ): is issued, the user will be prompted to enter the components of A(dn,dn). EG2. grdef ( `G2{a b} := R{a b} - (1/2)*Ricciscalar*g{a b} + Lambda*g{a b}` ): This command defines the contravariant two-index tensor G2 in terms of a number of previously defined tensors. In this case, when the command grcalc ( G2(dn,dn) ): is issued, G2 will be calculated based on the given defining function. If R(dn,dn), Ricciscalar and g(dn,dn) have not already been calculated, then their calculation will be carried out automatically before that of G2(dn,dn). -- II. Index lists ------------------------------------------------------------ The following rules can be used to specify index lists in tensors: - indices must be specified as lower-case letters a,...,z seperated by spaces. Contravariant indices are preceded by a hat, ^. Indexes in a basis are enclosed in round brackets (, ). a, b, c, ... - covariant indices ^a, ^b, ^c, ... - contravariant indices (a), (b), (c), ... - covariant basis indices ^(a), ^(b), ^(c), ... - contravariant basis indices - indices that follow a semi-colon, `;', indicate covariant derivatives. Indices that follow a comma, `,', indicate ordinary partial derivatives. - if a particular index appears twice in a tensor-product, it must appear once as a covariant index and once as a contravariant index. In this case a summation over the given index is assumed. Such summations can only occur on the right-hand side of tensor definitions. - the product of tensors or the product of a tensor with a scalar function is indicated with the * symbol. Such products can only occur on the right-hand side of tensor definitions. - for each index on the left-hand side of a tensor definition, there must be a corresponding free index (ie. one that is not involved in a summation) in each term of the right-hand side. - Warning: Index and new tensor names should not conflict with any names that are already assigned in the current MapleV session. The following are examples grdef() commands: > grdef ( `A{^a b c}` ): > grdef ( `dR{^a} := R{^a ^b ; b}` ): > grdef ( `bR{(a) (b)} := R{c d}*e{(a) ^c}*e{(b) ^d}` ): > grdef ( `RR{a c} := (1/2)*R{a b c d}*R{^b ^d} + R{a c}` ): > grdef ( `X{a c} := R{a b c d}` ): ### Invalid (indices on left and right don't match) ### > grdef ( `X{a b ^b}` ): ### Invalid (summation implied on left-hand side of the definition) ### > grdef ( `X{a b}*X{c ^b} := X2{a c}` ): ### Invalid (left-hand side must consist of a single object) ### -- III. Symmetrizations ------------------------------------------------------- The operation of symmetrization can be specified in the index lists on the right-hand side of tensor definitions. - Round braces (, ), around a set of indices indicates that a symmetrization should be performed overthese indices. That is, a summation over all permutations of these indices is to be carried out and the result divided by the number of permutations. The following command EG3a. grdef ( `A{a b c d} := R{a (b c) d}` ): is equivalent to EG3b. grdef ( `A{a b c d} := (1/2)*( R{a b c d} + R{a c b d} )` ): - Square braces [, ], around a set of indices indicates that an anti- symmetrization is to be performed. That is, a summation over the even permutations is carried out, and from this is subtracted a summation over the odd permutations of the indices. The result is divided by the total number of permutations. The following command EG4a. grdef ( `A{a b c d} := R{[a b c] d}` ): is equivalent to EG4b. grdef ( `A{a b c d} := (1/6)*( R{a b c d} + R{b c a d} + R{c a b d} - R{b a c d} - R{a c b d} - R{c b a d} )` ): - The braces are determined to be `covariant' or `contravariant' based on the index which immediately follows open braces, (, [, and the index which precedes close braces, ), ]. Thus EG5a. grdef ( `A{a ^b c} := Chr{(a ^b c)}` ): is equivalent to EG5b. grdef ( `A{a ^b c} := (1/2)*( Chr{a ^b c} + Chr{c ^b a} )` ): - Indices enclosed in a pair of vertical bars, |, are excluded from the symmetrization. Thus EG6a. grdef ( `A{a b c d} := R{(a |b c| d)}` ): is equivalent to EG6b. grdef ( `A{a b c d} := (1/2)*( R{a b c d} + R{d b c a} )` ): -- IV. Symmetries ------------------------------------------------------------- In the above examples, it is assumed that the newly defined tensors do not possess any index symmetries. Thus, the calculations functions created automatically for these tensors can end up being very inefficient, as redundant components will be recalculated. Tensor indices can be indicated on the left-hand side of the tensor definition using brackets as for symmetrizations. - Round braces (, ), indicate the newly defined tensor is symmetric in the enclosed indices. The calculation function created by grdef() for the the following tensor, A, will be symmetric in its two indices: EG7a. grdef ( `A{(a c)} := R{a b c d}*R{^b ^d}` ): The following tensor is symmetric in its first two and last two indices: EG8a. grdef ( `A{(a b) (c d)}` ): - Square braces [, ], indicate the newly defined tensor is anti-symmetric in the enclosed indices. The following tensor is anti-symmetric in its first three indices: EG9a. grdef ( `A{[a b c] d}` ): The following tensor is antisymmetric in its first two and symmetric in its last two indices: EG10a. grdef ( `A{[a b] (c d)}` ): - The covariant or contravariant nature of the braces are determined by the index which immediately follows an open brace (, [, or the index which immediately precedes a close brace ), ]. The following tensor is symmetric in its covariant first and third indices, the second (contravariant) index does not enter into the symmetrization: EG11a. grdef ( `A{(a ^b c)}` ): - Indices enclosed in a pair of vertical bars, |, are excluded from the symmetrization. The calculation function created for the following tensor will be symmetric in its first and fourth indices: EG12a. grdef ( `A{(a |b c| d)}` ): - Alternatively, symmetries in newly defined tensors can also be specified by the use of symmetry lists. grdef() possesses an optional sym={} and asym={} arguments which can be used to list asymmetries. The symmetries are specified as sets of lists of the index numbers involved in the symmetry. The above examples could be equivalently written as: EG7b. grdef ( `A{a c} := R{a b c d}*R{^b ^d}`, sym={[1,2]} ): EG8b. grdef ( `A{a b c d}`, sym={[1,2],[3,4]} ): EG9b. grdef ( `A{a b c d}`, aysm={[1,2,3]} ): EG10b. grdef ( `A{a b c d}`, sym={[3,4]}, asym={[1,2]} ): EG11b. grdef ( `A{a ^b c}`, sym={[1,3]} ): EG12b. grdef ( `A{a b c d}`, sym={[1,4]} ): - Note, currently the specifiable symmetries are limited to direct symmetries or antisymmetries among sets of indices. More complicated symmetries, such as the cyclic permutation symmetry of the Riemann tensor, for example, can not yet be easily specified using grdef(). -- V. Other Notes ------------------------------------------------------------ - Using the optional restrict={} argument it is possible to restrict the range over which summations over a particular index are performed. Thus in the following example, summations over b and d are only performed over the indices 2, 3, 4: EG13. grdef ( `R3{a c} := R{a b c d}*g{^a ^b}`, restrict={c=2..4,d=2..4} ): - It is possible for the definition to involve terms which are calculated for alternate metrics (useful, for example, in junction calculations). Tensors which are indexed usin angle braces, <, >, will refer to tensors which are to be calculated for an alternate metric. Thus, the following definition can be used to take the difference of two metrics: EG14. grdef ( `Dg{a b} := g{a b} - g<1>{a b}` ): When this object is calculated, the label `1' has to be assigned to the name of a metric which has previously been loaded. This is done as follows: > grcalc ( 1=r2, Dg(dn,dn) ): - Single index objects can be assigned to a list explicitly using the form: EG15. grdef ( `v{^a} := [ 0, 0, 0, g(t) ]` ): for instance. - The Kronecker delta, kdelta{^a b} := diag(1,1,...,1), can be used to explicitly specify particular indices of a tensor. For instance, if the coordinates are [r,theta,phi,t], the t-component can be selected using the form kdelta{^a $t}. The `$' character always precedes the name of the component to be selected: EG16. grdef ( `v{^a} := g(t)*kdelta{^a $t}` ): This command produces a vector equivalent to that of EG15 (however in this case, the vector must be grcalc()ed before its components are assigned). - The grdef() command supercedes the older grdefine() command. ------------------------------------------------------------------------------- SEE ALSO: grcalc, grt_objects, grt_operators, grt_basis, kdelta, grdefine. ===============================================================================