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 (http://thread.gmane.org/gmane.comp.science.kwant.user/647).

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 ?
 (http://kwant-project.org/doc/1/reference/generated/kwant.solvers.common.GreensFunction#kwant.solvers.common.GreensFunction)

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


This message and its contents, including attachments are intended solely for the original recipient. If you are not the intended recipient or have received this message in error, please notify me immediately and delete this message from your computer system. Any unauthorized use or distribution is prohibited. Please consider the environment before printing this email.