Skip to content
Snippets Groups Projects
Commit 1fb4e70a authored by Ammon Fischer's avatar Ammon Fischer
Browse files

Added Bandstructure with correct Sz polarization and file to compute spin texture from skretch

parent eb41462d
No related branches found
No related tags found
No related merge requests found
.DS_Store 0 → 100644
File added
No preview for this file type
import numpy as np
import matplotlib.pyplot as plt
from momentum import Momentum
from tSnS import tSnS
def spin_texture(Nk=30, bandset=2):
"""
Compute Spin texture in BZ
"""
#Pauli matrices and orbital identity
sigma_x_tau_0 = np.array([[0,0,1,0],[0,0,0,1],[1,0,0,0],[0,1,0,0]])
sigma_y_tau_0 = 1j*np.array([[0,0,-1,0],[0,0,0,-1],[1,0,0,0],[0,1,0,0]])
sigma_z_tau_0 = np.array([[1,0,0,0],[0,1,0,0],[0,0,-1,0],[0,0,0,-1]])
#Create Mesh and compute spin polarization
mesh = BZ.Bravais_mesh_simple(Nk)
ekf = np.zeros((Nk**2, model.N))
ukf = np.zeros((Nk**2, model.N, model.N), dtype=complex)
spin_pol = np.zeros((Nk**2, 3, model.N), dtype=complex)
for i in range(len(mesh)):
ekf, ukf = np.linalg.eigh(model.BH_Hamiltonian(mesh[i], bandset=bandset))
spin_pol[i,0,:] = (np.diagonal(ukf.T.conjugate()@sigma_x_tau_0@ukf)).real
spin_pol[i,1,:] = (np.diagonal(ukf.T.conjugate()@sigma_y_tau_0@ukf)).real
spin_pol[i,2,:] = (np.diagonal(ukf.T.conjugate()@sigma_z_tau_0@ukf)).real
fig, axes = plt.subplots(3, model.N, sharex=True, sharey=True, figsize=(4,3))
for i in range(3):
for j in range(model.N):
axes[i,j].scatter(mesh[:,0], mesh[:,1], c=spin_pol[:,i,j], cmap=plt.cm.RdBu, vmin=-1, vmax=1, s=1)
axes[i,j].axis('scaled')
axes[i,j].set_xticks([])
axes[i,j].set_yticks([])
axes[0,0].set_ylabel(r'$\langle S_x \rangle$')
axes[1,0].set_ylabel(r'$\langle S_y \rangle$')
axes[2,0].set_ylabel(r'$\langle S_z \rangle$')
axes[0,0].set_xlabel(r'$n_b = 1$', labelpad=-70)
axes[0,1].set_xlabel(r'$n_b = 2$', labelpad=-70)
axes[0,2].set_xlabel(r'$n_b = 3$', labelpad=-70)
axes[0,3].set_xlabel(r'$n_b = 4$', labelpad=-70)
plt.subplots_adjust(hspace=0, wspace=0)
plt.show()
if __name__ == '__main__':
model = tSnS()
BZ = Momentum(model.G1, model.G2)
spin_texture()
......@@ -61,25 +61,15 @@ class tSnS:
if bandset == 1:
popt = [-0.28147216773927675, 0.003966634424731179,
0.0029073602294481787, -4.4983518626626615e-07,
-0.004052637332926278, 0.00016072142349528914,
-3.7721284264216035e-05, -0.0009141524777857822,
-0.0011772772860306072, -0.0014951352789262786,
0.0009438170971867384, -9.088937950755711e-05,
-0.000692733427968305, 0.0002266622565665427,
0.0005191476715863555]
popt = [-0.28159930344528794, 0.003968154118035716, 0.0030637767514870547, -0.00010069737918143397,
-0.004016436852695664, -0.0008890332864148689, -0.001246870994836976, 0.000848707931621465,
-0.0012602009377081112, -0.0007056692333075815, -0.0005572460653001037, -0.00045337702969447147, np.pi/30]
else:
popt = [-0.32047590155917033, 0.0021542300052420408,
0.001469771721045236, 9.574936436961549e-05,
0.005574114270507838, -0.00026463100214217314,
0.0004064637000665132, 0.0004858014275756446,
0.0006724769177247459, -0.00029328415914492434,
-0.0002932514194152098, 1.0106788563322311e-05,
0.0007016914741439542, 0.0021456042488447995,
0.0018535546929481545]
popt = [-0.32044985418524075, 0.002055488150036208, 0.0018580964148542333, 9.451241186629052e-05,
0.0055709631952728005, 0.0005463154794551496, 0.0006627259014835454, -0.000292263072270747,
-0.00029205370932945825, 0.0006839685785136236, -0.0021245180394823893, -0.0017931410640271215, np.pi/8]
......@@ -87,11 +77,11 @@ class tSnS:
t_AA_0 = popt[0]
t_AB_0, t_AB_1 = popt[1], popt[2]
t_AA_x, t_AA_y = popt[3], popt[4]
t_AB_mx, t_AB_px = popt[5], popt[6]
t_AB_my, t_AB_py = popt[7], popt[8]
t_AA_m, t_AA_p = popt[9], popt[10]
t_AA_2x, t_AA_2y = popt[11], popt[12]
tR_AB_0, tR_AB_1 = popt[13], popt[14]
t_AB_my, t_AB_py = popt[5], popt[6]
t_AA_m, t_AA_p = popt[7], popt[8]
t_AA_2y = popt[9]
tR_AB_0, tR_AB_1 = popt[10], popt[11]
phi_AB = popt[12]
##################################################
......@@ -102,15 +92,6 @@ class tSnS:
ham[:,0,:,0] += t_AA_0*pauli[0]
ham[:,1,:,1] += t_AA_0*pauli[0]
#Nearest-Neighbor AB/BA coupling (1. nn)
hop = t_AB_0*(1.+self.phi_lm(k,0,-1))*pauli[0]
ham[:,0,:,1] += hop
ham[:,1,:,0] += np.conjugate(hop).T
hop = t_AB_1*(self.phi_lm(k,1,0)+self.phi_lm(k,1,-1))*pauli[0]
ham[:,0,:,1] += hop
ham[:,1,:,0] += np.conjugate(hop).T
#Nearest-Neighbor AA/BB coupling (2. nn)
hop = t_AA_x*(self.phi_lm(k,1,0))*pauli[0]
ham[:,0,:,0] += hop
......@@ -150,12 +131,6 @@ class tSnS:
ham[:,1,:,1] += np.conjugate(hop)*pauli[0]
#Second shell (5. nn)
hop = t_AA_2x*self.phi_lm(k,2,0)*pauli[0]
ham[:,0,:,0] += hop
ham[:,0,:,0] += np.conjugate(hop).T
ham[:,1,:,1] += hop
ham[:,1,:,1] += np.conjugate(hop).T
hop = t_AA_2y*self.phi_lm(k,0,2)*pauli[0]
ham[:,0,:,0] += hop
ham[:,0,:,0] += np.conjugate(hop).T
......@@ -166,18 +141,10 @@ class tSnS:
#AB coupling
################
#Edge states of second shell (4. nn)
hop = t_AB_mx*(self.phi_lm(k,2,0)+self.phi_lm(k,2,-1))*pauli[0]
ham[:,0,:,1] += hop
ham[:,1,:,0] += np.conjugate(hop).T
hop = t_AB_my*(self.phi_lm(k,1,1)+self.phi_lm(k,1,-2))*pauli[0]
ham[:,0,:,1] += hop
ham[:,1,:,0] += np.conjugate(hop).T
hop = t_AB_px*(self.phi_lm(k,-1,0)+self.phi_lm(k,-1,-1))*pauli[0]
ham[:,0,:,1] += hop
ham[:,1,:,0] += np.conjugate(hop).T
hop = t_AB_py*(self.phi_lm(k,0,1)+self.phi_lm(k,0,-2))*pauli[0]
ham[:,0,:,1] += hop
ham[:,1,:,0] += np.conjugate(hop).T
......@@ -203,6 +170,23 @@ class tSnS:
ham[:,0,:,1] += hop
ham[:,1,:,0] += np.conjugate(hop).T
######################################
#SOC Kane-Mele Coupling
######################################
#Nearest-neighbors (1. nn)
km = np.array([[np.exp(1j*phi_AB),0],[0,np.exp(1j*phi_AB).conjugate()]])
hop = t_AB_0*(1.+self.phi_lm(k,0,-1))*km
ham[:,0,:,1] += hop
ham[:,1,:,0] += np.conjugate(hop).T
km = np.array([[np.exp(-1j*phi_AB),0],[0,np.exp(-1j*phi_AB).conjugate()]])
hop = t_AB_1*(self.phi_lm(k,1,0)+self.phi_lm(k,1,-1))*km
ham[:,0,:,1] += hop
ham[:,1,:,0] += np.conjugate(hop).T
ham = ham.reshape((4,4))
assert np.allclose(ham, ham.conjugate().T, atol=1e-12)
return ham
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment