Table of Contents
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})