- Notifications
You must be signed in to change notification settings - Fork21
Python library to compute different properties of tight binding models
License
joselado/pygra
Folders and files
Name | Name | Last commit message | Last commit date | |
---|---|---|---|---|
Repository files navigation
This is a Python library to compute tight binding models in differentdimensionalities and based on a variety of different lattices.
A generic version of this library is called pyqula, and can be downloaded fromhttps://github.com/joselado/pyqula
- 0d, 1d, 2d and 3d systems
- Band structures
- Density of states
- Include magnetism, spin-orbit coupling and superconductivity
- Selfconsistent mean field calculations
- Topological characterization of electronic structures
- Green's function formalism for semi-infinite systems
- Spectral functions
- Kernel polynomial techniques
- Quantum Transport
In the examples folder there are several examples of usage of thelibrary. You will find among others:
- Quantum anomalous Hall and topological insulators
- Topological superconductors and Shiba lattices
- Magnetism in graphene materials
- Twisted bilayer graphene
- Nodal line semimetals
frompygraimportgeometryg=geometry.honeycomb_lattice()# get the geometry objecth=g.get_hamiltonian()# get the Hamiltonian objecth.get_bands()# compute the band structure
frompygraimportgeometryfrompygraimportscftypesg=geometry.honeycomb_zigzag_ribbon(10)# create geometry of a zigzag ribbonh=g.get_hamiltonian()# create hamiltonian of the systemmf=scftypes.guess(h,"ferro",fun=lambdar: [0.,0.,1.])scf=scftypes.hubbardscf(h,nkp=30,filling=0.5,mf=mf)h=scf.hamiltonian# get the Hamiltonianh.get_bands(operator="sz")# calculate band structure
frompygraimportspecialgeometryfrompygra.specialhoppingimporttwisted_matrixg=specialgeometry.twisted_bilayer(3)h=g.get_hamiltonian(mgenerator=twisted_matrix(ti=0.12))h.get_bands(nk=100)
frompygraimportgeometryfrompygraimporttopologyg=geometry.honeycomb_lattice()h=g.get_hamiltonian()h.add_rashba(0.3)# Rashba spin-orbit couplingh.add_zeeman([0.,0.,0.3])# Zeeman fieldc=topology.chern(h)# compute Chern numberprint("Chern number is ",c)
frompygraimportgeometryfrompygraimportfilmsg=geometry.diamond_lattice_minimal()g=films.geometry_film(g,nz=20)h=g.get_hamiltonian()h.get_bands()
frompygraimportgeometryfrompygraimportkdosg=geometry.honeycomb_lattice()h=g.get_hamiltonian()h.add_haldane(0.05)kdos.surface(h)
frompygraimportgeometryg=geometry.honeycomb_zigzag_ribbon(10)# create geometry of a zigzag ribbonh=g.get_hamiltonian(has_spin=True)# create hamiltonian of the systemh.add_antiferromagnetism(lambdar: (r[1]>0)*0.5)# add antiferromagnetismh.add_swave(lambdar: (r[1]<0)*0.3)# add superconductivityh.get_bands()# calculate band structure
frompygraimportgeometryfrompygraimportspectrumimportnumpyasnpg=geometry.kagome_lattice()h=g.get_hamiltonian()spectrum.multi_fermi_surface(h,nk=60,energies=np.linspace(-4,4,100),delta=0.1,nsuper=1)
Parts of the code are written in Fortran for a matter of performance.To compile those functions you need to execute "install.sh" In casethey are not compiled, the library will still work but certain partswill be substantially slower. Compiling the fortran routines requireshaving a fortran compiler, such as gfortran.
Parts of the code rely on Python libraries
- numpy
- scipy
- multiprocess
- numba