Dear Adel:

Thanks for your reply and the code. I have read it through (also the linked 
thread). I am aware that the green's function is not the total one. 

What I am doing is obtain the total one by inverse the whole Hamiltonian matrix 
plus the self-energy. Then select the part that connected to the leads, and 
compare it with the one kwant calculated. I found they don't match.

I have added the some comments on my code to clarify my question
```
lat = kwant.lattice.square()

def make_system(r=20, t=-1):

    def circle(pos):
        x, y = pos
        return x**2 + y**2 < r**2

    syst = kwant.Builder()
    syst[lat.shape(circle, (0, 0))] = 0
    syst[lat.neighbors()] = t
    syst.eradicate_dangling()

    def lead_shape(pos):
        return -15 < pos[0] < 15  
        
    lead = kwant.Builder( kwant.TranslationalSymmetry((0, 1)))

    lead[lat.shape(lead_shape, (0, 0))] = 0
    lead[lat.neighbors()] = -t
    syst.attach_lead(lead)
    return syst

syst = make_system()
fsyst = syst.finalized()
kwant.plot(fsyst)


greens_function=kwant.greens_function(fsyst)
Hc = fsyst.hamiltonian_submatrix(sparse=False)

# the index of the sites IN SYSTEM which connected to lead
index = fsyst.lead_interfaces[0]

# add the self energy to the original matrix
Hc[np.ix_(index, index)] += greens_function.lead_info[0]

# inverse it, to get the total Green's function of the whole system
Gr = np.linalg.inv(-Hc)

# Should be a zero matrix! The first term is the green's function of the 
selected sites.
Gr[np.ix_(index, index)]-greens_function.submatrix(0, 0)
```

I am also very interested in your last comment, about how to get the whole 
green's function of the system (include the bulk sites). I hope you can provide 
me some links, thank you very much.

Reply via email to