Table of Contents
Properties
Tight Binding objects have the following standard properties:
-
Name: a string
-
Cell: {a,b,c} defining the unit cell of the system. a, b and c are vectors of length 3 and define the uni-cell vectors.
-
ReciprocalCell: {a,b,c} the reciprocal cell, satisfying the condition $\vec{r}\cdot\vec{g}=2\pi$, where $\vec{r}$ are the unit-cell vectors and $\vec{g}$ are the reciprocal-cell vectors.
-
Atoms: a list of atoms, their positions within the unit cell and their atomic shells (spin-orbitals). Each element has the format {Atom.Name, Atom.Position, {Atom.Shells}}. The Atom.Shells can be a list of atomic shell with arbitrary number of orbitals, including or not including spin. For example: {“H”, {0,0,0}, { {“s”, {“^{dn}”, “^{up}”}, {“p”, {“_y^{dn}”, “_y^{up}”, “_z^{dn}”, “_z^{up}”, “_x^{dn}”, “_x^{up}”} } } } } .
-
NAtoms: number of atoms in TB.Atoms
-
Hopping: A list of local and non-local hoppings among atomic shells. Each element has the format {Atom1.Shell_i, Atom2.Shell_j, {a,b,c}, T}, where here {a,b,c} is the distance between the two atoms and T is an array defines the hopping matrix elements among the spin-orbitals of Atom1.Shell_i and Atom1.Shell_j . (in second-quantization language: $ \Sigma t_{\sigma, \sigma'} a^{\dagger}_{\sigma} a_{\sigma'} $)
-
Units: {Units[1], Units[2], Units[3]} (see below)
-
NF: number of fermionic modes
The Units property is a list of three strings with the following components:
-
Units[1]: Sets the scaling for the reciprocal lattice, e.g., $\vec{r}\cdot\vec{g}=2\pi$ for “2Pi” or $\vec{r}\cdot\vec{g}=1$ for “NoPi”. (standard value “2Pi”)
-
Units[2]: Defines the unit of measurement as “Angstrom”, “Bohr”, or “nanometer”. (standard value “Angstrom”)
-
Units[3]: Selects “Absolute” or “Relative” for the definition of atom positions. (standard value “Absolute”)
For creating a tight-binding object, one needs to define at least the properties TB.Cell, TB.Atoms and TB.Hopping. The rest of the properties will be either automatically calculated or will be set with standard values (TB.Name and TB.Units). See also NewTightBinding().
Example
Two simple examples (with and without spin):
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("HTB.Name:") print(HTB.Name) print("\nHTB.Cell:") print(HTB.Cell) print("\nHTB.Atoms:") print(HTB.Atoms) print("\nHTB.NAtoms:") print(HTB.NAtoms) print("\nHTB.Hopping:") print(HTB.Hopping) print("\nHTB.Units:") print(HTB.Units) print("\nHTB.NF:") print(HTB.NF) print("\nHTB.Hk:") print(HTB.Hk) print("\nHTB.ReciprocalCell:") print(HTB.ReciprocalCell) -- create the tight binding Hamiltonian HTB = NewTightBinding() HTB.Name = "dichalcogenide tight binding (with spin)" HTB.Cell = {{sqrt(3),0,0}, {sqrt(3/4),3/2,0}, {0,0,1}} HTB.Atoms = { {"A", {0,0,0}, {{"p", {"^{dn}","^{up}"}}}}, {"B", {sqrt(3),1,0}, {{"p", {"^{dn}","^{up}"}}}}} HTB.Hopping = {{"A.p","A.p",{ 0, 0,0},{{-dAB/2, 0}, {0, -dAB/2}}}, {"B.p","B.p",{ 0, 0,0},{{-dAB/2, 0}, {0, -dAB/2}}}, {"A.p","B.p",{ 0, 1,0},{{ tnn, 0 }, { 0, tnn }}}, {"B.p","A.p",{ 0, -1,0},{{ tnn, 0 }, { 0, tnn }}}, {"A.p","B.p",{ sqrt(3/4),-1/2,0},{{ tnn, 0 }, { 0, tnn }}}, {"B.p","A.p",{-sqrt(3/4), 1/2,0},{{ tnn, 0 }, { 0, tnn }}}, {"A.p","B.p",{-sqrt(3/4),-1/2,0},{{ tnn, 0 }, { 0, tnn }}}, {"B.p","A.p",{ sqrt(3/4), 1/2,0},{{ tnn, 0 }, { 0, tnn }}} } print("HTB.Name:") print(HTB.Name) print("\nHTB.Cell:") print(HTB.Cell) print("\nHTB.Atoms:") print(HTB.Atoms) print("\nHTB.NAtoms:") print(HTB.NAtoms) print("\nHTB.Hopping:") print(HTB.Hopping) print("\nHTB.Units:") print(HTB.Units) print("\nHTB.NF:") print(HTB.NF) print("\nHTB.Hk:") print(HTB.Hk) print("\nHTB.ReciprocalCell:") print(HTB.ReciprocalCell)
Result
HTB.Name: dichalcogenide tight binding HTB.Cell: { { 1.7320508075689 , 0 , 0 } , { 0.86602540378444 , 1.5 , 0 } , { 0 , 0 , 1 } } HTB.Atoms: { { A , { 0 , 0 , 0 } , { { p , { 0 } } } } , { B , { 1.7320508075689 , 1 , 0 } , { { p , { 0 } } } } } HTB.NAtoms: 2 HTB.Hopping: Hopping HTB.Units: { 2Pi , Angstrom , Absolute } HTB.NF: 2 HTB.Hk: Hk HTB.ReciprocalCell: { { 3.6275987284684 , -2.0943951023932 , 0 } , { 0 , 4.1887902047864 , 0 } , { 0 , 0 , 6.2831853071796 } } HTB.Name: dichalcogenide tight binding (with spin) HTB.Cell: { { 1.7320508075689 , 0 , 0 } , { 0.86602540378444 , 1.5 , 0 } , { 0 , 0 , 1 } } HTB.Atoms: { { A , { 0 , 0 , 0 } , { { p , { ^{dn} , ^{up} } } } } , { B , { 1.7320508075689 , 1 , 0 } , { { p , { ^{dn} , ^{up} } } } } } HTB.NAtoms: 2 HTB.Hopping: Hopping HTB.Units: { 2Pi , Angstrom , Absolute } HTB.NF: 4 HTB.Hk: Hk HTB.ReciprocalCell: { { 3.6275987284684 , -2.0943951023932 , 0 } , { 0 , 4.1887902047864 , 0 } , { 0 , 0 , 6.2831853071796 } }