# Re: [Kwant] a step tripping up Kwant

```Hi Leon,

The upper and bottom limits of the conduction band are obtained from the
relation of dispersion.```
```
E=V-2t *cos(k)                   (#  in your case V=2t for left lead and V0
for the right lead ).

For more details, you can look for example to :
http://www-personal.umich.edu/~sunkai/teaching/Fall_2014/Chapter6.pdf

Regards,
Adel

On Mon, Oct 17, 2016 at 10:34 PM, Maurer, Leon <lmau...@sandia.gov> wrote:

> Hi Abbout,
>
> Is the upper bound on the energies in the leads documented somewhere? I
> guess it’s implicit in Sec. 2.4 of the tutorial, and now that you mention
> it, it makes sense given the periodic lattice.
>
> -Leon
>
> From: Abbout Adel <abbout.a...@gmail.com>
> Date: Monday, October 17, 2016 at 11:58 AM
> To: "Leon Maurer (lmaurer)" <lmau...@sandia.gov>
> Cc: "kwant-discuss@kwant-project.org" <kwant-discuss@kwant-project.org>
> Subject: [EXTERNAL] Re: [Kwant] a step tripping up Kwant
>
> Dear Leon,
>
> the value of the parameter 't' in your program is  around 16. this means
> that the conduction band for the left lead is
> band_l=[0, 4 t ]=[0,64] and the conduction band for the right lead is
> band_r=[V0, V0+4 t]=[100, 164]
>
> as you can notice there is no energy which conducts in both leads. In
> order to have a non zero transmission you need to use a value of V0<4 t.
>
> The result you are calling "exact" is valid for a continuous model: on a
> lattice, the dispersion relation is not quadratic.
>
> To compare, your result with the continuous limit, you need to choose V0<<
> 2t.
>
> For a "non uniform finite differences", you can look at the article [1]
>
>
>
> Hope that this helps.
> Adel
>
> [1]: http://scitation.aip.org/content/aip/journal/jap/68/8/10.
> 1063/1.346245
>
> On Mon, Oct 17, 2016 at 7:10 PM, Maurer, Leon <lmau...@sandia.gov> wrote:
>
>> Hello everyone,
>>
>> I’ve been playing around with Kwant and come across some situations where
>> the transmission between two leads is identically equal to zero when I
>> wouldn’t expect that result.
>>
>> I’ve come up with a simple working example: a 1D step function with a
>> step height that’s large relative to the lattice spacing (code below),
>> altho this problem seems to sometimes crop up in other, somewhat less
>> extreme situations.
>>
>> I understand that the numerical result should become less accurate as the
>> step-height-to-lattice-spacing ratio increases, but why does the
>> transmission become identically equal to zero at some point? Are there
>> well-defined conditions for when this happens? Is there some way to know
>> that the transmission is zero because of numerical issues rather than the
>> underlying physics?
>>
>> (Ultimately, I’m interested in modeling some systems where the potential
>> mostly varies gradually but has a few small regions with abrupt changes in
>> potential. Moving to a finer mesh (smaller lattice constant) everywhere is
>> cost-prohibitive. Having some tool to easily refine the mesh in a region
>> would be very useful.)
>>
>> Thanks.
>>
>> -Leon
>>
>>
>> (Below code taken from jupyter notebook.)
>>
>>
>> # In[1]:
>>
>> get_ipython().magic('load_ext autoreload')
>> get_ipython().magic('autoreload 2')
>> from numpy import *
>> import matplotlib.pyplot as plt
>> get_ipython().magic('matplotlib inline')
>> import tqdm
>> import kwant
>>
>>
>> # In[2]:
>>
>> m0 = 9.10938215e-31 # Electron mass, [kg]
>> hbar = 1.054571726e-34 # hbar in [J] [s]
>> q = 1.602176565e-19 # Elementary charge, [C]
>> mt = 0.19
>> ml = 0.92
>>
>> m = mt*m0
>>
>> # In[3]:
>>
>> V0 = 100 # step height
>> x = linspace(0,100,30) # thirty grid points
>> U = zeros_like(x)
>> U[len(x)//2:] = V0
>> plt.plot(x,U)
>>
>>
>> # In[4]:
>>
>> a = x[1]-x[0] # grid spacing [nm]
>> t = hbar**2/(2.*m*(a*1e-9)**2)/q*1e3 #hopping parameter [meV]
>>
>> lat = kwant.lattice.chain(a) # Set up the transport simulation on a 1D
>> latice
>> sys = kwant.Builder() # initialize the transport simulation
>> for i in range(len(U)): # populate based on the potential landscape
>>     sys[lat(i)]=U[i]+2*t
>>
>> sys[lat.neighbors()] = -t # set the finite-difference hopping parameters
>> leftLead = kwant.Builder(kwant.TranslationalSymmetry((-a,))) # the lead
>> to the left
>> leftLead[lat(0)] = 2*t + U[0]
>> leftLead[lat.neighbors()] = -t
>> sys.attach_lead(leftLead) # attach it
>>
>> rightLead = kwant.Builder(kwant.TranslationalSymmetry((a,))) # the lead
>> to the right
>> rightLead[lat(0)] = 2*t + U[-1]
>> rightLead[lat.neighbors()] = -t
>> sys.attach_lead(rightLead) # attach it
>> sys = sys.finalized()
>>
>>
>> # In[5]:
>>
>> def plot_conductance(sys, energies):
>>     # Compute transmission numerically
>>     data = []
>>     for energy in tqdm.tqdm(energies,leave=True):
>>         smatrix = kwant.smatrix(sys, energy)
>>         data.append(smatrix.transmission(1, 0))
>>
>>     # Compute exact conductance
>>     k1 = sqrt(2*m*energies/hbar**2)
>>     k2 = sqrt(2*m*(energies - V0)/hbar**2)
>>     T = 4*k1*k2/(k1+k2)**2
>>     T[energies <= V0] = 0
>>
>>     plt.figure()
>>     plt.plot(energies, data, energies, T)
>>     plt.legend(('numerical','exact'), loc=4)
>>     plt.xlabel("energy [V0]")
>>     plt.ylabel("Transmission")
>>     plt.show()
>>     return data, T
>>
>>
>> # In[6]:
>>
>> stepNumerical, stepExact = plot_conductance(sys,linspace(1e-9,2*V0,201))
>>
>>
>> # In[7]:
>>
>> print(stepNumerical)
>>
>>
>
>
> --
> Abbout Adel
>

--
Abbout Adel
```