1.3. Bases on inner bundles and complex bases

Starting with version 0.9, xTensor`  is capable of dealing with complex tensors and vector bundles. The function DefBasis has been extended accordingly and it now allows the user to define complex bases, through the option Dagger, taking the values Real or Complex. A basis on a real vbundle is real by default:

In[94]:=

Dagger[polar]

Out[94]=

polar

But let us see what happens when we define one on a complex bundle,

In[95]:=

$Bases

Out[95]=

{polar, cartesian}

In[96]:=

DefBasis[comp, InnerC, {-1, +1}, Dagger→Complex, BasisColor→ RGBColor[0, 0, 1]]

** DefCovD: Defining parallel derivative PDcomp[-a] .

** DefTensor: Defining torsion tensor TorsionPDcomp[a, -b, -c] .

** DefTensor: Defining non-symmetric Christoffel tensor ChristoffelPDcomp[a, -b, -c] .

** DefTensor: Defining vanishing Riemann tensor RiemannPDcomp[-a, -b, -c, d] .

** DefTensor: Defining vanishing Ricci tensor RicciPDcomp[-a, -b] .

** DefTensor: Defining nonsymmetric AChristoffel tensor  AChristoffelPDcomp[A, -b, -C] .

** DefTensor: Defining nonsymmetric AChristoffel tensor  AChristoffelPDcomp†[A†, -b, -C†] .

** DefTensor: Defining vanishing FRiemann tensor FRiemannPDcomp[-a, -b, -C, D] .

** DefTensor: Defining vanishing FRiemann tensor FRiemannPDcomp†[-a, -b, -C†, D†] .

** DefTensor: Defining antisymmetric +1 density etaUpcomp[A, B] .

** DefTensor: Defining antisymmetric +1 density etaUpcomp†[A†, B†] .

** DefTensor: Defining antisymmetric -1 density etaDowncomp[-A, -B] .

** DefTensor: Defining antisymmetric -1 density etaDowncomp†[-A†, -B†] .

In[97]:=

$Bases

Out[97]=

{polar, cartesian, comp, comp†}

A conjugate basis has also appeared on the conjugate manifold:

In[98]:=

Dagger/@{comp, comp†}

Out[98]=

{comp†, comp}

In[99]:=

VBundleOfBasis/@{comp, comp†}

Out[99]=

{InnerC, InnerC†}

Notice how negative cnumbers do not denote covariant indices:

In[100]:=

{Basis[{-1, comp}, -a], Basis[{-1, comp†}, -a]}

Out[100]=

{e_a ^( -1), e_a ^( -1)}

The basis objects of both bases look the same, because

In[101]:=

Dagger[Basis]

Out[101]=

Basis

In[102]:=

Dagger[Basis[{-1, comp}, -a]]

Out[102]=

e_a ^( -1)

In[103]:=

InputForm[%]

Out[103]//InputForm=

Basis[-a, {-1, comp†}]

and their cnumbers are also defined to be the same. This can be changed, with the new function DaggerBCIndex.Remember how in xTensor` the conjugates of indices were given by

In[104]:=

DaggerIndex/@{a, b, A, B}

Out[104]=

{a, b, A†, B†}

But we cannot change the definition associated to DaggerIndex[{1, complex}],  because complex is too deep to be given an upvalue. Let us see how we can use  DaggerCIndex to solve this with an example. We want to complexify a real basis:

In[105]:=

DefBasis[test, TangentM3, {1, 2, 3}]

** DefCovD: Defining parallel derivative PDtest[-a] .

** DefTensor: Defining torsion tensor TorsionPDtest[a, -b, -c] .

** DefTensor: Defining non-symmetric Christoffel tensor ChristoffelPDtest[a, -b, -c] .

** DefTensor: Defining vanishing Riemann tensor RiemannPDtest[-a, -b, -c, d] .

** DefTensor: Defining vanishing Ricci tensor RicciPDtest[-a, -b] .

** DefTensor: Defining antisymmetric +1 density etaUptest[a, b, c] .

** DefTensor: Defining antisymmetric -1 density etaDowntest[-a, -b, -c] .

In[106]:=

? DaggerCIndex

DaggerCIndex[basis, cindex] returns the conjugated index to the cindex (assumed to belong to basis), in general a Dir expression.

In[107]:=

test/:DaggerCIndex[test, {1, test}] = {2, test} ;

test/:DaggerCIndex[test, {2, test}] = {1, test} ;

test/:DaggerCIndex[test, {1, -test}] = {2, -test} ;

test/:DaggerCIndex[test, {2, -test}] = {1, -test} ;

And now

In[111]:=

Dagger/@{Basis[{1, test}, -a], Basis[{2, -test}, a]}

Out[111]=

{e_a ^( 2), e_ ( 2)^a }

If we define a complex tensor on M3 we can see that this works

In[112]:=

DefTensor[J[a], M3, Dagger→ Complex]

** DefTensor: Defining tensor J[a] .

** DefTensor: Defining tensor J†[a] .

In[113]:=

Dagger[J[{2, test}]]

Out[113]=

J†_ ^1

We can even establish more complicated relations, if we remember that Basis and Dir act as inverses of each other

In[114]:=

test/:DaggerCIndex[test, {1, test}] = Dir[I Basis[{2, test}, -a]] ;

test/:DaggerCIndex[test, {2, test}] = Dir[I Basis[{1, test}, -a]] ;

In[116]:=

Dagger[J[{2, test}]]

Out[116]=

 J†_ ^1

In[117]:=

UndefBasis[test] ;

** UndefTensor: Undefined non-symmetric Christoffel tensor ChristoffelPDtest

** UndefTensor: Undefined vanishing Ricci tensor RicciPDtest

** UndefTensor: Undefined vanishing Riemann tensor RiemannPDtest

** UndefTensor: Undefined torsion tensor TorsionPDtest

** UndefCovD: Undefined parallel derivative PDtest

** UndefTensor: Undefined antisymmetric +1 density etaUptest

** UndefTensor: Undefined antisymmetric -1 density etaDowntest

** Undefined basis test


Created by Mathematica  (May 16, 2008) Valid XHTML 1.1!