Good morning, Joe,
  Thank you, then it looks as I have done it right,  but I was confused as I got slightly asymmetric current plot from symmetric geometry.  Then, the problem might be in asymmetric choice of starting points for streamplot. I am trying to manually add the symmetric set of starting points. My code is:

J_0 = kwant.operator.Current(sys)
seed_points = numpy.array([ [x, y]  for y in numpy.nditer(numpy.linspace(-Wsample/2, Wsample/2, 40)) for x in numpy.nditer(numpy.linspace(5 , Wcontact+xmiddle-5, 3))])

for en in [0.001, 0.01, 0.02]:
    wf = kwant.solvers.default.wave_function(sys, energy=en, args=[phi,chempot,0])
    psi=wf(1)
    currents = [J_0(p,  args=[phi,chempot,0]) for p in psi]
    current=sum(currents)
    kwant.plotter.current(sys, current, relwidth=0.05, start_points=seed_points)
    pyplot.show(block=False)

I have two small questions here:
1)  This code gives a strange error:

The debugged program raised the exception unhandled TypeError
"streamplot() got an unexpected keyword argument 'start_points'"
File: /home/sergey/.local/lib/python3.6/site-packages/kwant/plotter.py, Line: 2164

which is strange since start_points  is in the streamplot documentation

2)  How to make several plots be generated without manual closure of the previous one?  My command     pyplot.show(block=False) does not seem to work in this case.

Thanks,
Sergey

On 19/10/18 10:01, Joseph Weston wrote:
Good morning,


Hi Joe,  Thank you, now it works!
Nice!

   But I am a bit confused about the physical meaning of the current,
created by modes in lead n.   How to plot the real current between the
two leads?  Imagine,  as the simplest case, that my geometry is
inversion-symmetric,  so that lead 0 goes into lead 1 under
inversion.  Then I expect the current to be inversion-symmetric as well.
Summing the current contributions for *all* the scattering states
originating from lead L at an energy E gives you the current you would
measure if the fermi levels in all the leads are at energy E and you
apply an infinitesimal voltage to lead L.

For example if we want to see the current profile if we add an
infinitesimal voltage dV to lead 0:

     wfs = kwant.wave_function(syst, energy=E, params=...)
     J_0 = dV * sum(J(psi) for psi in wfs(0))

This is analogous to the transmission obtained by kwant.smatrix:

     smatrix = kwant.smatrix(syst, energy=E, params=...)
     I_10 = dV * smatrix.transmission(1, 0)

I_10 is the current we would measure in lead 1 after applying dV to lead 0.

In the above I have elided the e^2/h factor for brevity, but hopefully I
have been clear enough to get the point across.

Hope that helps,

Joe








Reply via email to