# Self dual tensors in Mathematica 9

Posted 9 years ago
6085 Views
|
4 Replies
|
0 Total Likes
|
 Hi everybody,Is there any convenient way to define self dual tensors in mathematica?The best I could come up with is defining an antisymmetric tensor and summing it with its Hodge dual. But then Mathematica doesn't know that the tensor is self dual and thinks it has more degrees of freedom than it actually has, for example: sa4 = SymmetrizedArray[pos_ :> Subscript[a, pos], {8, 8, 8, 8}, Antisymmetric[All]]; (*This should be 1 + 70, the number of D.O.F 's of a rank 4 antysymmetric tensor in 8 dimensions:*) Length[SymmetrizedArrayRules[sa4]] 71 sa4star = HodgeDual[sa4]; sa4sum = sa4 + sa4star; sa4sum == HodgeDual[sa4sum] True (*This should be 1 + 35, the number of D.O.F 's of a ~self-dual~ rank 4 antysymmetric tensor in 8 dimensions:*) Length[SymmetrizedArrayRules[sa4sum]] 71 Is there a smarter way to define it?Thanks a lot, Ofri
4 Replies
Sort By:
Posted 9 years ago
 not at all a beauty In[101]:= Clear[selfDT] selfDT[rk_Integer?Positive] := Block[{rg = Range[2 rk]}, SymmetrizedArray[ pos_ :> If[Signature[Join[pos, Complement[rg, pos]]] > 0, 1,(* else *) If[First[pos] == 1, 1, -1]] (a @@ If[First[pos] == 1, pos, Complement[rg, pos]]), 2 Table[rk, {rk}], Antisymmetric[All] ] ] /; EvenQ[rk] In[105]:= (# == HodgeDual[#]) & /@ Table[selfDT[o], {o, 2, 8, 2}] Out[105]= {True, True, True, True} 
Posted 9 years ago
 To get rid of the reverse engineering one figures out what the HodgeDual[] is in tensor operations within an euclidean metric  In[33]:= (* (i) Hodge Dual {a,b,c} *) Normal[LeviCivitaTensor[3] . {a, b, c}] Out[33]= {{0, c, -b}, {-c, 0, a}, {b, -a, 0}} replacing the Dot[] by canonical operations it reads In[34]:= (* (ii) Hodge Dual {a,b,c} *) (1/1!) Normal[TensorContract[TensorProduct[LeviCivitaTensor[3], {a, b, c}], {3, 4}]] Out[34]= {{0, c, -b}, {-c, 0, a}, {b, -a, 0}} which makes it easy to apply it twice in order to create the identity In[35]:= (* HodgeDual HodgeDual {a,b,c} *) (1/2!) Normal[ (* HodgeDual *) TensorContract[TensorProduct[LeviCivitaTensor[3],(* HodgeDual *) (1/1!) TensorContract[TensorProduct[LeviCivitaTensor[3], {a, b, c}], {3, 4}]], {{2, 4}, {3, 5}}]] Out[35]= {a, b, c} by the way this is in the references of the LeviCivitaTensor LeviCivitaTensor, Examples -> Applications
Posted 9 years ago
 Reverse engineering would impose something like that In[1]:= Clear[sa4sd, selfD, selfF] selfD[p_] := If[First[p] == 1, p, Complement[Range[8], p]] selfF[p_] := If[First[p] == 1, 1, 2] sa4sd = SymmetrizedArray[pos_ :> ((-1)^(Plus @@ pos))^selfF[pos] (a @@ selfD[pos]), {8, 8, 8, 8}, Antisymmetric[All]]; In[5]:= sa4sd == HodgeDual[sa4sd] Out[5]= True using the build-in Antisymmetric[All] pre-evaluation of pos. Still it holds In[7]:= TensorSymmetry[sa4sd] Out[7]= Antisymmetric[{1, 2, 3, 4}] With Mathematica 10 one possibly could use the Symmetry Specifications under TensorSymmetries directly.
Posted 9 years ago
 (This should be 1 + 35, the number of D.O.F 's of a ~self-dual~ rank 4 antysymmetric tensor in 8 dimensions:) Length[SymmetrizedArrayRules[sa4sum]]71 The right number 35 is of course hidden in this, because one cannot just count the length of SymmetrizedArrayRules[sa4sum]: there are now linear dependencies between them: let's define the sa4 a bit more convenient In[71]:= Clear[sa4, sa4sum, sa4star] sa4 = SymmetrizedArray[pos_ :> a @@ pos, {8, 8, 8, 8}, Antisymmetric[All]]; do the self-dualization In[73]:= sa4star = HodgeDual[sa4]; In[74]:= sa4sum = sa4 + sa4star; In[75]:= sa4sum == HodgeDual[sa4sum] Out[8]= True and now count correctly In[56]:= Remove[coRank] coRank[a_Plus, b_Plus] := MatrixRank[{List @@ a, List @@ b}] In[76]:= Length[Partition[SortBy[Most[Last /@ SymmetrizedArrayRules[sa4sum]], coRank], 2]] Out[76]= 35 the SortBy[] with coRank[] pairs linear dependent coefficients and there are 35 such pairs. Control it the other way around  In[79]:= coRank @@@ Partition[SortBy[Most[Last /@ SymmetrizedArrayRules[sa4sum]], coRank], 2] Out[79]= {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1}