Dear kwant users
I was trying to implement the following Hamiltonian: H_j,j+1 = H_j+1,j = -t, 
H_j,j = -0.02*t*cos(k_y + 2pi (phi/W)*j)
for a square lattice of size W*L with attached leads in y-direction. 
Unfortunately it doesn't work. Could anyone give me a hint
how to do this the right way?

Thank you for your answers in advance

Best,

Simon

def make_system(a=1, L=60, W=30):
    offdiagmat = np.zeros((W, W))
    for i in range(W):
        for j in range(W):
            if i == j + 1 or j == i + 1:
                offdiagmat[i][j] = 1


    hamiltonian = "-1.0*offdiagmat - identity(4)*2*0.01*cos(k_y + 
(2*pi*phi/30)*x)"

    hamiltonian = kwant.continuum.sympify(hamiltonian, 
locals=dict(offdiagmat=offdiagmat))

    template = kwant.continuum.discretize(hamiltonian, grid=a)

    def shape(site):
        (x, y) = site.pos
        return (0 <= x < W and 0 <= y < L)

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

    syst = kwant.Builder()
    syst.fill(template, shape, (0, 0))

    lead = kwant.Builder(kwant.TranslationalSymmetry([0, -a]))
    lead.fill(template, lead_shape, (0, 0))

    syst.attach_lead(lead)
    syst.attach_lead(lead.reversed())

    syst = syst.finalized()
    return syst

def analyze_system():
    params = dict(phi=0.2)
    syst = make_system()

    kwant.plotter.bands(syst.leads[0], params=params, momenta=np.linspace(-pi, 
pi, 200), show=False)

    plt.grid(True)
    plt.xlim(-pi, pi)
    plt.xlabel('momentum [1/A]')
    plt.ylabel('energy [eV]')
    plt.show()

def main():
    analyze_system()


if __name__ == '__main__':
    main()

Reply via email to