Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
documentation:language_reference:functions:createclusterhamiltonian [2016/10/06 21:48] – created Maurits W. Haverkortdocumentation:language_reference:functions:createclusterhamiltonian [2024/09/18 14:23] (current) – old revision restored (2024/09/16 12:17) Sina Shokri
Line 1: Line 1:
 +====== 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 ====
 +<code Quanty 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)
 +</code>
 +
 +==== Result ====
 +<file Quanty_Output>
 +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
 +</file>
 +
 +===== 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 ====
 +<code Quanty 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)
 +</code>
 +
 +==== Result ====
 +<file Quanty_Output>
 +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
 +</file>
 +
 +====== 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}}
  
Print/export