CreateClusterHamiltonian

The function CreateClusterHamiltonian(TB, cluster, …) generates a Hamiltonian operator using the input tight-binding Object (TB) and the information regarding the cluster (cluster). The cluster can be an open cluster or a periodic one. See also Tight Binding object.

Open Cluster

HCl, HClTB = CreateClusterHamiltonian(TB, {“open”, AtomPos}, …)

Input

  • TB: tight-binding object
  • AtomPos: list of atoms, their positions and (optionally) their spin-orbitals. AtomPos can have the format: {Atom.Name, Atom.Position, {Atom.Shells}} with Atom.Shells is an option. If not given all shells of this atom are included. (same for orbitals per shell)

Output

  • HCl: Hamiltonian operator, corresponding to the input cluster, generated using the input tight-binding object.
  • HClTB: tight-binding object, corresponding to the input cluster, generated using the input tight-binding object.

Example

A small example:

Input

Example.Quanty
-- set parameters
dAB = 0.2
tnn = 1.1
-- create the tight binding Hamiltonian
HTB = NewTightBinding()
HTB.Name = "dichalcogenide tight binding"
HTB.Cell = {{sqrt(3),0,0},
            {sqrt(3/4),3/2,0},
            {0,0,1}}
HTB.Atoms = { {"A", {0,0,0},       {{"p", {"0"}}}},
              {"B", {sqrt(3),1,0}, {{"p", {"0"}}}}}
HTB.Hopping = {{"A.p","A.p",{         0,   0,0},{{-dAB/2}}},
               {"B.p","B.p",{         0,   0,0},{{ dAB/2}}},
               {"A.p","B.p",{         0,   1,0},{{ tnn  }}},
               {"B.p","A.p",{         0,  -1,0},{{ tnn  }}},
               {"A.p","B.p",{ sqrt(3/4),-1/2,0},{{ tnn  }}},
               {"B.p","A.p",{-sqrt(3/4), 1/2,0},{{ tnn  }}},
               {"A.p","B.p",{-sqrt(3/4),-1/2,0},{{ tnn  }}},
               {"B.p","A.p",{ sqrt(3/4), 1/2,0},{{ tnn  }}}
              }
-- create a list pf atoms (the cluster)
AtomPos = {{"A", {0,0,0}}, {"B", {sqrt(3),1,0}},
           {"B", {0,1,0}},
           {"B", { sqrt(3/4),-1/2,0}}, 
           {"B", {-sqrt(3/4),-1/2,0}}, 
           {"A", {sqrt(3),0,0}},
           {"A", {sqrt(3/4), 3/2,0}},
           {"A", {3*sqrt(3/4), 3/2,0}}}
print("create a cluster Hamiltonian")
HCl, HClTB = CreateClusterHamiltonian(HTB, {"open", AtomPos})
 
print("Output operator:")
print(HCl)
 
print("Output TB object:")
print(HClTB)

Result

create a cluster Hamiltonian
Output operator:
 
Operator: Operator
QComplex         =          0 (Real==0 or Complex==1 or Mixed==2)
MaxLength        =          2 (largest number of product of lader operators)
NFermionic modes =          8 (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             =         24 (number of operators of length   2)
C  0 A  0 | -1.00000000000000E-01
C  0 A  2 |  1.10000000000000E+00
C  0 A  3 |  1.10000000000000E+00
C  0 A  4 |  1.10000000000000E+00
C  1 A  1 |  1.00000000000000E-01
C  1 A  5 |  1.10000000000000E+00
C  1 A  6 |  1.10000000000000E+00
C  1 A  7 |  1.10000000000000E+00
C  2 A  0 |  1.10000000000000E+00
C  2 A  2 |  1.00000000000000E-01
C  2 A  6 |  1.10000000000000E+00
C  3 A  0 |  1.10000000000000E+00
C  3 A  3 |  1.00000000000000E-01
C  3 A  5 |  1.10000000000000E+00
C  4 A  0 |  1.10000000000000E+00
C  4 A  4 |  1.00000000000000E-01
C  5 A  1 |  1.10000000000000E+00
C  5 A  3 |  1.10000000000000E+00
C  5 A  5 | -1.00000000000000E-01
C  6 A  1 |  1.10000000000000E+00
C  6 A  2 |  1.10000000000000E+00
C  6 A  6 | -1.00000000000000E-01
C  7 A  1 |  1.10000000000000E+00
C  7 A  7 | -1.00000000000000E-01
 
 
Output TB object:
 
Settings of a tight binding model: dichalcogenide tight binding
 
printout of Crystal Structure
Units: 2Pi (g.r=2Pi) Angstrom Absolute atom positions
Unit cell parameters:
a:             INF       0.0000000       0.0000000
b:       0.0000000             INF       0.0000000
c:       0.0000000       0.0000000             INF
Reciprocal latice:
a:       0.0000000       0.0000000       0.0000000
b:       0.0000000       0.0000000       0.0000000
c:       0.0000000       0.0000000       0.0000000
Number of atoms 8
#   0 | A ( 0 ) at position {       0.0000000 ,       0.0000000 ,       0.0000000 }
      | p shell with 1 orbitals { 0 }
#   1 | B ( 5 ) at position {       1.7320508 ,       1.0000000 ,       0.0000000 }
      | p shell with 1 orbitals { 0 }
#   2 | B ( 5 ) at position {       0.0000000 ,       1.0000000 ,       0.0000000 }
      | p shell with 1 orbitals { 0 }
#   3 | B ( 5 ) at position {       0.8660254 ,      -0.5000000 ,       0.0000000 }
      | p shell with 1 orbitals { 0 }
#   4 | B ( 5 ) at position {      -0.8660254 ,      -0.5000000 ,       0.0000000 }
      | p shell with 1 orbitals { 0 }
#   5 | A ( 0 ) at position {       1.7320508 ,       0.0000000 ,       0.0000000 }
      | p shell with 1 orbitals { 0 }
#   6 | A ( 0 ) at position {       0.8660254 ,       1.5000000 ,       0.0000000 }
      | p shell with 1 orbitals { 0 }
#   7 | A ( 0 ) at position {       2.5980762 ,       1.5000000 ,       0.0000000 }
      | p shell with 1 orbitals { 0 }
Containing a total number of 8 orbitals
Hopping definitions ( 24 )
Hopping from 0 : A - p to 0 : A - p with translation vector in unit cells: { 0 , 0 , 0 } ({ 0.00000000E+00  0.00000000E+00  0.00000000E+00 })
L^* A R^T A=(Matrix) =
Real Part of Matrix with dimensions [Ni=1][Nj=1] ([Rows][Collums])
          [           0]
[     0] -1.00000000E-01 
 
Hopping from 0 : A - p to 2 : B - p with translation vector in unit cells: { 0 , 0 , 0 } ({ 0.00000000E+00  1.00000000E+00  0.00000000E+00 })
L^* A R^T A=(Matrix) =
Real Part of Matrix with dimensions [Ni=1][Nj=1] ([Rows][Collums])
          [           0]
[     0]  1.10000000E+00 
 
Hopping from 0 : A - p to 3 : B - p with translation vector in unit cells: { 0 , 0 , 0 } ({ 8.66025404E-01 -5.00000000E-01  0.00000000E+00 })
L^* A R^T A=(Matrix) =
Real Part of Matrix with dimensions [Ni=1][Nj=1] ([Rows][Collums])
          [           0]
[     0]  1.10000000E+00 
 
Hopping from 0 : A - p to 4 : B - p with translation vector in unit cells: { 0 , 0 , 0 } ({-8.66025404E-01 -5.00000000E-01  0.00000000E+00 })
L^* A R^T A=(Matrix) =
Real Part of Matrix with dimensions [Ni=1][Nj=1] ([Rows][Collums])
          [           0]
[     0]  1.10000000E+00 
 
Hopping from 1 : B - p to 1 : B - p with translation vector in unit cells: { 0 , 0 , 0 } ({ 0.00000000E+00  0.00000000E+00  0.00000000E+00 })
L^* A R^T A=(Matrix) =
Real Part of Matrix with dimensions [Ni=1][Nj=1] ([Rows][Collums])
          [           0]
[     0]  1.00000000E-01 
 
Hopping from 1 : B - p to 5 : A - p with translation vector in unit cells: { 0 , 0 , 0 } ({ 0.00000000E+00 -1.00000000E+00  0.00000000E+00 })
L^* A R^T A=(Matrix) =
Real Part of Matrix with dimensions [Ni=1][Nj=1] ([Rows][Collums])
          [           0]
[     0]  1.10000000E+00 
 
Hopping from 1 : B - p to 6 : A - p with translation vector in unit cells: { 0 , 0 , 0 } ({-8.66025404E-01  5.00000000E-01  0.00000000E+00 })
L^* A R^T A=(Matrix) =
Real Part of Matrix with dimensions [Ni=1][Nj=1] ([Rows][Collums])
          [           0]
[     0]  1.10000000E+00 
 
Hopping from 1 : B - p to 7 : A - p with translation vector in unit cells: { 0 , 0 , 0 } ({ 8.66025404E-01  5.00000000E-01  0.00000000E+00 })
L^* A R^T A=(Matrix) =
Real Part of Matrix with dimensions [Ni=1][Nj=1] ([Rows][Collums])
          [           0]
[     0]  1.10000000E+00 
 
Hopping from 2 : B - p to 0 : A - p with translation vector in unit cells: { 0 , 0 , 0 } ({ 0.00000000E+00 -1.00000000E+00  0.00000000E+00 })
L^* A R^T A=(Matrix) =
Real Part of Matrix with dimensions [Ni=1][Nj=1] ([Rows][Collums])
          [           0]
[     0]  1.10000000E+00 
 
Hopping from 2 : B - p to 2 : B - p with translation vector in unit cells: { 0 , 0 , 0 } ({ 0.00000000E+00  0.00000000E+00  0.00000000E+00 })
L^* A R^T A=(Matrix) =
Real Part of Matrix with dimensions [Ni=1][Nj=1] ([Rows][Collums])
          [           0]
[     0]  1.00000000E-01 
 
Hopping from 2 : B - p to 6 : A - p with translation vector in unit cells: { 0 , 0 , 0 } ({ 8.66025404E-01  5.00000000E-01  0.00000000E+00 })
L^* A R^T A=(Matrix) =
Real Part of Matrix with dimensions [Ni=1][Nj=1] ([Rows][Collums])
          [           0]
[     0]  1.10000000E+00 
 
Hopping from 3 : B - p to 0 : A - p with translation vector in unit cells: { 0 , 0 , 0 } ({-8.66025404E-01  5.00000000E-01  0.00000000E+00 })
L^* A R^T A=(Matrix) =
Real Part of Matrix with dimensions [Ni=1][Nj=1] ([Rows][Collums])
          [           0]
[     0]  1.10000000E+00 
 
Hopping from 3 : B - p to 3 : B - p with translation vector in unit cells: { 0 , 0 , 0 } ({ 0.00000000E+00  0.00000000E+00  0.00000000E+00 })
L^* A R^T A=(Matrix) =
Real Part of Matrix with dimensions [Ni=1][Nj=1] ([Rows][Collums])
          [           0]
[     0]  1.00000000E-01 
 
Hopping from 3 : B - p to 5 : A - p with translation vector in unit cells: { 0 , 0 , 0 } ({ 8.66025404E-01  5.00000000E-01  0.00000000E+00 })
L^* A R^T A=(Matrix) =
Real Part of Matrix with dimensions [Ni=1][Nj=1] ([Rows][Collums])
          [           0]
[     0]  1.10000000E+00 
 
Hopping from 4 : B - p to 0 : A - p with translation vector in unit cells: { 0 , 0 , 0 } ({ 8.66025404E-01  5.00000000E-01  0.00000000E+00 })
L^* A R^T A=(Matrix) =
Real Part of Matrix with dimensions [Ni=1][Nj=1] ([Rows][Collums])
          [           0]
[     0]  1.10000000E+00 
 
Hopping from 4 : B - p to 4 : B - p with translation vector in unit cells: { 0 , 0 , 0 } ({ 0.00000000E+00  0.00000000E+00  0.00000000E+00 })
L^* A R^T A=(Matrix) =
Real Part of Matrix with dimensions [Ni=1][Nj=1] ([Rows][Collums])
          [           0]
[     0]  1.00000000E-01 
 
Hopping from 5 : A - p to 1 : B - p with translation vector in unit cells: { 0 , 0 , 0 } ({ 0.00000000E+00  1.00000000E+00  0.00000000E+00 })
L^* A R^T A=(Matrix) =
Real Part of Matrix with dimensions [Ni=1][Nj=1] ([Rows][Collums])
          [           0]
[     0]  1.10000000E+00 
 
Hopping from 5 : A - p to 3 : B - p with translation vector in unit cells: { 0 , 0 , 0 } ({-8.66025404E-01 -5.00000000E-01  0.00000000E+00 })
L^* A R^T A=(Matrix) =
Real Part of Matrix with dimensions [Ni=1][Nj=1] ([Rows][Collums])
          [           0]
[     0]  1.10000000E+00 
 
Hopping from 5 : A - p to 5 : A - p with translation vector in unit cells: { 0 , 0 , 0 } ({ 0.00000000E+00  0.00000000E+00  0.00000000E+00 })
L^* A R^T A=(Matrix) =
Real Part of Matrix with dimensions [Ni=1][Nj=1] ([Rows][Collums])
          [           0]
[     0] -1.00000000E-01 
 
Hopping from 6 : A - p to 1 : B - p with translation vector in unit cells: { 0 , 0 , 0 } ({ 8.66025404E-01 -5.00000000E-01  0.00000000E+00 })
L^* A R^T A=(Matrix) =
Real Part of Matrix with dimensions [Ni=1][Nj=1] ([Rows][Collums])
          [           0]
[     0]  1.10000000E+00 
 
Hopping from 6 : A - p to 2 : B - p with translation vector in unit cells: { 0 , 0 , 0 } ({-8.66025404E-01 -5.00000000E-01  0.00000000E+00 })
L^* A R^T A=(Matrix) =
Real Part of Matrix with dimensions [Ni=1][Nj=1] ([Rows][Collums])
          [           0]
[     0]  1.10000000E+00 
 
Hopping from 6 : A - p to 6 : A - p with translation vector in unit cells: { 0 , 0 , 0 } ({ 0.00000000E+00  0.00000000E+00  0.00000000E+00 })
L^* A R^T A=(Matrix) =
Real Part of Matrix with dimensions [Ni=1][Nj=1] ([Rows][Collums])
          [           0]
[     0] -1.00000000E-01 
 
Hopping from 7 : A - p to 1 : B - p with translation vector in unit cells: { 0 , 0 , 0 } ({-8.66025404E-01 -5.00000000E-01  0.00000000E+00 })
L^* A R^T A=(Matrix) =
Real Part of Matrix with dimensions [Ni=1][Nj=1] ([Rows][Collums])
          [           0]
[     0]  1.10000000E+00 
 
Hopping from 7 : A - p to 7 : A - p with translation vector in unit cells: { 0 , 0 , 0 } ({ 0.00000000E+00  0.00000000E+00  0.00000000E+00 })
L^* A R^T A=(Matrix) =
Real Part of Matrix with dimensions [Ni=1][Nj=1] ([Rows][Collums])
          [           0]
[     0] -1.00000000E-01

Periodic Cluster

HCl = CreateClusterHamiltonian(TB, {“periodic”, SuperCell}, U, …)

Inputs

  • TB: tight-binding object
  • SuperCell: an array of dimension 3×3 in the format {a,b,c} with the rows being the vectors of the super-cell. The super-cell is defined in the units of the unit cell defined in TB.Cell.
  • U: Aditional Operator to add (optional). The operator must be defined within the unit cell defined in TB.Cell and will be copied to all unit cells within the super-cell and added to the output cluster Hamiltonian operator.

Example

A small example:

Input

Example.Quanty
-- set parameters
dAB = 0.2
tnn = 1.1
-- create the tight binding Hamiltonian
HTB = NewTightBinding()
HTB.Name = "dichalcogenide tight binding"
HTB.Cell = {{sqrt(3),0,0},
            {sqrt(3/4),3/2,0},
            {0,0,1}}
HTB.Atoms = { {"A", {0,0,0},       {{"p", {"0"}}}},
              {"B", {sqrt(3),1,0}, {{"p", {"0"}}}}}
HTB.Hopping = {{"A.p","A.p",{         0,   0,0},{{-dAB/2}}},
               {"B.p","B.p",{         0,   0,0},{{ dAB/2}}},
               {"A.p","B.p",{         0,   1,0},{{ tnn  }}},
               {"B.p","A.p",{         0,  -1,0},{{ tnn  }}},
               {"A.p","B.p",{ sqrt(3/4),-1/2,0},{{ tnn  }}},
               {"B.p","A.p",{-sqrt(3/4), 1/2,0},{{ tnn  }}},
               {"A.p","B.p",{-sqrt(3/4),-1/2,0},{{ tnn  }}},
               {"B.p","A.p",{ sqrt(3/4), 1/2,0},{{ tnn  }}}
              }
print("create a cluster Hamiltonian")
HCl = CreateClusterHamiltonian(HTB, {"periodic", {{3,0,0},{0,1,0},{0,0,1}}})
 
print("Output operator:")
print(HCl)

Result

create a cluster Hamiltonian
Output operator:
 
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             =         18 (number of operators of length   2)
C  0 A  0 | -1.00000000000000E-01
C  1 A  1 |  1.00000000000000E-01
C  0 A  5 |  2.20000000000000E+00
C  1 A  2 |  2.20000000000000E+00
C  0 A  1 |  1.10000000000000E+00
C  1 A  0 |  1.10000000000000E+00
C  2 A  2 | -1.00000000000000E-01
C  3 A  3 |  1.00000000000000E-01
C  2 A  1 |  2.20000000000000E+00
C  3 A  4 |  2.20000000000000E+00
C  2 A  3 |  1.10000000000000E+00
C  3 A  2 |  1.10000000000000E+00
C  4 A  4 | -1.00000000000000E-01
C  5 A  5 |  1.00000000000000E-01
C  4 A  3 |  2.20000000000000E+00
C  5 A  0 |  2.20000000000000E+00
C  4 A  5 |  1.10000000000000E+00
C  5 A  4 |  1.10000000000000E+00

Options

The last element of CreateClusterHamiltonian can be a table of options. Possible options are:

  • “AddSpin”: Boolean for including spin in the output Hamiltonian operator. (standard value false)
  • “ReturnTBSuperCell”: Boolean for returning the output tight-binding object. (standard value false)
  • “ReturnTBCellPositions”: Boolean for returning the lattice vectors of the output periodic cluster. (standard value false)
  • “ReturnTBKVectors”: Boolean for returning the reciprocal lattice vectors of the output periodic cluster. (standard value false)
  • “ReturnTBIndicesDict”: Boolean for returning the dict for the indices defined for the output Hamiltonian operator (see CreateAtomicIndicesDict()).
  • “k”: possible phase-shift in the hopping matrix elements of the output Hamiltonian operator. (standard value {0,0,0})

Table of contents

Print/export