# Operators

The second example creates several operators using creation and annihilation operators

Operators.Quanty
-- A basis consists of:
-- a number of Fermionic modes or spin-orbitals
NF=6
-- a number of Bosonic modes (phonon modes, ...)
NB=0

-- Once we have a basis we can define operators.
-- Operators are defined in second quantization.
-- We thus need creation and annihilation operators.

-- Operators are created with the function
-- "NewOperator". This function takes as a first
-- argument the type of operator to create and
-- further arguments are type specific.

-- The creation operator on site 0 is created by
-- the following command
OppC0=NewOperator("Cr",NF,0)

-- The annihilation operator on site 0 is created
-- by the following command
OppA0=NewOperator("An",NF,0)

-- you can print operators
print(OppC0)

-- the important part of this printout is given by
-- the last line "C  0 |  1.000000000000000E+00"
-- this tells you that the operator creates at
-- position 0 with prefactor 1

-- you are allowed to do mathematics with
-- operators, i.e. the number operator acting
-- on site 0 is given as:
OppCA0 = OppC0 * OppA0
print(OppCA0)

-- the program knows about commutation relations,
-- so a^+_0 a_0 + a_0 a^+_0 = 1
Oppdelta = OppC0 * OppA0 + OppA0 * OppC0
print(Oppdelta)

-- You see that this operator indeed has the
-- correct form: "|  1.000000000000000E+00"
-- but it also has one element of length 2:
-- "C  0 A  0 |  0.000000000000000E+00"
-- the total operator is the sum over these two terms.
-- The term of length two has prefactor 0, but it is still
-- in the list of operators and thus takes memory.
-- You can remove small elements with the command
-- Chop
Oppdelta.Chop()
print(Oppdelta)

-- the number operator can also be created at once,
OppN0 = NewOperator("Number",NF,0,0)
print(OppN0)

-- you can create sum's of operators at once,
-- evaluate to see what it does
Opp2=NewOperator("Cr", NF, {0,1,2}, {0.1,0.2,0.3})
print(Opp2)
Opp3=NewOperator("Number", NF, {0,1,2}, {0,1,5}, {0.1,0.2,0.3})
print(Opp3)

-- Operators have a name which is shown in error
-- messages and when you print the operator
-- sometimes it can be good to set the name
Opp4 =  1+((1+I) * Opp2*Opp3 + 2.7 * OppCA0 ) * Opp3
Opp4.Name = "My fantastic Operator"
print(Opp4)

The output is:

Operators.out
Operator: Creation operator on site 0
QComplex         =          0 (Real==0 or Complex==1 or Mixed==2)
MaxLength        =          1 (largest number of product of lader operators)
NFermionic modes =          6 (Number of fermionic modes (site, spin, orbital, ...) in the one particle basis)
NBosonic modes   =          0 (Number of bosonic modes (phonon modes, ...) in the one particle basis)

Operator of Length   1
QComplex      =          0 (Real==0 or Complex==1)
N             =          1 (number of operators of length   1)
C  0 |  1.000000000000000E+00

Operator: Operator
QComplex         =          0 (Real==0 or Complex==1 or Mixed==2)
MaxLength        =          2 (largest number of product of lader operators)
NFermionic modes =          6 (Number of fermionic modes (site, spin, orbital, ...) in the one particle basis)
NBosonic modes   =          0 (Number of bosonic modes (phonon modes, ...) in the one particle basis)

Operator of Length   2
QComplex      =          0 (Real==0 or Complex==1)
N             =          1 (number of operators of length   2)
C  0 A  0 |  1.000000000000000E+00

Operator: Operator
QComplex         =          0 (Real==0 or Complex==1 or Mixed==2)
MaxLength        =          2 (largest number of product of lader operators)
NFermionic modes =          6 (Number of fermionic modes (site, spin, orbital, ...) in the one particle basis)
NBosonic modes   =          0 (Number of bosonic modes (phonon modes, ...) in the one particle basis)

Operator of Length   0
QComplex      =          0 (Real==0 or Complex==1)
N             =          1 (number of operators of length   0)
|  1.000000000000000E+00

Operator of Length   2
QComplex      =          0 (Real==0 or Complex==1)
N             =          1 (number of operators of length   2)
C  0 A  0 |  0.000000000000000E+00

Operator: Operator
QComplex         =          0 (Real==0 or Complex==1 or Mixed==2)
MaxLength        =          2 (largest number of product of lader operators)
NFermionic modes =          6 (Number of fermionic modes (site, spin, orbital, ...) in the one particle basis)
NBosonic modes   =          0 (Number of bosonic modes (phonon modes, ...) in the one particle basis)

Operator of Length   0
QComplex      =          0 (Real==0 or Complex==1)
N             =          1 (number of operators of length   0)
|  1.000000000000000E+00

Operator: CrAn
QComplex         =          0 (Real==0 or Complex==1 or Mixed==2)
MaxLength        =          2 (largest number of product of lader operators)
NFermionic modes =          6 (Number of fermionic modes (site, spin, orbital, ...) in the one particle basis)
NBosonic modes   =          0 (Number of bosonic modes (phonon modes, ...) in the one particle basis)

Operator of Length   2
QComplex      =          0 (Real==0 or Complex==1)
N             =          1 (number of operators of length   2)
C  0 A  0 |  1.000000000000000E+00

Operator: Cr
QComplex         =          0 (Real==0 or Complex==1 or Mixed==2)
MaxLength        =          1 (largest number of product of lader operators)
NFermionic modes =          6 (Number of fermionic modes (site, spin, orbital, ...) in the one particle basis)
NBosonic modes   =          0 (Number of bosonic modes (phonon modes, ...) in the one particle basis)

Operator of Length   1
QComplex      =          0 (Real==0 or Complex==1)
N             =          3 (number of operators of length   1)
C  0 |  1.000000000000000E-01
C  1 |  2.000000000000000E-01
C  2 |  3.000000000000000E-01

Operator: CrAn
QComplex         =          0 (Real==0 or Complex==1 or Mixed==2)
MaxLength        =          2 (largest number of product of lader operators)
NFermionic modes =          6 (Number of fermionic modes (site, spin, orbital, ...) in the one particle basis)
NBosonic modes   =          0 (Number of bosonic modes (phonon modes, ...) in the one particle basis)

Operator of Length   2
QComplex      =          0 (Real==0 or Complex==1)
N             =          3 (number of operators of length   2)
C  0 A  0 |  1.000000000000000E-01
C  1 A  1 |  2.000000000000000E-01
C  2 A  5 |  3.000000000000000E-01

Operator: My fantastic Operator
QComplex         =          1 (Real==0 or Complex==1 or Mixed==2)
MaxLength        =          5 (largest number of product of lader operators)
NFermionic modes =          6 (Number of fermionic modes (site, spin, orbital, ...) in the one particle basis)
NBosonic modes   =          0 (Number of bosonic modes (phonon modes, ...) in the one particle basis)

Operator of Length   0
QComplex      =          1 (Real==0 or Complex==1)
N             =          1 (number of operators of length   0)
|  1.000000000000000E+00  0.000000000000000E+00

Operator of Length   2
QComplex      =          1 (Real==0 or Complex==1)
N             =          1 (number of operators of length   2)
C  0 A  0 |  2.700000000000000E-01  0.000000000000000E+00

Operator of Length   3
QComplex      =          1 (Real==0 or Complex==1)
N             =          4 (number of operators of length   3)
C  1 C  0 A  0 |  2.000000000000000E-03  2.000000000000000E-03
C  2 C  0 A  0 |  3.000000000000000E-03  3.000000000000000E-03
C  1 C  0 A  1 | -4.000000000000001E-03 -4.000000000000001E-03
C  2 C  1 A  1 |  1.200000000000000E-02  1.200000000000000E-02

Operator of Length   4
QComplex      =          1 (Real==0 or Complex==1)
N             =          2 (number of operators of length   4)
C  1 C  0 A  1 A  0 | -5.400000000000000E-01 -0.000000000000000E+00
C  2 C  0 A  5 A  0 | -8.100000000000001E-01 -0.000000000000000E+00

Operator of Length   5
QComplex      =          1 (Real==0 or Complex==1)
N             =          3 (number of operators of length   5)
C  2 C  1 C  0 A  1 A  0 | -1.200000000000000E-02 -1.200000000000000E-02
C  2 C  1 C  0 A  5 A  0 |  1.200000000000000E-02  1.200000000000000E-02
C  2 C  1 C  0 A  5 A  1 | -1.200000000000000E-02 -1.200000000000000E-02