====== 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 //[[documentation:language_reference:objects:tightbinding:start|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 ====
-- 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 3x3 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 ====
-- 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 //[[documentation:language_reference:functions:CreateAtomicIndicesDict|CreateAtomicIndicesDict()]]//).
* "k": possible phase-shift in the hopping matrix elements of the output Hamiltonian operator. (standard value {0,0,0})
===== Table of contents =====
{{indexmenu>.#1}}