Dear Subhadeep,

You can not mix scalars and functions when you define the onsite potential.
Put everything in the function:

def Onsite(site):
        x,_ = site.pos
        return t1*Sx + x*I2

lead_left[lat(0, 0)] = Onsite

Define your chemical potential: chemical_potential.

With these modifications, it will work.
I hope this helps,
Adel


On Mon, Jun 27, 2022 at 5:43 PM Subhadeep Chakraborty <
sc20rs...@iiserkol.ac.in> wrote:

> Hi Kwant Users !
>
> I was trying to plot the band structure of the ssh model with linearly
> varying chemical potential (\mu*x). But it is showing error that "*Expecting
> an arraylike object or a scalar*" while adding this potential term. Can
> anyone please tell where I am making mistake  and how to rectify it ?
> _____________________________________
> Code is attached below :-
>
> 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()
>
> ________________________________________________
> Thanks in advance,
> *_________________________________*
> *Subhadeep Chakraborty*
>
> *_________________________________*
>
>

-- 
Abbout Adel

Reply via email to