Thanks for the suggestion. I could do the most part of it but got stuck at one 
point. I was trying to do it from lattice model (discrete), defining an onsite 
potential which is varying linearly along the lattice sites. But is still 
showing error. Could you please tell where I am making the mistake ?

import kwant
import numpy as np
import math
##
import matplotlib
#matplotlib.use('Agg')
##

# For plotting
from matplotlib import pyplot as plt 

# For matrix support
import tinyarray

I2 = tinyarray.array([[1,0], [0,1]])
Sx = tinyarray.array([[0,1], [1,0]])
Sy = tinyarray.array([[0,-1j], [1j,0]])
Sz = tinyarray.array([[1,0], [0,-1]])

Sp = tinyarray.array([[0,2], [0,0]])
Sm = tinyarray.array([[0,0], [2,0]])


def create_system(length=10):

    t1 = 0.5 ; t2 = 1.0 ;
    
    def Onsite(site):
        (x, ) = site.pos
        potential = x
        return x

    # system building
    lat = kwant.lattice.square(a=1, norbs=2)
    syst = kwant.Builder()

    # central scattering region
    syst[(lat(x, 0) for x in range(length))] = t1*Sx
    syst[lat.neighbors()] = (t2*Sx - 1j*t2*Sy)/2
    
    # add leads
    sym = kwant.TranslationalSymmetry((-1, 0))
    lead_left = kwant.Builder(sym)
    
    lead_left[lat(0, 0)] = t1*Sx + Onsite*I2
    lead_left[lat.neighbors()] = (t2*Sx - 1j*t2*Sy)/2
    
    syst.attach_lead(lead_left)
    syst.attach_lead(lead_left.reversed())

    return syst


def main():

    # parameters
    

    # create system
    syst = create_system(length=10).finalized()

    # plot the system and dispersion
   
    kwant.plot(syst)
    kwant.plotter.bands(syst.leads[0], show=False)
    plt.plot([-np.pi, np.pi], [chemical_potential, chemical_potential], 'k--')
    plt.show()
    
    lead = syst.leads[0]
    bands = kwant.physics.Bands(lead)
    momenta = np.linspace(-2*np.pi, 2*np.pi, 401)
    energies = [bands(k) for k in momenta]
    
    plt.plot(momenta, energies,linestyle='--')

    plt.xlim(-2*np.pi, 2*np.pi)
    #pyplot.ylim(-5, 5)
    plt.xlabel("$k$")
    plt.ylabel("Energy")
    #pyplot.axhline(y=0.0, color='k', linestyle='-')
    plt.tight_layout()
    plt.grid()
    
    plt.show()
    
    plt.close()

    

if __name__ == '__main__':
    main()

Reply via email to