[Kwant] A weird result of 1D quantum wire

2017-09-05 Thread Liu Feng
Dear Adel

Many thanks for your informative reply.
Now I think I have resolved the problem here. The result kwant
obtained is correct.
One thing is that for odd L, the transmission is always unity, not
extinction.
This quite counter-intuitive. As even the hopping is given as for
example J_0(2.4048) (zeros of Bessel function), it still gives unity
transmission.
For analytic details please refer to PRB 78, 045428.

Best regards,
feng



Abbout Adel 于2017年9月6日周三 上午6:29写道:

> Dear Liu,
>
> I think that there is no problem in your result. It is the expected
> physical result!
>
> This behaviour is due to the fact that you are near the middle of the
> conduction band.
>
> To see it better, put the energy exactly =0. you will find that the
> conductance is zero for odd numbers and oscillating for even.
>
> In fact, for Ef=0, you have the wavenumber k=pi/2 and Lambda=2pi/k=4
> (E=-2t cos(k), whatever is the value of t, when E=0, k=pi/2 )
>
> The system is like a tunneling barrierand therefore we will have maximum
> transmission if L= N *lambda/2 (like for a quantum point contact) with N
> Integer and expect extinction if N is half integer.
>
> example: L=30, lambda =4 ===> N=15 oscillating at E=0. L=31 >N=15+1/2
> extinction.
>
> Since you are using an energy E=0.0001 a little bit different from 0 so
> you do not see the full extinction. This is due to the fact that wavelength
> lambda is not integer anymore
>
> If you use an energy far from the middle of the band, even and odd systems
> will behave the same way.
>
> take more values of das=np.linspace(0,10,201) to see correctly the
> oscillating behaviour of the conductance.
>
> I hope this helps
> Adel
>
> On Tuesday, September 5, 2017, Liu Feng  wrote:
>
>> Dear All,
>>
>>   I have met a strange problem in computing conductance of 1D quantum
>> wire.
>>   The setup is as follows:
>>   The hopping of the quantum wire is given by the first kind of
>> Bessel function, for example, J0(A).
>>   The coupling of the lead is set as 1.
>>   As we know in this case the transmission should be proportional to
>> J0(A)^2. However, I get very different results for wire of even and odd
>> sites numbers as shown in the attachment...
>>   Is this a bug or do I miss something else?
>>
>> source code
>> --
>> """
>> @author: liu
>> """
>> #import the plot function
>> from matplotlib import pyplot
>> import numpy as np
>> #turn on kwant
>> import kwant
>> import scipy.special as sp #Bessel function
>>
>> def family_color(site):
>> if site.tag[0] in defect:
>> return 'magenta'
>> else:
>> return 'black'
>>
>> def conduct(mu,da):
>>
>>
>> sys=kwant.Builder()
>> a=1
>> lat=kwant.lattice.square(a)
>> t=sp.jn(0,da)
>> W=1
>> L=31
>> #da=1.0
>> #mu=0.0
>> for i in range(L):
>> for j in range(W):
>> #sys[lat(i,j)]=4*t
>> if i in defect:
>> sys[lat(i,j)]=mu+da
>> else:
>> sys[lat(i,j)]=mu
>>
>> if j>0:
>> sys[lat(i, j), lat(i, j-1)]=-t
>> if i>0:
>> sys[lat(i, j), lat(i-1, j)]=-t
>>
>> #build the lead
>> sys_left_lead=kwant.TranslationalSymmetry((-a,0))
>> left_lead=kwant.Builder(sys_left_lead)
>>
>> #define the hopping in the lead, it is enough to only add one unit cell
>> hopping
>> #translational symmetry takes care the remainings.
>>
>> for j in range(W):
>> left_lead[lat(-1, j)]=mu
>> if j>0:
>> left_lead[lat(0, j), lat(0, j-1)]=-1.0
>> left_lead[lat(-1, j), lat(-2, j)]=-1.0
>>
>> #attach the left lead
>> sys.attach_lead(left_lead)
>>
>> #similarly we define the right lead
>> sym_right_lead=kwant.TranslationalSymmetry((a,0))
>> right_lead=kwant.Builder(sym_right_lead)
>> for j in range(W):
>> right_lead[lat(L,j)]=mu
>> if j>0:
>> right_lead[lat(L,j),lat(L,j+1)]=-1.0;
>> right_lead[lat(L,j),lat(L+1,j)]=-1.0;
>> sys.attach_lead(right_lead)
>>
>> #plot system
>> #kwant.plot(sys,site_color=family_color)
>> #kwant.plotter.bands(left_lead.finalized())
>>
>> #finalize the system for conductivity computation
>> sys=sys.finalized()
>> return energies,kwant.smatrix(sys,0.0001).transmission(1,0)
>>
>> das=np.linspace(0,10,51)
>>
>> ts=[]
>> defect=[1000]
>> #energies,data,t=conduct(mu=0.0,da=0.0)
>> #pyplot.plot(energies,data)
>> for tda in das:
>> energies,t=conduct(mu=0,da=tda)
>> ts.append(t)
>>
>> #plot the conductance
>>
>>
>>
>>
>>
>> #pyplot.ylim([0,1])
>> pyplot.show()
>> pyplot.figure()
>> pyplot.plot(das,ts)
>> pyplot.xlabel('A')
>> pyplot.ylabel('conductance[e^2/h]')
>>
>>
>> Best regards,
>> Feng Liu
>>
>>
>
> --
> Abbout Adel
>


[Kwant] A weird result of 1D quantum wire

2017-09-05 Thread Liu Feng
Dear Joe,

   Many thanks for your reply.
   After replacing all the manually given hoppings by lat.neighbors()
method, I still obtain the same result. Also, the system is plotted for the
length L of even and odd numbers, which gives corrected tight-binding
system.
   So I think as Adel said in his reply, the result is the expected
physical one.
   After checking some materials, I found it is a known effect in clean
1D quantum wires which is called even-odd oscillation, for example,
discussed in PRB 78, 045428 and PRB 41, 8553.

Best regards,
feng

Joseph Weston 于2017年9月6日周三 上午1:08写道:

> Dear Liu,
>
>
> >   I have met a strange problem in computing conductance of 1D
> > quantum wire.
> >   The setup is as follows:
> >   The hopping of the quantum wire is given by the first kind of
> > Bessel function, for example, J0(A).
> >   The coupling of the lead is set as 1.
> >   As we know in this case the transmission should be proportional
> > to J0(A)^2. However, I get very different results for wire of even and
> > odd sites numbers as shown in the attachment...
> >   Is this a bug or do I miss something else?
> >
>
> This is probably not a bug in Kwant. I see in your script that you do
> not construct your system in a very idiomic manner (you manually add
> nearest-neighbor hoppings etc). Are you sure you did not make a mistake
> during system construction? Did you plot the system in the two cases
> (even/odd) and see that everything is as you expect?
>
> Happy Kwanting,
>
> Joe
>
>


Re: [Kwant] A weird result of 1D quantum wire

2017-09-05 Thread Abbout Adel
Dear Liu,

I think that there is no problem in your result. It is the expected
physical result!

This behaviour is due to the fact that you are near the middle of the
conduction band.

To see it better, put the energy exactly =0. you will find that the
conductance is zero for odd numbers and oscillating for even.

In fact, for Ef=0, you have the wavenumber k=pi/2 and Lambda=2pi/k=4 (E=-2t
cos(k), whatever is the value of t, when E=0, k=pi/2 )

The system is like a tunneling barrierand therefore we will have maximum
transmission if L= N *lambda/2 (like for a quantum point contact) with N
Integer and expect extinction if N is half integer.

example: L=30, lambda =4 ===> N=15 oscillating at E=0. L=31 >N=15+1/2
extinction.

Since you are using an energy E=0.0001 a little bit different from 0 so you
do not see the full extinction. This is due to the fact that wavelength
lambda is not integer anymore

If you use an energy far from the middle of the band, even and odd systems
will behave the same way.

take more values of das=np.linspace(0,10,201) to see correctly the
oscillating behaviour of the conductance.

I hope this helps
Adel

On Tuesday, September 5, 2017, Liu Feng  wrote:

> Dear All,
>
>   I have met a strange problem in computing conductance of 1D quantum
> wire.
>   The setup is as follows:
>   The hopping of the quantum wire is given by the first kind of Bessel
> function, for example, J0(A).
>   The coupling of the lead is set as 1.
>   As we know in this case the transmission should be proportional to
> J0(A)^2. However, I get very different results for wire of even and odd
> sites numbers as shown in the attachment...
>   Is this a bug or do I miss something else?
>
> source code
> --
> """
> @author: liu
> """
> #import the plot function
> from matplotlib import pyplot
> import numpy as np
> #turn on kwant
> import kwant
> import scipy.special as sp #Bessel function
>
> def family_color(site):
> if site.tag[0] in defect:
> return 'magenta'
> else:
> return 'black'
>
> def conduct(mu,da):
>
>
> sys=kwant.Builder()
> a=1
> lat=kwant.lattice.square(a)
> t=sp.jn(0,da)
> W=1
> L=31
> #da=1.0
> #mu=0.0
> for i in range(L):
> for j in range(W):
> #sys[lat(i,j)]=4*t
> if i in defect:
> sys[lat(i,j)]=mu+da
> else:
> sys[lat(i,j)]=mu
>
> if j>0:
> sys[lat(i, j), lat(i, j-1)]=-t
> if i>0:
> sys[lat(i, j), lat(i-1, j)]=-t
>
> #build the lead
> sys_left_lead=kwant.TranslationalSymmetry((-a,0))
> left_lead=kwant.Builder(sys_left_lead)
>
> #define the hopping in the lead, it is enough to only add one unit cell
> hopping
> #translational symmetry takes care the remainings.
>
> for j in range(W):
> left_lead[lat(-1, j)]=mu
> if j>0:
> left_lead[lat(0, j), lat(0, j-1)]=-1.0
> left_lead[lat(-1, j), lat(-2, j)]=-1.0
>
> #attach the left lead
> sys.attach_lead(left_lead)
>
> #similarly we define the right lead
> sym_right_lead=kwant.TranslationalSymmetry((a,0))
> right_lead=kwant.Builder(sym_right_lead)
> for j in range(W):
> right_lead[lat(L,j)]=mu
> if j>0:
> right_lead[lat(L,j),lat(L,j+1)]=-1.0;
> right_lead[lat(L,j),lat(L+1,j)]=-1.0;
> sys.attach_lead(right_lead)
>
> #plot system
> #kwant.plot(sys,site_color=family_color)
> #kwant.plotter.bands(left_lead.finalized())
>
> #finalize the system for conductivity computation
> sys=sys.finalized()
> return energies,kwant.smatrix(sys,0.0001).transmission(1,0)
>
> das=np.linspace(0,10,51)
>
> ts=[]
> defect=[1000]
> #energies,data,t=conduct(mu=0.0,da=0.0)
> #pyplot.plot(energies,data)
> for tda in das:
> energies,t=conduct(mu=0,da=tda)
> ts.append(t)
>
> #plot the conductance
>
>
>
>
>
> #pyplot.ylim([0,1])
> pyplot.show()
> pyplot.figure()
> pyplot.plot(das,ts)
> pyplot.xlabel('A')
> pyplot.ylabel('conductance[e^2/h]')
>
>
> Best regards,
> Feng Liu
>
>

-- 
Abbout Adel


Re: [Kwant] A weird result of 1D quantum wire

2017-09-05 Thread Joseph Weston
Dear Liu,


>   I have met a strange problem in computing conductance of 1D
> quantum wire.
>   The setup is as follows:
>   The hopping of the quantum wire is given by the first kind of
> Bessel function, for example, J0(A).
>   The coupling of the lead is set as 1.
>   As we know in this case the transmission should be proportional
> to J0(A)^2. However, I get very different results for wire of even and
> odd sites numbers as shown in the attachment...
>   Is this a bug or do I miss something else?
>

This is probably not a bug in Kwant. I see in your script that you do
not construct your system in a very idiomic manner (you manually add
nearest-neighbor hoppings etc). Are you sure you did not make a mistake
during system construction? Did you plot the system in the two cases
(even/odd) and see that everything is as you expect?

Happy Kwanting,

Joe



signature.asc
Description: OpenPGP digital signature


Re: [Kwant] [EXTERNAL] Re: beyond effective mass (limiting kwant to a range of k)

2017-09-05 Thread Maurer, Leon
Hi Rafal and Joseph,

Thank you for your replies.

“Tight binding” can have multiple meanings in this context, so I could use a 
little clarification.

The dispersion that I showed is already a tight-binding model in the sense that 
the spin 
example
 in the tutorial is a tight-binding model: I set up a lattice in kwant 
(kwant.lattice.chain in my case) and define the Cardona and Pollak Hamiltonian 
matrix at each site, and the momentum operators are turned into finite 
differences between the sites. I believe this is equivalent to using kwant’s 
continuum module.

The other meaning I can think of is to calculate the band structure using the 
tight-binding method directly in kwant: making a proper Si lattice in kwant, 
connecting the sites with the proper tight-binding matrix elements, etc. I’m 
sure that’s doable, but doing calculations with a 3D lattice sounds expensive.

What meaning of “tight-binding model” are you thinking of?

Do you have any ideas for how to make the modes that I don’t want become 
evanescent or otherwise get out of the energy range that I care about? The 
standard k.p method generates the band structure by perturbing free-particle 
electron states. As a consequence, at high enough ‘k’, all the modes look like 
parabolas, and I don’t think it’s possible to get the unwanted bands “out of 
the way”; the only way they can go is “up”. (I think that I’ve seen some funky 
k.p method that uses free-particle electron and “hole” states, so there are 
parabolas that face both up and down, which would allow a band-gap to exist 
even at large k. That could at least get the unwanted modes out of the band 
gap.)

-Leon

From: Rafal Skolasinski 
Date: Saturday, September 2, 2017 at 7:12 AM
To: "Maurer, Leon" 
Cc: "kwant-discuss@kwant-project.org" 
Subject: [EXTERNAL] Re: [Kwant] beyond effective mass (limiting kwant to a 
range of k)


Hi Leon,

Using more advance models like k.p is definitely a good and reasonable idea 
when one want to get more details about the system.
More advance models like k.p should work without problems with Kwant, you are 
not restricted to one band effective mass models.

What Kwant cannot do however is to use continuous model to calculate transport 
properties. You always need to have a tight-binding model.
Kwant’s continuum module 
that was introduced in version 1.3 can be helpful here.

When you do a transport calculations with Kwant you only need to take care that 
in desire energy window your tight-binding dispersion
agrees with continuous k.p dispersion.

So to answer to your question

is there a reasonably simple way to restrict the range of k values that kwant 
considers?

would be: you don’t need to restrict the range of k values, you need to make 
sure that your model is correct at the
energy you are interested in.

If I missed something I believe core developers will correct me.

Best,
Rafal
​



--
Rafał Skolasiński

WebPage: https://quantumtinkerer.tudelft.nl/members/rafal/
GitHub: https://github.com/RafalSkolasinski
Kwant GitLab: https://gitlab.kwant-project.org/r-j-skolasinski


On 2 September 2017 at 00:40, Maurer, Leon 
> wrote:
Hello,

I’m interested in using kwant to look at transport beyond the effective mass 
approximation. To that end, I’ve entered a Hamiltonian that reproduces 
silicon’s band structure [specifically, the k.p Hamiltonian from M. Cardona and 
F. H. Pollak, Phys. Rev. 142, 530 (1966)] into a 1D kwant lattice.

When I plot the bands in the leads using kwant.plotter.bands, at first it looks 
nothing like Si’s band structure (see lead_bands.pdf, attached). However, when 
zoomed in to an appropriate k range for Si, Si’s band structure is there as 
expected (see lead_bands_zoom.pdf, attached). To be more specific, this is Si’s 
band structure in the (100) direction, which is what I was aiming for.

However, this is still useless for transport because kwant calculates 
transmission as a function of energy for all k values – including k values that 
are meaningless for Si and need to be excluded from the calculation.

So, I think that my question boils down to: is there a reasonably simple way to 
restrict the range of k values that kwant considers? If not, can you think of 
another way to hack a full band structure into kwant?

Thanks.

-Leon

PS. Just to preempt some non-helpful answers: I am not interested in replies 
along the lines of “You couldn’t possibly need to include the full band 
structure. Just use an effective mass.” I have good reasons to want to include 
the full band structure.



[Kwant] A weird result of 1D quantum wire

2017-09-05 Thread Liu Feng
Dear All,

  I have met a strange problem in computing conductance of 1D quantum
wire.
  The setup is as follows:
  The hopping of the quantum wire is given by the first kind of Bessel
function, for example, J0(A).
  The coupling of the lead is set as 1.
  As we know in this case the transmission should be proportional to
J0(A)^2. However, I get very different results for wire of even and odd
sites numbers as shown in the attachment...
  Is this a bug or do I miss something else?

source code
--
"""
@author: liu
"""
#import the plot function
from matplotlib import pyplot
import numpy as np
#turn on kwant
import kwant
import scipy.special as sp #Bessel function

def family_color(site):
if site.tag[0] in defect:
return 'magenta'
else:
return 'black'

def conduct(mu,da):


sys=kwant.Builder()
a=1
lat=kwant.lattice.square(a)
t=sp.jn(0,da)
W=1
L=31
#da=1.0
#mu=0.0
for i in range(L):
for j in range(W):
#sys[lat(i,j)]=4*t
if i in defect:
sys[lat(i,j)]=mu+da
else:
sys[lat(i,j)]=mu

if j>0:
sys[lat(i, j), lat(i, j-1)]=-t
if i>0:
sys[lat(i, j), lat(i-1, j)]=-t

#build the lead
sys_left_lead=kwant.TranslationalSymmetry((-a,0))
left_lead=kwant.Builder(sys_left_lead)

#define the hopping in the lead, it is enough to only add one unit cell
hopping
#translational symmetry takes care the remainings.

for j in range(W):
left_lead[lat(-1, j)]=mu
if j>0:
left_lead[lat(0, j), lat(0, j-1)]=-1.0
left_lead[lat(-1, j), lat(-2, j)]=-1.0

#attach the left lead
sys.attach_lead(left_lead)

#similarly we define the right lead
sym_right_lead=kwant.TranslationalSymmetry((a,0))
right_lead=kwant.Builder(sym_right_lead)
for j in range(W):
right_lead[lat(L,j)]=mu
if j>0:
right_lead[lat(L,j),lat(L,j+1)]=-1.0;
right_lead[lat(L,j),lat(L+1,j)]=-1.0;
sys.attach_lead(right_lead)

#plot system
#kwant.plot(sys,site_color=family_color)
#kwant.plotter.bands(left_lead.finalized())

#finalize the system for conductivity computation
sys=sys.finalized()
return energies,kwant.smatrix(sys,0.0001).transmission(1,0)

das=np.linspace(0,10,51)

ts=[]
defect=[1000]
#energies,data,t=conduct(mu=0.0,da=0.0)
#pyplot.plot(energies,data)
for tda in das:
energies,t=conduct(mu=0,da=tda)
ts.append(t)

#plot the conductance





#pyplot.ylim([0,1])
pyplot.show()
pyplot.figure()
pyplot.plot(das,ts)
pyplot.xlabel('A')
pyplot.ylabel('conductance[e^2/h]')


Best regards,
Feng Liu