Skip to content
Snippets Groups Projects
Commit 362caf64 authored by Hélène Spring's avatar Hélène Spring
Browse files

Basic structural implementation of diamond chain.

parents
No related branches found
No related tags found
No related merge requests found
### OS and IDE temporaries
*.DS_Store
.*~
.*.swp
## Latex temporaries
*.aux
*.lof
*.log
*.lot
*.fls
*.out
*.toc
*.fmt
*.fot
*.cb
*.cb2
*.bbl
*.bcf
*.blg
*-blx.aux
*-blx.bib
### Python temporaries
**/__pycache__/*
*.py[cod]
*.egg
MANIFEST
### Jupyter temporaries
**/.ipynb_checkpoints
### Compiled binaries
*.so
*.o
*.a
*.exe
*.out
### Testing and coverage reports
htmlcov/
.tox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
.hypothesis/
sdf
\ No newline at end of file
import kwant
import numpy as np
def diamond_chain_system(N_c, system_params):
'''
Create a diamond chain of trimer unit cells. Each atom of the trimer has two orbital angular momentum states, + and -
_______
... | C_i_+ |
| C_i_- | ...
/ ------- \ ______ /
... | A_i_+ | ...
| A_i_- |
\ ______ / ------- \
... | B_i_+ | ...
| B_i_- |
-------
:param int N_c: number of unit cells to include in the cell
:param dict system_params: parameters
:rtype kwant.system.FiniteSystem:
'''
# make lattices and sublattices
lat = kwant.lattice.Polyatomic(prim_vecs = [[1,0],[0,1]], basis = [[1,0],[1,0], [0,-1],[0,-1], [0,1],[0,1]])
a_lat_pos, a_lat_neg, b_lat_pos, b_lat_neg, c_lat_pos, c_lat_neg = lat.sublattices
#make builder and populate with onsite and hoppings
syst = kwant.Builder()
for i in range(N_c):
#staggered point
sp = 2*i
syst[a_lat_pos(sp,0)] = 0
syst[a_lat_neg(sp,0)] = 0
syst[b_lat_pos(sp,0)] = 0
syst[b_lat_neg(sp,0)] = 0
syst[c_lat_pos(sp,0)] = 0
syst[c_lat_neg(sp,0)] = 0
if i < N_c - 1:
syst[c_lat_pos(sp+2,0)] = 0
syst[b_lat_pos(sp+2,0)] = 0
syst[c_lat_neg(sp+2,0)] = 0
syst[b_lat_neg(sp+2,0)] = 0
# + <--> +
syst[a_lat_pos(sp,0), c_lat_pos(sp+2,0)] = 1
syst[a_lat_pos(sp,0), b_lat_pos(sp+2,0)] = 1
# - <--> -
syst[a_lat_neg(sp,0), c_lat_neg(sp+2,0)] = 1
syst[a_lat_neg(sp,0), b_lat_neg(sp+2,0)] = 1
# + <--> -
syst[a_lat_pos(sp,0), b_lat_neg(sp+2,0)] = 1
syst[a_lat_neg(sp,0), b_lat_pos(sp+2,0)] = 1
# + <--> - hopping with phase
syst[a_lat_pos(sp,0), c_lat_neg(sp+2,0)] = 1
syst[a_lat_neg(sp,0), c_lat_pos(sp+2,0)] = 1
# + <--> +
syst[a_lat_pos(2*i,0), c_lat_pos(sp,0)] = 1
syst[a_lat_pos(2*i,0), b_lat_pos(sp,0)] = 1
# - <--> -
syst[a_lat_neg(2*i,0), c_lat_neg(sp,0)] = 1
syst[a_lat_neg(2*i,0), b_lat_neg(sp,0)] = 1
# + <--> -
syst[a_lat_pos(2*i,0), c_lat_neg(sp,0)] = 1
syst[a_lat_neg(2*i,0), c_lat_pos(sp,0)] = 1
# + <--> - hopping with phase
syst[a_lat_pos(2*i,0), b_lat_neg(sp,0)] = 1
syst[a_lat_neg(2*i,0), b_lat_pos(sp,0)] = 1
return syst
m = diamond_chain_system(10,None)
kwant.plot(m)
import kwant
import numpy as np
def diamond_chain_system(N_c, system_params):
'''
Create a diamond chain of trimer unit cells. Each atom of the trimer has two orbital angular momentum states, + and -
_______
... | C_i_+ |
| C_i_- | ...
/ ------- \ ______ /
... | A_i_+ | ...
| A_i_- |
\ ______ / ------- \
... | B_i_+ | ...
| B_i_- |
-------
:param int N_c: number of unit cells to include in the cell
:param dict system_params: parameters
:rtype kwant.system.FiniteSystem:
'''
# make lattices and sublattices
lat = kwant.lattice.Polyatomic(prim_vecs = [[1,0],[0,1]], basis = [[1,0],[1,0], [0,-1],[0,-1], [0,1],[0,1]])
a_lat_pos, a_lat_neg, b_lat_pos, b_lat_neg, c_lat_pos, c_lat_neg = lat.sublattices
#make builder and populate with onsite and hoppings
syst = kwant.Builder()
for i in range(N_c):
#staggered point
sp = 2*i
syst[a_lat_pos(sp,0)] = 0
syst[a_lat_neg(sp,0)] = 0
syst[b_lat_pos(sp,0)] = 0
syst[b_lat_neg(sp,0)] = 0
syst[c_lat_pos(sp,0)] = 0
syst[c_lat_neg(sp,0)] = 0
if i < N_c - 1:
syst[c_lat_pos(sp+2,0)] = 0
syst[b_lat_pos(sp+2,0)] = 0
syst[c_lat_neg(sp+2,0)] = 0
syst[b_lat_neg(sp+2,0)] = 0
# + <--> +
syst[a_lat_pos(sp,0), c_lat_pos(sp+2,0)] = 1
syst[a_lat_pos(sp,0), b_lat_pos(sp+2,0)] = 1
# - <--> -
syst[a_lat_neg(sp,0), c_lat_neg(sp+2,0)] = 1
syst[a_lat_neg(sp,0), b_lat_neg(sp+2,0)] = 1
# + <--> -
syst[a_lat_pos(sp,0), b_lat_neg(sp+2,0)] = 1
syst[a_lat_neg(sp,0), b_lat_pos(sp+2,0)] = 1
# + <--> - hopping with phase
syst[a_lat_pos(sp,0), c_lat_neg(sp+2,0)] = 1
syst[a_lat_neg(sp,0), c_lat_pos(sp+2,0)] = 1
# + <--> +
syst[a_lat_pos(2*i,0), c_lat_pos(sp,0)] = 1
syst[a_lat_pos(2*i,0), b_lat_pos(sp,0)] = 1
# - <--> -
syst[a_lat_neg(2*i,0), c_lat_neg(sp,0)] = 1
syst[a_lat_neg(2*i,0), b_lat_neg(sp,0)] = 1
# + <--> -
syst[a_lat_pos(2*i,0), c_lat_neg(sp,0)] = 1
syst[a_lat_neg(2*i,0), c_lat_pos(sp,0)] = 1
# + <--> - hopping with phase
syst[a_lat_pos(2*i,0), b_lat_neg(sp,0)] = 1
syst[a_lat_neg(2*i,0), b_lat_pos(sp,0)] = 1
return syst
m = diamond_chain_system(10,None)
kwant.plot(m)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment