====== 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}}