Добавил:
Upload
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Derive_v5_05 / Derive / Users / TensorAlgebra / TensorAlgebra
.doc ****************************************************
* The Derive Tensor Algebra and Analysis Package *
* Documentation for the utility file Tensor.mth *
****************************************************
Written by Hans A. Dudler (619 420-1787) 25 November 1994
Updated for Derive 5 10 November 2001
This text file describes the DERIVE utility file Tensor.mth which
provides definitions and functions for tensor algebra and analysis.
Tensor.mth should normally be loaded as a utility file using the
File > Load > Utility File command.
Note that Tensor.mth activates the case sensitive and word input modes.
As an introduction to the concepts described in this document the
demonstration files Tensor1.dmo and Tensor2.dmo are recommended. They
should be loaded using the File > Load > Demo File command.
1. Tensor Representation in DERIVE.
===================================
From the algebraic point-of-view tensors are an extension of the
vector/matrix concept to higher order arrays. Thus a tensor of rank
(order) 1 is a vector. A rank 2 tensor is a matrix, which DERIVE
treats as a vector of vectors. A rank 3 tensor is a vector of
matrices, a rank 4 tensor is a matrix of matrices, and so on. The
obvious way to handle tensors in DERIVE is therefore to extend the
vector concept to higher ranks (orders).
The equivalent of the ELEMENT function to extract an element from a
tensor is the function (see function descriptions below)
EL_T(A,iv) ,
where A is the name of the tensor and iv is the index 'vector'(quotes
used to distinguish a DERIVE vector from a rank 1 tensor). As an
example consider the tensor of rank (order) 3 and dimension 3
// a b c \ / j k l \ / s t u \\
A := || d e f | , | m n o | , | v w x || .
\\ g h i / \ p q r / \ y z 0 //
Then
EL_T(A,[2,3,2]) returns q
EL_T(A,[3,1,3]) returns u
As is clear from the example, the first index (element 1 of the index
vector) selects the matrix, the second index selects the row-vector
in the selected matrix and the third index finally selects the element
in the row vector. Note that under DERIVE the indices must range from
1 to n (the space dimension), zero (often used in relativity) is not
allowed. From the above example we deduce that
EL_T(A,[i,j,k]) <=> ELEMENT(ELEMENT(ELEMENT(A,i),j),k)
in this case, and the extension to higher ranks is obvious. Note that
EL_T(A,[i]) <=> ELEMENT(A,i)
EL_T(A,[i,j]) <=> ELEMENT(A,i,j) ,
which again demonstrates that the chosen storage philosophy is a
logical extension of the DERIVE vector/matrix concept.
2. Tensor Notation.
===================
Since sub- and superscripts cannot be accomodated easily in an ASCII
file we use the following notation for tensors, which is compatible
with the notational constraints of DERIVE.
A mixed tensor T is typically represented as
T_ijk_lm .
Here T (one or more, UC or LC, Roman or Greek letter) is the tensor
name. The LC letters i,j,k denote the subscripts (covariant indices)
and l,m denote the superscripts (contravariant indices). Totally
covariant or contravariant tensors have the form T_ijk or T__ijk ,
respectively. Thus covariant indices follow the first underscore,
followed by contravariant indices after the second underscore. More
underscores followed by indices may be appended and each time the
underscore switches the type of indices. This method may appear
somewhat cumbersome but it provides the necessary flexibility and
permits maintaining the relative order of subscripts and superscripts,
when necessary. As an example consider raising the first index of the
Riemann curvature tensor of the first kind R_ijkl by means of the
contravariant metric tensor g__ij, in order to obtain the curvature
tensor of the second kind R__i_jkl :
R__i_jkl = g__is R_sjkl
Note the two underscores preceding the indices "i" and "is", which
indicates that they are contravariant (superscripts).
The above notation corresponds to the index notation used in text
books but in can also be used under DERIVE with one essential
difference, however. When a tensor is named T_ijk in DERIVE the index
letters i, j ,k are part of the name and their only function is to
indicate the structure of the tensor. The actual indices (variables)
are contained in an index vector that accompanies the name T_ijk.
In a text-book equation (characterized by the equal sign =) T_ijk
refers to element [i,j,k] of the tensor. In a DERIVE assignment
(characterized by the assignment operator :=) T_ijk denotes a
"packaged" tensor. Under DERIVE the above tensor equation would
appear as follows:
R__i_jkl := IP_T(g__ij,[i,sS],R_ijkl,[sS,j,k,l],[i,j,k,l]).
Here IP_T is the inner-product function (see description below).
Note that each argument tensor is followed by a corresponding index
vector, and that the last argument is the desired index vector for the
result. The summation index must be named sS but all the other
indices in the index vectors could have any names, as long as the
proper correspondences are retained and no name conflicts occur.
With this naming convention the structure of a tensor can be inferred
from its name and it becomes easier to keep track of things when
involved calculations are performed. Additional naming rules could
be used to distinguish between absolute and relative tensors. Thus
tensor densities could be characterized by an identifier consisting
of two identical LC letters (e.g. rr_i). It goes without saying,
however, that any other names may be used with the functions described
below.
In accordance with the above conventions the covariant and
contravariant metric tensors are normally named g_ij and g__ij,
respectively, with
g__ij := g_ij^(-1) ; g := DET(g_ij)
The coordinates are assumed to be the elements of a 'vector'
x := [x1,x2,x3,x4,...]
but can, of course, have arbitrary names.
The underscore (the only special character allowed in DERIVE names)
may also be used at the end of a name to indicate a transformation of
the coordinate frame. Thus, if x_(x) defines a new coordinate frame,
T_ij_klm_ would the name of the transformed tensor.
Note that the index vector shows no distinction between covariant and
contravariant indices. For operations that treat covariant and
contravariant indices differently (such as coordinate transformation)
additional information to separate the two types of indices in the
index vector must be given.
When actual computations are performed on tensors the order of storage
becomes important. The rule adopted here is that storage of a tensor
follows the sequence of indices (from left to right) in the name. Thus
the first index ("i" in T_ijk_lm ) corresponds to the highest level of
vector nesting in DERIVE. Under DERIVE T_i_j and T__j_i are therefore
different entities although they both have a covariant index "i" and a
contravariant index "j". This is especially important when tensor
products are involved. Consider, e.g. the inner product
A__js B_isk = C__j_ik = C_i_j_k = C_ik_j ,
which can be represented by each of the three tensors on the right.
To avoid this ambiguity the general product functions OP_T and IP_T
require the desired index vector of the result as an argument (see
function description below). Since this makes these functions
somewhat cumbersome to use, the simplified forms O_T and I_T are also
provided. These functions assume that the product index vector is
obtained by concatenating the factor index vectors with the summation
indices omitted. Using these functions the above example can be
implemented by the DERIVE expression
C__i_jk := I_T(A__ij,2,B_ijk,2) .
Here the numbers 2 indicate the positions of the summation index in
the factor index vectors. Note that interchanging the arguments would
produce C_ik_j rather than C__i_jk !
Another short cut is provided by the function MI_T which is used to
raise or lower indices by means of the metric tensor.
Transposed Tensors (Isomers).
=============================
A tensor equation expressed in the customary index notation is,
in fact, a relation between tensor elements (components). Thus the
equation
S_ij = A_ij + A_ji
says that element S_12 (for example) is obtained by summing elements
A_12 and A_21 of the tensor "A". In matrix notation the above equation
would be written
S = A + A' ,
where "A'" is the transpose of "A". Thus, instead of a single concept
(matrix A_ij), we are now dealing with two different entities (A and
A') on the right-hand side of the equation. Note that this is a
consequence of "packaging" (storing) the matrix elements into an array
in a predetermined way (rows and columns). According to the rules of
matrix algebra element (1,2) of "S" is now found by summing element
(1,2) of "A" and element (1,2) of "A'", or, in general,
(S)_ij = (A)_ij + (A')_ij .
Thus when matrices (or tensors) are treated as "packages" it becomes
necessary to consider their "isomers", i.e. packages with the same
elements arranged (stored) differently. For matrices (rank 2 tensors)
there are only two isomers: the matrix itself and its transpose. A
tensor of rank r, on the other hand, has r! isomers (the number of
permutations of its indices).
The DERIVE tensor utility provides the function TP_T to form isomers
of a given tensor. Consider, for example, the well known identity
involving the Christoffel symbol of the first kind C_ijk and the
covariant metric tensor g_ij :
d/dx__j (g_ik) = C_ijk + C_jki .
Starting with C_ijk and its index vector [i,j,k], the second term on
the right is obtained from TP_T(C_ijk,[j,k,i],[i,j,k]). Note that the
first index vector in the function call contains the index permutation
of the desired isomer, whereas the second index vector shows the
original sequence. To understand this remember that the last index
vector in the general tensor functions TP_T, IP_T, OP_T and CT_T is
the index vector of the result of the operation. When adding tensors,
elements with equal indices are summed. However, the TP_T function
above has put element [j,k,i] into location [i,j,k] in the second
term. Thus when elements [i,j,k] are summed, the second term
contributes C_jki, as required by the above equation.
To evaluate the left-hand side we obtain the ordinary derivative of
g_ij from OD_T(g_ij,x). The index vector of the result is [i,j,k] ,
with the last index pertaining to the differentiation (see function
description). Since the equation requires the middle index to be the
differentiation index, we have to invoke TP_T again to obtain the
desired isomer. Arguing as above we find that the proper expression
for the left-hand side is TP_T(OD_T(g_ij,x),[i,k,j],[i,j,k]).
The demonstration file Tensor1.dmo illustrates this example with a
particular metric.
A Note on Name Conflicts:
========================
The DERIVE functions VECTOR, SUM and PRODUCT can cause name conflict
problems. Consider, for example, the function S(V) which computes the
sum of the elements of a vector V :
S(V) := SUM(ELEMENT(V,I),I,DIM(V)) .
If V:=[A,I,B] the function will return A+B+2 rather than A+B+I.
Since the tensor functions use VECTOR and SUM extensively, care must
be taken that internal loop index names do not accidentally coincide
with user names. In addition, auxiliary function names used in the
tensor utility file could also cause name conflicts.
In the Tensor Utility File names of auxiliary functions and loop
indices consistently start with a LC letter followed by an UC letter
(examples: sVec, sUbel, jJ). To prevent name conflicts it is
therefore sufficient to avoid this combination in user-defined names.
On the other hand, the elements of index-vector arguments of functions
such as OP_T and IP_T should follow the internal name format, because
they are used internally as loop indices. Recommended index names are
iI, jJ, kK, lL, etc.
3. Function Description.
========================
3.1 General Remarks.
====================
a) The tensor representation philosophy outlined above accomodates
tensors of any rank and dimension. In the present implementation
the only limitation is the length of the index-list vectors 'iNdxa'
and 'iNdxb" which are used by several functions to construct dummy
index vectors. Enough dummy names are provided to accomodate
tensors of rank 12 or less. In the unlikely event that this is
insufficient more names can be added to the lists.
b) Since tensor calculations tend to be slow, it is good practice
to assign variables to intermediate results for later use. Thus,
starting with a metric tensor g_ij one would first compute the
Christoffel symbols by simplifying CHRIS1 and CHRIS2 and then
saving the results as C_ijk and C_ij_k, respectively. Accordingly
the function RIEM1 takes C_ijk and C_ij_k as arguments rather than
starting from the metric tensor. Note that the DERIVE expression
C_ijk := CHRIS1(g_ij,x) does not save any time, since CHRIS1 is
re-computed each time the name C_ijk is encountered. CHRIS1 must be
simplified first, and then C_ijk must be assigned to the result.
To facilitate this assignment procedure DERIVE (starting with
version 3.00) provides the Simplify/Assign operator :== , which
simplifies the right-hand side before assigning it to the left-hand
side. Thus
C_ijk :== CHRIS1(g_ij, x)
will compute the Christoffel symbol of the first kind and assign
the result to C_ijk.
c) In the function descriptions below the following symbols are used:
A, B : tensors of any rank (see 3.1a), any dimension
ivA, ivB : dummy index vectors corresponding to A, B , with
dim(ivA) = rank(A) , dim(ivB) = rank(B)
All elements of these vectors must be different
undeclared variable names. Recommended: iI, jJ ,..
ivN : Numeric index vector pointing to a tensor element.
Elements of ivN must be integers in the range 1...n
(n is the dimension of the space) or variables that
simplify to such integers.
3.2 Tensor Rank, Dimension, Elements.
=====================================
RANK_T(A) , DIM_T(A) : Find rank, dimension of a tensor. Examples:
====================
// a b \ / e f \\
|\ c d / \ g h /|
with A_ijkl := | |
|/ i k \ / n o \ |
\\ l m / \ p q / /
RANK_T(A_ijkl) => 4 , DIM_T(A_ijkl) => 2
DIM_T(A) is the same as DIM(A), except that DIM_T(A) returns
zero when A is a scalar.
EL_T(A,ivN) : Extract an element from a tensor.
===========
ivN : numeric index vector pointing to element, dim(ivN) = rank(A)
Examples:
// a b \ / e f \\
|\ c d / \ g h /|
with A := | |
|/ i k \ / n o \ |
\\ l m / \ p q / /
EL_T(A, [2,1,1,2]) => k , EL_T(A, [1,2,2,2]) => h
NZEL_T(A) : Extract all non-zero elements from a tensor. Example:
=========
// 0 0 0 \ / 0 0 0 \ / 0 0 0 \\
with A := || 0 0 x | , | 0 y 0 | , | 0 0 0 ||
\\ 0 0 0 / \-x 0 0 / \ 0 0 0 //
/ [1,2,3] = x \
NZEL_T(A) => | [2,2,2] = y |
\ [2,3,1] =-x /
GNZE_T(A) : Grouped non-zero elements of a tensor.
=========
Displays the non-zero elements grouped together on the basis of
their absolute value, which shows the symmetry properties of a
tensor. Applied to the above example GNZE_T(A) will return (note
negative indices for negative values)
/ /[ 1, 2, 3] \ \
\ \[-2,-3,-1] = x / , [ [ 2, 2, 2] = y ] /
EL_D(i,j) : Element of Kronecker Delta (1 if i=j, 0 otherwise),
=========
EL_GD(iv1,iv2) : Element of Generalized Kronecker Delta (GD_ij.._kl..)
==============
iv1, iv2 : Numeric covariant, contravariant index vectors with
DIM(iv1) = DIM(iv2)
EL_E(ivN) : Element of Permutation Symbol, rank=dim=dim(ivN)
=========
ivN : Numerical index vector
3.3 Algebraic Tensor Operations.
================================
Since from the DERIVE point-of-view tensors are merely nested
vectors, addition and subtraction of tensors of the same type are
handled by DERIVE automatically. This also holds for multiplication
or division of a tensor by a scalar, and differentiation or
integration with respect to a scalar parameter. Additional tensor
operations are described below. See 3.1c for symbol definition.
TP_T(A,ivA,ivT) : Transpose of a tensor.
===============
ivT is the index vector of the result and must be a permutation
of ivA. This function creates an isomer of A (same elements,
different order of indices, storage). Examples:
T_ikj_ml := TP_T(T_ijk_lm, [iI,kK,jJ,mM,lL], [iI,jJ,kK,lL,mM])
creates a tensor with indices j, k and l,m transposed.
/ a b c \ / a d g \
TP_T(| d e f | , [jJ,iI], [iI,jJ]) => | b e h |
\ g h i / \ c f i /
OP_T(A,ivA,B,ivB,ivP) : Outer product of two tensors.
=====================
O_T(A,B) : short form, assumes ivP = APPEND(ivA,ivB)
ivP : index vector of the product, dim(ivP) = rank(A)+rank(B)
Examples:
with A := [a,b,c] , B := [u,v,w]
/ a u a v a w \
OP_T(A,[iI], B,[jJ], [iI,jJ] => | b u b v b w |
or O_T(A,B) \ c u c v c w /
/ a u b u c u \
OP_T(A,[jJ], B,[iI], [iI,jJ] => | a v b v c v |
or O_T(B,A) \ a w b w c w /
IP_T(A,ivA,B,ivB,ivP) : Inner Product of two tensors.
=====================
I_T(A,sA,B,sB) : short form, assumes ivP = APPEND(ivA',ivB'),
ivA', ivB' : ivA, ivB less summation index
sA,sB : location of summation index in ivA,ivB
ivP : index vector of the product, dim(ivP) = rank(A)+rank(B)-2
ivA and ivB must each contain 'sS' as one element (placeholder
for the summation index). Examples:
The text-book formula C_ij = A_ij_k B_k corresponds to
C_ij := IP_T(A_ij_k,[iI,jJ,sS], B_i,[sS], [iI,jJ]).
or C_ij := I_T(A_ij_k,3,B,1)
With A := [a,b,c] , B := [u,v,w]
IP_T(A,[sS], B,[sS], []) => a u + b v + c w
or I_T(A,1,B,1)
EL_IP_T(A,ivAN,B,ivBN) : One element of an inner product.
======================
ivAN, ivBN : numeric index vectors except for the presence of sS
(summation index) in one location each. Example:
// a b c \ / j k l \ / s t u \\ / P Q R \
with A := || d e f | , | m n o | , | v w x || , B :=| S T U |
\\ g h i / \ p q r / \ y z 0 // \ V W X /
EL_IP_T(A,[2,1,sS], B,[sS,3]) => j R + k U + l X
MI_T(A,n,metric) : Move (raise or lower) an index
================
n : location of index to be moved in index vector. The raised
or lowered index remains in the same location.
metric : g__ij to raise index, g_ij to lower index. Example:
R__i_jkl := MI_T(R_ijkl,1,g__ij)
CT_T(A,ivA,ivC) : Contraction of a tensor.
===============
C_T(A,s1,s2) : short form, assumes ivC=ivA with summ.indices omitted.
s1, s2 : locations of summation indices in ivA. Examples:
The text-book formula B_ij = A_ijk_k corresponds to
B_ij := CT_T(A_ijk_l,[iI,jJ,sS,sS],[iI,jJ])
/ a b c \
C_T( | d e f | ,1,2) => a + e + i
\ g h i /
CI_T(A,ivA,B,ivB,ivC) : Contracted Inner product (double summation)
=====================
C_I_T(A,sA,tA,B,sB,tB) : short form, assumes ivC = APPEND(ivA',ivB'),
ivA', ivB' : ivA, ivB less summation indices
sA,tA : location of 'sS', 'tT' in ivA
sB,tB : location of 'sS', 'tT' in ivB
ivC : index vect.of contracted product, dim(ivC)=rank(A)+rank(B)-4
ivA and ivB must each contain 'sS' and 'tT' (summ.indices)
Example: The text-book formula C_i = A_si_t B_t_s becomes
C_i := CI_T(A_ij_k,[sS,iI,tT],B_i_j,[tT,sS],[iI])
3.4 Differential Tensor Operations.
===================================
Note: 'Di' stands for d/dx__i
OD_T(A,x) : Ordinary derivative of a tensor (Dm A_ij.._kl..).
=========
A may be a scalar. Note that rank(OD_T) is one higher than rank(A).
The new covariant index is assumed to be appended at the end of the
index string. Thus A_ij.._kl.. becomes A_ij.._kl.._m .
with A := [x1 COS(x2), x1 SIN(x2)] , x := [x1, x2] ,
/ COS(x2) -x1 SIN(x2) \
OD_T(A,x) => | |
\ SIN(x2) x1 COS(x2) /
CD_T(A,ncov,weight,x,C_ij_k) : Covariant derivative of a tensor.
============================
A : mixed tensor with structure A_ij.._kl.. (covariant indices
followed by contravariant indices). May be a scalar.
ncov : number of covariant indices (i,j,..)
weight : weight of tensor ( = 0 for absolute tensor,
= 1 for density, = n for relative tensor of weight n)
x : coordinate vector [x1,x2,x3,...]
C_ij_k : Christoffel symbol of the 2nd kind.
To handle more elaborately structured tensors (e.g. A_i_j_k_lm)
use TP_T to first create the required structure and use it again
again after CD_T to transform back to the original structure.
Note that rank(CD_T) is one higher than rank(A). The new covariant
index is assumed to be appended at the end of the index string.
Thus A_ij.._kl.. becomes A_ij.._kl.._m .
Example:
with A := g__ij (contravariant metric tensor in 3 dimensions)
// 0 0 0 \ / 0 0 0 \ / 0 0 0 \\
CD_T(A,0,0,x,C_ij_k) => || 0 0 0 | , | 0 0 0 | , | 0 0 0 ||
\\ 0 0 0 / \ 0 0 0 / \ 0 0 0 //
LD_T(A,v,ncov,weight,x) : Lie derivative of A relative to vector v
=======================
A : mixed tensor with structure A_ij.._kl.. (covariant indices
followed by contravariant indices). May be a scalar.
ncov : number of covariant indices (i,j,..) of A
weight : weight of tensor A ( = 0 for absolute tensor,
= 1 for density, = n for relative tensor of weight n)
v : contravariant vector
x : coordinate vector [x1,x2,x3,...]
To handle more elaborately structured tensors (e.g. A_i_j_k_lm)
use TP_T to first create the required structure and use it again
after LD_T to transform back to the original structure.
Note that the Lie derivative of a tensor A is a tensor of the same
structure and weight as A.
Example: with
A_i := [U(X,Y),V(X,Y)] (covariant vector) , x := [X,Y] , v := x
LD_T(A,v,1,0,x) => [X dU/dX + Y dU/dY +U , X dV/dX + Y dV/dY +V]
DV_T(A,ncov,weight,sA,x,C_ij_k) : (Covariant) Divergence of a Tensor
===============================
A : mixed tensor with structure A_ij.._kl.. and at least one
contravariant index).
ncov : number of covariant indices (i,j,..) of A
weight : weight of tensor A ( = 0 for absolute tensor,
= 1 for density, = n for relative tensor of weight n)
sA : location of summ.index in index vector of A ( > ncov)
x : coordinate vector [x1,x2,x3,...]
C_ij_k : Christoffel symbol (2nd kind)
To handle more elaborately structured tensors (e.g. A_i_j_k_lm)
use TP_T to first create the required structure and use it again
after LD_T to transform back to the original structure.
Note that rank(DV_T) is one lower than rank(A). The index vector of
the result is the index vector of A with the summ.index left out.
Example: If G_i_j is the (mixed) Einstein tensor in 4-space
DV_T(G_i_j,1,0,2,x,C_ij_k) => [0,0,0,0]
GC_T(A,x) : Generalized Curl (GD_ij..r_kl..s Ds A_kl..),
=========== GD : generalized Kronecker delta
A : covariant tensor (or scalar).
The rank of the result is one higher than the original and the
new covariant index is appended at the right. Example:
with A := [A1,A2,A3] , x := [X,Y,Z]
/ 0 dA1/dY - dA2/dX dA1/dZ - dA3/dX\
GC_T(A,x) => |dA2/dX - dA1/dY 0 dA2/dZ - dA3/dY|
\dA3/dX - dA1/dZ dA3/dY - dA2/dZ 0 /
3.5 Coordinate Transformation.
==============================
Let the new coordinate vector be x_ := [x1_,x2_,x3_,...] and let
x = [x(x_)] be the functions expressing the old coordinates in terms
of the new ones.
JACOB(x,x_) : Jacobian matrix of the transformation. Example:
===========
with x := [x1_ COS(x2_) , x1_ SIN(x2_)] , x_ := [x1_,x2_] ,
/ COS(x2_) -x1_ SIN(x2_) \
JACOB(x,x_) => | |
\ SIN(x2_) x1_ COS(x2_) /
TF_T(A,ncov,weight,JM,JM_) : Transform a tensor to new coordinates.
==========================
A : mixed tensor with structure A_ij.._kl.. (covariant indices
followed by contravariant indices)
ncov : number of covariant indices (i,j,..)
weight : weight of tensor ( = 0 for absolute tensor,
= 1 for density, = n for relative tensor of weight n)
JM : Jacobian matrix of transformation ( := JACOB(x,x_) )
JM_ : Inverse Jacobian matrix ( := JM^-1 )
To handle more elaborately structured tensors (e.g. A_i_j_k_lm)
use TP_T to first create the required structure and use it again
after TF_T to transform back to the original structure.
Example:
/ COS(x2_) -x1_ SIN(x2_) \
with A := [a,b] , JM := | | ,
\ SIN(x2_) x1_ COS(x2_) /
TF_T(A,1,0,JM,JM_) =>
[a COS(x2_) + b SIN(x2_) , b x1_ COS(x2_) - a x1_ SINx2_)]
3.6 Special Tensors.
====================
Note: Different text books use different isomers for the various
special tensors. Except for the Ricci and Einstein tensors (R_ij
and G_ij) the definitions given in Korn & Korn: Mathematical
Handbook for Scientists and Engineers (chapter 16) are adopted
here. The definitions of R_ij and G_ij were made to agree with
more recent texts on General Relativity, which has the effect of
changing the signs of these tensors.
DELTA(dim) : Kronecker Delta (D_i_j),
==========
dim : tensor dimension
GDELTA(ncov,dim) : Generalized Kronecker Delta (GD_ij.._kl..)
================
ncov : number of covariant indices (= no.of contravariant indices)
dim : dimension
EPS(dim) : Permutation tensor, rank = dimension (E_ij.. or E__ij..)
========
dim : tensor dimension
CHRIS1(g_ij,x) : Christoffel symbol of the 1st kind (C_ijk)
==============
g_ij : covariant metric tensor
x : coordinate 'vector'.
CHRIS2(g_ij,g__ij,x) : Christoffel symbol of the 2nd kind (C_ij_k)
====================
g_ij : covariant metric tensor
g__ij : contravariant metric tensor
x : coordinate 'vector'.
RIEM1(C_ijk,C_ij_k,x) : Riemann curvature tensor of the 1st kind
===================== (R_ijkl)
C_ijk : Christoffel symbol (1st kind)
C_ij_k : Christoffel symbol (2nd kind)
x : coordinate 'vector'
EL_RIEM1(C_ijk,C_ij_k,x,i,j,k,l) : Element of Riemann tens. (1st kind)
================================
C_ijk : Christoffel symbol (1st kind)
C_ij_k : Christoffel symbol (2nd kind)
x : coordinate 'vector'
i,j,k,l : numeric indices of desired element R_ijkl
RIEM2(C_ij_k,x) : Riemann curvature tensor of the 2nd kind (R__i_jkl
=============== = g__is R_sjkl)
C_ij_k : Christoffel symbol (2nd kind)
x : coordinate 'vector'
EL_RIEM2(C_ij_k,x,i,j,k,l) : Element of Riemann tensor of the 2nd kind
==========================
C_ij_k : Christoffel symbol (2nd kind)
x : coordinate 'vector'
i,j,k,l : numeric indices of desired element R_ijk_l
RICCI(C_ij_k,x) : Covariant Ricci tensor (R_ij = R__s_isj = -R__s_ijs)
===============
C_ij_k : Christoffel symbol (2nd kind)
EINST(R_ij,g_ij,g__ij) : Covariant Einstein tensor (G_ij)
======================
R_ij : covariant Ricci Tensor
g_ij : covariant metric tensor
g__ij : contravariant metric tensor
WEYL(R_ijkl,R_ij,g_ij) : Weyl Tensor (Conformal Tensor)
======================
R_ijkl : Riemann curvature tensor (1st kind)
R_ij : covariant Ricci tensor
g_ij : covariant metric tensor
3.7 Miscellaneous Functions.
============================
DI_NZEL( NZEL_T(A) ), DI_GNZE( GNZE(A) )
========================================
These functions, when applied to the expressions resulting from
NZEL_T or GNZE_T decrement all indices in the display by 1. This
makes it easier to compare elements with tensors that use a
[0,...(dim-1)] index range rather than the DERIVE [1,...dim] range.
================== END OF FILE =================
Соседние файлы в папке TensorAlgebra
