Topological Hall effect in four terminal devices
From phys824
from matplotlib import pyplot
from math import cos, sin, pi
import numpy as np
import scipy.stats as reg
import kwant
lat = kwant.lattice.square()
s_0 = np.identity(2)
s_z = np.array([[1, 0], [0, -1]])
s_x = np.array([[0, 1], [1, 0]])
s_y = np.array([[0, -1j], [1j, 0]])
def HedgeHog(site,ps):
x,y = site.pos
r = ( x**2 + y**2 )**0.5
theta = (np.pi/2)*(np.tanh((ps.r0 - r)/ps.delta) + 1)
if r != 0:
Ex = (x/r)*np.sin(theta)*s_x + (y/r)*np.sin(theta)*s_y + np.cos(theta)*s_z
else:
Ex = s_z
return 4*s_0 + ps.Ex * Ex
def Lead_Pot(site,ps):
return 4*s_0 + ps.Ex * s_z
def MakeSystem(ps, show = False):
H = kwant.Builder()
def shape_2DEG(pos):
x,y = pos
return ( (abs(x) < ps.L) and (abs(y) < ps.W) ) or (
(abs(x) < ps.W) and (abs(y) < ps.L))
H[lat.shape(shape_2DEG,(0,0))] = HedgeHog
H[lat.neighbors()] = -s_0
# ITS LEADS
sym_x = kwant.TranslationalSymmetry((-1,0))
H_lead_x = kwant.Builder(sym_x)
shape_x = lambda pos: abs(pos[1])<ps.W and pos[0]==0
H_lead_x[lat.shape(shape_x,(0,0))] = Lead_Pot
H_lead_x[lat.neighbors()] = -s_0
sym_y = kwant.TranslationalSymmetry((0,-1))
H_lead_y = kwant.Builder(sym_y)
shape_y = lambda pos: abs(pos[0])<ps.W and pos[1]==0
H_lead_y[lat.shape(shape_y,(0,0))] = Lead_Pot
H_lead_y[lat.neighbors()] = -s_0
H.attach_lead(H_lead_x)
H.attach_lead(H_lead_y)
H.attach_lead(H_lead_y.reversed())
H.attach_lead(H_lead_x.reversed())
if show:
kwant.plot(H)
return H
def Transport(Hf,EE,ps):
smatrix = kwant.smatrix(Hf, energy=EE, args=[ps])
G=np.zeros((4,4))
for i in range(4):
a=0
for j in range(4):
G[i,j] = smatrix.transmission(i, j)
if i != j:
a += G[i,j]
G[i,i] = -a
V = np.linalg.solve(G[:3,:3], [1.,0,0])
Hall = V[2] - V[1]
return G, Hall
ps = SimpleNamespace(L=45, W=40, delta=10, r0=20, Ex=1.)
H = MakeSystem(ps, show=True)
Hf = H.finalized()
def Vz(site):
Hd = HedgeHog(site,ps)
return (Hd[0,0] - Hd[1,1]).real
def Vy(site):
Hd = HedgeHog(site, ps)
return Hd[0,1].imag
kwant.plotter.map(H, Vz);
kwant.plotter.map(H, Vy);