Hi,

I am interested in calculating the wavefunction at sites inside the scattering 
region in systems with one or more leads. My goal is to calculate spin currents 
between sites, which requires to find expressions on the form 
\psi^{\dagger}(x,y) \vect{\sigma} \psi(x+1,y) and so on. As far as I understand 
one can use kwant.solvers.default.wave_function() and specify lead number, mode 
and a position (by inserting the site index) to get out a wave function (a 
complex number). My questions are then:


-  What is the wave function at a site when there are several leads and 
propagating modes at a given energy ? Is it a sum of all contributions from all 
leads and all propagating modes ?


- Can one get out the spin components of the wavefunction (not just a single 
number) ? (Maybe this is related to what modes we put in)



I use the dev version of kwant 1.3 where it is possible to specify a 
conservation_law in the lead.



I included a simple example below of a two-dimensional NFN-system where I try 
to get out the wavefunction at the site (1,2).


Best,

Sverre Gulbrandsen



import kwant
from matplotlib import pyplot
import tinyarray
# Define 2x2-matrices to span spin space:
sigma_0 = tinyarray.array([[1, 0], [0, 1]])
sigma_z = tinyarray.array([[1, 0], [0, -1]])

def make_system(a=1, t=1.0, W=10, L=30):
    lat = kwant.lattice.square(a, norbs=2)
    sys = kwant.Builder()
    sys[(lat(x, y) for x in range(L) for y in range(W))] = 4 * t * sigma_0 + 
0.2 * t * sigma_z
    sys[lat.neighbors()] = -t * sigma_0
    lead = kwant.Builder(kwant.TranslationalSymmetry((-a, 0)), 
conservation_law=-sigma_z)
    lead[(lat(0, j) for j in range(W))] = 4 * t * sigma_0
    lead[lat.neighbors()] = -t * sigma_0
     sys.attach_lead(lead)
    sys.attach_lead(lead.reversed())
    return sys

def print_wave_function_at_site(sys, energy, position_vector):
    site_index = [sys.sites[i].pos for i in 
range(len(sys.sites))].index(position_vector)
     wf_at_site = kwant.solvers.default.wave_function(sys, 
energy)(0)[0][site_index]
    print(wf_at_site)

def main():
    sys = make_system()
     kwant.plot(sys)
    sys = sys.finalized()
    print_wave_function_at_site(sys, energy=1, position_vector=(1, 2))
if __name__ == '__main__':
main()

Reply via email to