Hello all,

I'm trying to implement the BHZ model already in the tight-biding model 
according to the paper [Phys. Rev. B 96, 155302 (2017) or  arXiv:1707.03624]. I 
use the equations (5),(6) and (7), however with no magnetic field. I'm using 
Kwant's documentation example 2.10 as a guideline (For what I have to do next 
it's more convenient that I don't use the discretize method). After some 
struggling I got the band structure of both mine and Kwant's example to be the 
same, however my spin density is reversed, it's up where it's supposed to be 
down. So far I haven't figured out why.

Also, the main difference between the implementation is only the make_syst 
part, all the plotting in my code are snippets from Kwant's discretize.py; My 
code is below:

import kwant
import matplotlib.pyplot as plt
import numpy as np
import random as rd
from math import *
import matplotlib as mpl
import tinyarray


sigma_0 = tinyarray.array([[1, 0], [0, 1]])
sigma_x = tinyarray.array([[0, 1], [1, 0]])
sigma_y = tinyarray.array([[0, -1j], [1j, 0]])
sigma_z = tinyarray.array([[1, 0], [0, -1]])
Id = np.eye(4)
G1 = np.kron(sigma_z,sigma_x)
G2 = -np.kron(sigma_0,sigma_y)
G5 = np.kron(sigma_0,sigma_z)


def make_syst(a=20,A=3.65, B=-68.6, D=-51.1, M=-0.01, C=0,L=200,W=200):

    lat = kwant.lattice.square(a,norbs=4)

    syst = kwant.Builder()

    def square(pos):
        (x, y) = pos
        return (0 <= y < W and 0 <= x < L)

    def onsite(site):
        (x, y) = site.pos
        return C*Id+M*G5-(4/a**2)*(D*Id+B*G5) #equation 5

    def hoppingx(site1,site2):
        return (1/a**2)*(D*Id+B*G5)+(1j/(2*a))*(A*G1) #eq 6

    def hoppingy(site1,site2):
        return (1/a**2)*(D*Id+B*G5)-(1j/(2*a))*(A*G2) #eq 7


    syst[lat.shape(square,(0,0))] = onsite
    syst[kwant.builder.HoppingKind((1, 0), lat, lat)] = hoppingx
    syst[kwant.builder.HoppingKind((0,1), lat, lat)] = hoppingy

    def lead_shape(pos):
        (x, y)  = pos
        return (0 <= y < W)

    #### Define the left lead. ####
    lead = kwant.Builder(kwant.TranslationalSymmetry((-a, 0)))

    lead[lat.shape(lead_shape,(0,0))] = onsite
    # hoppings in x-direction
    lead[kwant.builder.HoppingKind((1, 0), lat, lat)] =hoppingx
    # hoppings in y-directions
    lead[kwant.builder.HoppingKind((0, 1), lat, lat)] = hoppingy


    return syst,[lead,lead.reversed()]


def main():
    syst,leads = make_syst(W=1000,L=2000)

    # Attach the leads to the system.
    for lead in leads:
        syst.attach_lead(lead)

    # Finalize the system.
    syst = syst.finalized()
    # Check that the system looks as intended.
    #kwant.plot(syst)


    # Compute the band structure of lead 0.
    kwant.plotter.bands(syst.leads[0],
                        momenta=np.linspace(-0.3, 0.3, 201), show=False)
 
    plt.grid()
    plt.xlim(-.3, 0.3)
    plt.ylim(-0.05, 0.05)
    plt.xlabel('momentum [1/A]')
    plt.ylabel('energy [eV]')
    plt.show()

    wf = kwant.wave_function(syst, energy=0)

    # prepare density operators
    sigma_z = np.array([[1, 0], [0, -1]])
    prob_density = kwant.operator.Density(syst, np.eye(4))
    spin_density = kwant.operator.Density(syst, np.kron(sigma_z, np.eye(2)))

    # calculate expectation values and plot them
    wf_sqr = sum(prob_density(psi) for psi in wf(0))  # states from left lead
    rho_sz = sum(spin_density(psi) for psi in wf(0))  # states from left lead

    fig, (ax1, ax2) = plt.subplots(1, 2, sharey=True, figsize=(16, 4))
    kwant.plotter.map(syst, wf_sqr, ax=ax1)
    kwant.plotter.map(syst, rho_sz, ax=ax2)
    ax = ax1
    im = [obj for obj in ax.get_children()
          if isinstance(obj, mpl.image.AxesImage)][0]
    fig.colorbar(im, ax=ax)

    ax = ax2
    im = [obj for obj in ax.get_children()
          if isinstance(obj, mpl.image.AxesImage)][0]
    fig.colorbar(im, ax=ax)

    ax1.set_title('Probability density')
    ax2.set_title('Spin density')
    plt.show()


# Call the main function if the script gets executed (as opposed to imported).
# See <http://docs.python.org/library/__main__.html>.
if __name__ == '__main__':
    main()






Regards,

Victor Regis

Reply via email to