Dear Sir,
Thanks for the tips. As you told, I have tried in other way also but I am
getting the same result which are very tedious. I don't know where is fault.
Now the code looks like















































































*import kwantimport scipy.sparse.linalg as slaimport matplotlib.pyplot as
pltimport tinyarrayimport numpy as npfrom numpy import cos, sin, piimport
cmathfrom cmath import expsigma_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]])def make_system(a=1, L=30, W=10, H=10, t=1.0, t_x=1.0, t_y=1.0,
t_z=1.0, lamda=0.1, beta=1.05):    def onsite(site):        return (t_z *
cos(beta) + 2 * t) * sigma_z        def hoppingx(site0, site1):
return (-0.5 * t * sigma_z - 0.5 * 1j * t_x * sigma_x)    def
hoppingy(site0, site1):        return -0.5 * t * sigma_z - 0.5 * 1j * t_y *
sigma_y    def hoppingz(site0, site1, B):        y = site1.pos[1]
return (-0.5 * t_z * sigma_z - 0.5 * 1j * lamda * sigma_0) * exp(2 * pi *
1j * B * a * (y-40))            syst = kwant.Builder()    lat =
kwant.lattice.cubic(a)    syst[(lat(z, y, x) for z in range(H) for y in
range(W) for x in range(L))] = onsite    syst[kwant.builder.HoppingKind((1,
0, 0), lat, lat)] = hoppingz    syst[kwant.builder.HoppingKind((0, 1, 0),
lat, lat)] = hoppingy    syst[kwant.builder.HoppingKind((0, 0, 1), lat,
lat)] = hoppingx
lead1=kwant.Builder(kwant.TranslationalSymmetry((0,-a,0)))
lead1[(lat(z,y,x)  for z in range(H)for y in range(W)for x in
range(L))]=onsite    lead1[kwant.builder.HoppingKind((1, 0, 0), lat, lat)]
= hoppingz    lead1[kwant.builder.HoppingKind((0, 1, 0), lat, lat)] =
hoppingy    lead1[kwant.builder.HoppingKind((0, 0, 1), lat, lat)] =
hoppingx    syst.attach_lead(lead1)    syst.attach_lead(lead1.reversed())
      lead2=kwant.Builder(kwant.TranslationalSymmetry((-a,0,0)))
lead2[(lat(z,y,x)  for z in range(H)for y in range(W)for x in
range(L))]=onsite    lead2[kwant.builder.HoppingKind((1, 0, 0), lat, lat)]
= hoppingz    lead2[kwant.builder.HoppingKind((0, 1, 0), lat, lat)] =
hoppingy    lead2[kwant.builder.HoppingKind((0, 0, 1), lat, lat)] =
hoppingx    syst.attach_lead(lead2)    syst.attach_lead(lead2.reversed())
  syst = syst.finalized()    return systdef analyze_system(syst, Bfields):
  syst = make_system()    kwant.plot(syst)    energies = []    for B in
Bfields:        #print(B)        ham_mat =
syst.hamiltonian_submatrix(params=dict(B=B), sparse=True)        ev, evec =
sla.eigsh(ham_mat.tocsc(), k=20, sigma=0)        energies.append(ev)
#print (energies)        plt.figure()    plt.plot(Bfields, energies)
plt.xlabel("magnetic field [${10^-3 h/e}$]")    plt.ylabel("energy [t]")
plt.ylim(0, 0.11)    plt.show()def main():    syst = make_system()
analyze_system(syst, [B * 0.00002 for B in range(101)])main()*












Naveen
Department of Physics & Astrophysics
University of Delhi
New Delhi-110007

On Sun, Sep 8, 2019, 17:37 Abbout Adel <abbout.a...@gmail.com> wrote:

> Dear Naveen,
>
> Your program works fine. You have just a small problem of plotting.  You
> can solve that by changing "plt.show"  by "plt.show()".
>
> Think about putting  print (B) inside the loop when you debug your
> program. That will help you for example to see if the program is running
> well, and you  can detect what may be wrong.
> Think also about returning Energies in your function. This way you can try
> potting the result outside the function you called.  Don't hesitate to put
> some extra lines in your program to follow the progress when you think that
> there is a problem.
>
>
> I hope this helps.
> Regards,
> Adel
>
> On Thu, Sep 5, 2019 at 7:32 PM Naveen Yadav <naveengunwa...@gmail.com>
> wrote:
>
>> Dear Sir,
>>
>> I am trying to plot the energy as a function of magnetic field for a 3D
>> case, but I am getting tedious results. The system is infinite in two
>> directions and has some width in the third direction. Please have a look at
>> the code attached below. I tried a lot but failed. Is the code correct or I
>> am wrong somewhere.
>> Thank you.
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> *import kwantimport scipy.sparse.linalg as slaimport matplotlib.pyplot as
>> pltimport tinyarrayimport numpy as npfrom numpy import cos, sin, piimport
>> cmathfrom cmath import expsigma_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]])def make_system(a=1, L=30, W=10, H=10, t=1.0, t_x=1.0, t_y=1.0,
>> t_z=1.0, lamda=0.1, beta=1.05):    def onsite(site):        return (t_z *
>> cos(beta) + 2 * t) * sigma_z        def hoppingx(site0, site1):
>> return (-0.5 * t * sigma_z - 0.5 * 1j * t_x * sigma_x)    def
>> hoppingy(site0, site1):        return -0.5 * t * sigma_z - 0.5 * 1j * t_y *
>> sigma_y    def hoppingz(site0, site1, B):        y = site1.pos[1]
>> return (-0.5 * t_z * sigma_z - 0.5 * 1j * lamda * sigma_0) * exp(2 * pi *
>> 1j * B * a * (y-40))            syst = kwant.Builder()    lat =
>> kwant.lattice.cubic(a)    syst[(lat(z, y, x) for z in range(H) for y in
>> range(W) for x in range(L))] = onsite    syst[kwant.builder.HoppingKind((1,
>> 0, 0), lat, lat)] = hoppingz    syst[kwant.builder.HoppingKind((0, 1, 0),
>> lat, lat)] = hoppingy    syst[kwant.builder.HoppingKind((0, 0, 1), lat,
>> lat)] = hoppingx
>> lead1=kwant.Builder(kwant.TranslationalSymmetry((0,-a,0)))
>> lead1[(lat(z,y,x)  for z in range(H)for y in range(W)for x in
>> range(L))]=onsite    lead1[kwant.builder.HoppingKind((1, 0, 0), lat, lat)]
>> = hoppingz    lead1[kwant.builder.HoppingKind((0, 1, 0), lat, lat)] =
>> hoppingy    lead1[kwant.builder.HoppingKind((0, 0, 1), lat, lat)] =
>> hoppingx    syst.attach_lead(lead1)    syst.attach_lead(lead1.reversed())
>>       lead2=kwant.Builder(kwant.TranslationalSymmetry((-a,0,0)))
>> lead2[(lat(z,y,x)  for z in range(H)for y in range(W)for x in
>> range(L))]=onsite    lead2[kwant.builder.HoppingKind((1, 0, 0), lat, lat)]
>> = hoppingz    lead2[kwant.builder.HoppingKind((0, 1, 0), lat, lat)] =
>> hoppingy    lead2[kwant.builder.HoppingKind((0, 0, 1), lat, lat)] =
>> hoppingx    syst.attach_lead(lead2)    syst.attach_lead(lead2.reversed())
>>   syst = syst.finalized()    return systdef analyze_system():    syst =
>> make_system()    kwant.plot(syst)    Bfields = np.linspace(0, 0.002, 100)
>>   energies = []    for B in Bfields:        ham_mat =
>> syst.hamiltonian_submatrix(params=dict(B=B), sparse=True)        ev, evec =
>> sla.eigsh(ham_mat.tocsc(), k=20, sigma=0)        energies.append(ev)
>> #print(energies)        plt.figure()    plt.plot(Bfields, energies)
>> plt.xlabel("magnetic field [${10^-3 h/e}$]")    plt.ylabel("energy [t]")
>> plt.ylim(0, 0.11)    plt.showdef main():    syst = make_system()
>> analyze_system()main()*
>>
>>
>>
>>
>> --
>>
>>
>> With Best Regards
>> NAVEEN YADAV
>> Ph.D Research Scholar
>> Deptt. Of Physics & Astrophysics
>> University Of Delhi.
>>
>
>
> --
> Abbout Adel
>

Reply via email to