Topological Hall effect in four terminal devices
From phys824
Jump to navigationJump to search
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);