A question regarding the conductance formula in Kwant paper

Hi,
I have a question regarding the equation you use to calculate the conductance (Eq. (10)) in the Kwant paper, and how it relates to Eq. (47) in this paper (https://arxiv.org/pdf/cond-mat/9910158v2.pdf) by Büttiker et al
I tried to use both methods to calculate the conductance in a simple 2D two-terminal geometry. As far as I understand, you calculate the conductance assuming that the two leads only differ infinitesimally (so for low temperatures I guess it is safe to assume that the fermi-function is a delta-function around the fermi energy). My system is so that I have 2 modes in each lead. So, assume that I want the conductance in lead 0
Your formula G_00 = S_00^2 + S_01^2 S_10^2 + S_11^2 = 1.9 (the result I get from doing this is consistent with transmission(0,0))
Büttiker G_00 = - ( N_0 - S_00^2 - S_11^2) = -0.1 Where N_0 = 2 (number of modes).
Now, the numerical values I got from running my program, which I include as well below. Should these results not be the same? Or is my interpretation of their meaning wrong?
Before I include the script I would just like to say thank you for making Kwant, and also I am very gratefull that you take your time to answer all my questions so quickly. I really appreciate it. Thank you!
Best, Camilla
# Tutorial 2.2.3. Building the same system with less code # ======================================================= # # Physics background # ------------------ # Conductance of a quantum wire; subbands # # Kwant features highlighted # -------------------------- # - Using iterables and builder.HoppingKind for making systems # - introducing `reversed()` for the leads # # Note: Does the same as tutorial1a.py, but using other features of Kwant.
import kwant
# For plotting from matplotlib import pyplot from math import pi, sqrt, tanh
import numpy as np from numpy import ndarray import scipy from scipy.constants import *
def modes(energy): return 0
def plot_bandstructure(flead, momenta): bands = kwant.physics.Bands(flead) energies = [bands(k) for k in momenta]
pyplot.figure() pyplot.plot(momenta, energies) pyplot.xlabel("momentum [(lattice constant)^-1]") pyplot.ylabel("energy [t]") pyplot.show()
def make_system(a=1.0, t=1.0, W=2, L=3): # Start with an empty tight-binding system and a single square lattice. # `a` is the lattice constant (by default set to 1 for simplicity. lat = kwant.lattice.square(a)
sys = kwant.Builder()
#### Define the scattering region. #### sys[(lat(x, y) for x in range(L) for y in range(W))] = 4 * t + 2 sys[lat.neighbors()] = -t
#### Define and attach the leads. #### # Construct the left lead. lead = kwant.Builder(kwant.TranslationalSymmetry((-a, 0))) lead[(lat(0, j) for j in range(W))] = 4 * t lead[lat.neighbors()] = -t
# Attach the left lead and its reversed copy. sys.attach_lead(lead) lead2 = kwant.Builder(kwant.TranslationalSymmetry((a, 0))) lead2[(lat(L, j) for j in range(W))] = 4 * t lead2[lat.neighbors()] = -t sys.attach_lead(lead2)
return sys, lead
def plot_conductance(sys, energies): # Compute conductance data = [] for energy in energies: smatrix = kwant.smatrix(sys, energy) data.append(smatrix.transmission(1, 0))
pyplot.figure() pyplot.plot(energies, data) pyplot.xlabel("energy [t]") pyplot.ylabel("conductance [e^2/h]") pyplot.show()
def main(): sys, lead = make_system()
# Check that the system looks as intended. # kwant.plot(sys)
# Finalize the system. sys = sys.finalized()
en = 3 sm = kwant.smatrix(sys, en)
print('transmission by kwant: ',sm.transmission(0,0))
smatrix = sm.data sdags = (smatrix.conj().T) # As from Eq. (10) in kwant paper print((sdags[0,0]*smatrix[0,0] + sdags[0,1]*smatrix[0,1] + sdags[1,1]*smatrix[1,1]+ sdags[1,0]*smatrix[1,0])) # As from Eq. (47) in buttiker print(sdags[0,0]*smatrix[0,0]+sdags[1,1]*smatrix[1,1] - 2)
# Call the main function if the script gets executed (as opposed to imported). # See http://docs.python.org/library/__main__.html. if __name__ == '__main__': main()

Dear Camilla,
The two relations, (eq. 10 kwant paper and eq. (47) Büttiker et al) are exactly the same for transmission between two* different *leads (just develop the trace to check it *zero temperature of course*).
Now, if alpha== beta, the formula by Büttiker et al gives the reflection coefficient 'R' whereas the calculation of kwant "smatrix.transmission(alpha,alpha) gives an intermediate value to calculate the reflection R. Indeed you need for kwant to do R=N-smatrix.transmission(alpha,alpha) which is the physical value you want to calculate and which is at the same time the result given by eq. (47) Büttiker et al.
I think, that what confused you to notice this is the mistake you did in the sign of eq. (47) Büttiker et al: the derivative of Fermi-Dirac distribution will give ' - delta function' and not '+'
So the sum of your two results is always 2 (the number of the conducting modes) for all the energies where there are two conducting modes.
So to summarize: * you need to correct the sign in your program for eq. (47) Büttiker et al *you need to know that kwant gives the intermediate result to calculate R
check the example of kwant on superconductivity https://kwant-project.org/doc/1.0/tutorial/tutorial5
I hope that this helps.
Regards, Adel
On Wed, Dec 7, 2016 at 1:31 PM, Camilla Espedal camilla.espedal@ntnu.no wrote:
Hi,
I have a question regarding the equation you use to calculate the conductance (Eq. (10)) in the Kwant paper, and how it relates to Eq. (47) in this paper (https://arxiv.org/pdf/cond-mat/9910158v2.pdf) by Büttiker et al
I tried to use both methods to calculate the conductance in a simple 2D two-terminal geometry. As far as I understand, you calculate the conductance assuming that the two leads only differ infinitesimally (so for low temperatures I guess it is safe to assume that the fermi-function is a delta-function around the fermi energy). My system is so that I have 2 modes in each lead. So, assume that I want the conductance in lead 0
Your formula
G_00 = S_00^2 + S_01^2 S_10^2 + S_11^2 = 1.9
(the result I get from doing this is consistent with transmission(0,0))
Büttiker
G_00 = - ( N_0 – S_00^2 – S_11^2) = -0.1
Where N_0 = 2 (number of modes).
Now, the numerical values I got from running my program, which I include as well below. Should these results not be the same? Or is my interpretation of their meaning wrong?
Before I include the script I would just like to say thank you for making Kwant, and also I am very gratefull that you take your time to answer all my questions so quickly. I really appreciate it. Thank you!
Best,
Camilla
# Tutorial 2.2.3. Building the same system with less code
# =======================================================
#
# Physics background
# ------------------
# Conductance of a quantum wire; subbands
#
# Kwant features highlighted
# --------------------------
# - Using iterables and builder.HoppingKind for making systems
# - introducing `reversed()` for the leads
#
# Note: Does the same as tutorial1a.py, but using other features of Kwant.
import kwant
# For plotting
from matplotlib import pyplot
from math import pi, sqrt, tanh
import numpy as np
from numpy import ndarray
import scipy
from scipy.constants import *
def modes(energy):
return 0
def plot_bandstructure(flead, momenta):
bands = kwant.physics.Bands(flead) energies = [bands(k) for k in momenta] pyplot.figure() pyplot.plot(momenta, energies) pyplot.xlabel("momentum [(lattice constant)^-1]") pyplot.ylabel("energy [t]") pyplot.show()
def make_system(a=1.0, t=1.0, W=2, L=3):
# Start with an empty tight-binding system and a single square lattice. # `a` is the lattice constant (by default set to 1 for simplicity. lat = kwant.lattice.square(a) sys = kwant.Builder() #### Define the scattering region. #### sys[(lat(x, y) for x in range(L) for y in range(W))] = 4 * t + 2 sys[lat.neighbors()] = -t #### Define and attach the leads. #### # Construct the left lead. lead = kwant.Builder(kwant.TranslationalSymmetry((-a, 0))) lead[(lat(0, j) for j in range(W))] = 4 * t lead[lat.neighbors()] = -t # Attach the left lead and its reversed copy. sys.attach_lead(lead) lead2 = kwant.Builder(kwant.TranslationalSymmetry((a, 0))) lead2[(lat(L, j) for j in range(W))] = 4 * t lead2[lat.neighbors()] = -t sys.attach_lead(lead2) return sys, lead
def plot_conductance(sys, energies):
# Compute conductance data = [] for energy in energies: smatrix = kwant.smatrix(sys, energy) data.append(smatrix.transmission(1, 0)) pyplot.figure() pyplot.plot(energies, data) pyplot.xlabel("energy [t]") pyplot.ylabel("conductance [e^2/h]") pyplot.show()
def main():
sys, lead = make_system() # Check that the system looks as intended. # kwant.plot(sys) # Finalize the system. sys = sys.finalized() en = 3 sm = kwant.smatrix(sys, en) print('transmission by kwant: ',sm.transmission(0,0)) smatrix = sm.data sdags = (smatrix.conj().T) # As from Eq. (10) in kwant paper print((sdags[0,0]*smatrix[0,0] + sdags[0,1]*smatrix[0,1] +
sdags[1,1]*smatrix[1,1]+ sdags[1,0]*smatrix[1,0]))
# As from Eq. (47) in buttiker print(sdags[0,0]*smatrix[0,0]+sdags[1,1]*smatrix[1,1] - 2)
# Call the main function if the script gets executed (as opposed to imported).
# See http://docs.python.org/library/__main__.html.
if __name__ == '__main__':
main()
participants (2)
-
Abbout Adel
-
Camilla Espedal