Sie sind auf Seite 1von 12

**************************************************** * 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, ==================== // a b |\ c d with A_ijkl := | |/ i k \\ l m dimension of a tensor. Examples: \ / e f \\ / \ g h /| | \ / n o \ | / \ 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 := | |/ \\ a b \ / e f \\ c d / \ g h /| | i k \ / n o \ | l m / \ p q / /

with

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 ========= // 0 0 0 \ / 0 0 0 \ / 0 with A := || 0 0 x | , | 0 y 0 | , | 0 \\ 0 0 0 / \-x 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 a tensor. Example: 0 0 \\ 0 0 || 0 0 //

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 or C_ij = A_ij_k B_k corresponds to

C_ij := IP_T(A_ij_k,[iI,jJ,sS], B_i,[sS], [iI,jJ]). 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 =================

Das könnte Ihnen auch gefallen