Hello Adel,
Thank you again for responding to me. I am new to this Python world and I don’t
have much experience on the subject. However, discovering and learning Kwant
and Tkwant has been very interesting. I reproduced the example given in
reference [1]
https://mail.python.org/archives/list/[email protected]/thread/2VB4IKZSCBZZNZJOWS3QFSP2AT6FCYVL/.
But I still have some doubts about the Green functions in Kwant. Based on the
code below:
--------------------------------------------------------------------------------------------------------------------------------------------------------------------
import kwant
from types import SimpleNamespace
from copy import copy
import tinyarray
import numpy as np
import csv
import ipywidgets
from scipy import sparse
from matplotlib import pyplot
from scipy.optimize import minimize
sigma_x = tinyarray.array([[0, 1], [1, 0]])
sigma_y = tinyarray.array([[0, -1j], [1j, 0]])
sigma_z = tinyarray.array([[1, 0], [0, -1]])
sigma_0 = tinyarray.array([[1, 0], [0, 1]])
tau_x = tinyarray.array([[0, 1], [1, 0]])
tau_y = tinyarray.array([[0, -1j], [1j, 0]])
tau_z = tinyarray.array([[1, 0], [0, -1]])
tau_0 = tinyarray.array([[1, 0], [0, 1]])
def make_system_ex3(L=10):
lat = kwant.lattice.chain(norbs=2)
syst = kwant.Builder()
#### Define the scattering region. ####
def onsite_sc(site,t,mu,delta):
return (2.*t-mu )*tau_z + delta*tau_x
def onsite_N(site,t,mu,V_N):
return (2.*t-mu + V_N)*tau_z
syst[(lat(x) for x in range(1, L))] = onsite_sc
#### Superconducting onsite hamiltonian ####
syst[lat(L)] = onsite_N #normal onsite hamiltonian
syst[(lat(x) for x in range(L+1,2*L+1))] = onsite_sc #superconducting
onsite hamiltonian
def hop(site1,site2,t,phi):
return -t*np.matmul(np.exp(1j*phi*tau_z),tau_z)
syst[(lat(L-1), lat(L))] = hop
for i in range(1,L-1):
syst[(lat(i), lat(i+1))] = -t*tau_z
for i in range(L,2*L):
syst[(lat(i), lat(i+1))] = -t*tau_z
#### Define the leads ####
sym_left = kwant.TranslationalSymmetry([-1])
lead0 = kwant.Builder(sym_left)
lead0[(lat(0))] = (2.*t-mu)*tau_z + delta*tau_x
lead0[lat.neighbors()] = -t*tau_z
sym_right = kwant.TranslationalSymmetry([1])
lead1 = kwant.Builder(sym_right)
lead1[(lat(2*L+1))] = (2.*t-mu)*tau_z + delta*tau_x
lead1[lat.neighbors()] = -t*tau_z
##### Attach the leads and return the system ####
syst.attach_lead(lead0)
syst.attach_lead(lead1)
return syst, lat
mu=1
t=1.0
delta=0.5
V_N=1
phi=0
L=10
par = dict(t=t,mu=mu,delta=delta,phi=phi,V_N=V_N)
syst, lat = make_system_ex3(L=10)
def mount_vlead(sys, vlead_interface, norb):
dim = norb*len(vlead_interface)
print(dim)
zero_array = np.zeros((dim, dim), dtype=float)
def selfenergy_func(energy, args=()):
return zero_array
vlead = kwant.builder.SelfEnergyLead(selfenergy_func, vlead_interface,())
sys.leads.append(vlead)
lead2 = mount_vlead(syst,[lat(L-1)], 2)
lead3 = mount_vlead(syst,[lat(L)], 2)
syst =syst.finalized()
G12=kwant.greens_function(syst, energy=-1.8*1j, in_leads=[2],out_leads=[3],\
check_hermiticity=False,params=par).data
G21=kwant.greens_function(syst, energy=-1.8*1j, in_leads=[3],out_leads=[2],\
check_hermiticity=False,params=par).data
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
I have some questions about the code above:
1. The fictitious lead has a self-energy equal to zero. However, the system
defined in 'syst' has "real leads" attached. So, when we write
'kwant.greens_function(syst, energy=-1.8*1j, in_leads=[2],out_leads=[3],
check_hermiticity=False,params=par).data' will the contribution of the attached
leads be taken into account?
2. If not, how can we take into account the leads attached in 'syst'?
3. Is the function 'kwant.greens_function(syst, energy=-1.8*1j,
in_leads=[2],out_leads=[3], check_hermiticity=False,params=par).data' the
retarded Green's function?
4. How can I obtain the correlation function (Lesser Green's function)?
5. Is the 'energy' parameter always a complex number?
Best,
Gabriel