I am trying to calculate the Green's function for each layer/slice of a ribbon/wire. I can find the self energy and surface Green's function from which (in principle, I have not tried yet) it is possible find the Green's function for successive layer using RGF algorithm as discussed in this thread (
).
From the GreensFunction documentation, it looks like there is a way to specify the slice/block of the system and directly find the Green's function, but I don't find any example of that. Is there any way to do that ?
For example consider this graphene ribbon. I added a random impurity to break the translational symmetry so that I can distinguish each slice. I can find the Green's function for the sites which are connected to leads only. How do I calculate the Green's function for each slice?
Best,
Sumit
------------------------------------------------------
from __future__ import division
from math import sqrt
from matplotlib import pyplot
import kwant
import numpy as np
sin_30, cos_30 = (1 / 2, sqrt(3) / 2)
graphene = kwant.lattice.general([(1, 0), (sin_30, cos_30)],
[(0, 0), (0, 1 / sqrt(3))])
a, b = graphene.sublattices
L=3;W=3;
def box(pos): #scattering region
x, y = pos
return -L<x<L and -W<y<W
def lshape(pos): #lead
x,y = pos
return -W<y<W
def onsite(site):
return kwant.digest.uniform(repr(site))
hoppings = (((0, 0), a, b), ((0, 1), a, b), ((-1, 1), a, b))
def scater():
sys = kwant.Builder()
sys[graphene.shape(box, (0, 0))] = onsite
sys[[kwant.builder.HoppingKind(*hopping) for hopping in hoppings]] = -1
lead = kwant.Builder(kwant.TranslationalSymmetry(graphene.vec((-1, 0))))
lead[graphene.shape(lshape, (0, 0))] = 0
lead[[kwant.builder.HoppingKind(*hopping) for hopping in hoppings]] = -1
sys.attach_lead(lead)
sys.attach_lead(lead.reversed())
return sys
sys=scater()
#def family_colors(site):
# return 0 if site.family == a else 1
#kwant.plot(sys, site_color=family_colors, site_lw=0.1, colorbar=False)
sys = sys.finalized()
# Self energy
flead0 = sys.leads[0]
flead1 = sys.leads[1]
s_en = flead0.selfenergy(0.5)
#Green's function
g = kwant.greens_function(sys,0.5)
gg = g.submatrix(1,0)
--
Sumit Ghosh
Spintronics Theory Group
PSE Division
KAUST