@zhouhuibin
2021-03-17T16:09:53.000000Z
字数 5650
阅读 816
Python
import matplotlib.pyplot as plt
import numpy as np
import os
from matplotlib.ticker import MultipleLocator
from find_data import load_elecdata
from scipy.interpolate import griddata
from find_data import load_elecdata,load_fulldata
from pymodelfit.builtins import LinearModel
import math
from fractions import Fraction
# empty array
k_1 = []
k_2 = []
k_3 = []
band_0 = []
band_1 = []
band_2 = []
k_distance = []
k_spacer = 0
# basis vector of real space
a1 = np.array([1,0])
a2 = np.array([Fraction(1,2),np.sqrt(3)/2])
# extra basis
a3 = np.array([-Fraction(1,2),np.sqrt(3)/2])
# basis vector of reciprocal space
b1 = 3.1415926*np.array([1,-1/np.sqrt(3)])
b2 = 3.1415926*np.array([0,2/np.sqrt(3)])
# high symmetry point
Gamma = np.array([0,0])
K = 3.1415926*np.array([Fraction(1,3),1/np.sqrt(3)])
M = 3.1415926*np.array([0, 1/np.sqrt(3)])
print a2
number_band = 3
savepath = maindir = r'D:\Zhouhuibin\20200309_Lab\data\000_python code\exercise\band structure of kagome'
# high symmetry line
k_line = np.array([M, Gamma, K, M])
for i in range(k_line.shape[0]-1):
k_xi = np.linspace(k_line[i,0],k_line[i+1,0],101) # kx sample in high-symmetry line
if k_line[i,0] == k_line[i+1,0]:
k_yi = np.linspace(k_line[i,1],k_line[i+1,1],101)
elif k_line[i,1] == k_line[i+1,1]:
k_yi = np.linspace(k_line[i,1],k_line[i+1,1],101)
else:
slope_xy = (k_line[i+1,1]-k_line[i,1])/(k_line[i+1,0]-k_line[i,0])
k_yi = slope_xy*(k_xi - k_line[i,0]) + k_line[i,1] # interpolate ky from kx
k_1i = k_xi*a1[0]+k_yi*a1[1]
k_2i = k_xi*a2[0]+k_yi*a2[1]
k_3i = k_xi*a3[0]+k_yi*a3[1]
k_1.extend(k_1i)
k_2.extend(k_2i)
k_3.extend(k_3i)
if i > 0:
#compute the distances between high-symmetric points
k_spacer = k_spacer + np.sqrt(pow((k_line[i,0]-k_line[i-1,0]),2) + pow((k_line[i,1]-k_line[i-1,1]),2))
print i,k_spacer
#compute the distances between k points
k_distance_i = np.sqrt(pow((k_xi-k_line[i,0]),2) + pow((k_yi-k_line[i,1]),2)) + k_spacer
k_distance.extend(k_distance_i)
k_1 = np.array(k_1)
k_2 = np.array(k_2)
k_3 = np.array(k_3)
t = 1
for i in range(len(k_1)):
k_1i = k_1[i]
k_2i = k_2[i]
k_3i = k_3[i]
H = 2*t*np.array([[0, np.cos(k_1i), np.cos(k_2i)],[np.cos(k_1i), 0, np.cos(k_3i)],[np.cos(k_2i), np.cos(k_3i), 0]])
E = np.linalg.eig(H)
band_0.append(E[0][0])
band_1.append(E[0][1])
band_2.append(E[0][2])
# BandData Title
BandData = np.r_[[k_distance],[band_0],[band_1],[band_2]]
BandData = np.transpose(BandData)
BandDATA = os.path.join(maindir,'kagome_band_without SOC_numerical solution_matrix method.txt')
np.savetxt(BandDATA, BandData)
openfile=open(BandDATA,'r+')
content = openfile.read()
openfile.seek(0, 0)
openfile.write('k_point\t'+'band1\t'+'band2\t'+'band3\t'+'\n')
openfile.write('1/a\t'+'t\t'+'t\t'+'t\t'+'\n')
openfile.write('kagome\t'+'kagome\t'+'kagome\t'+'kagome\t'+'\n')
openfile.write('\n'+content)
openfile.close()
plt.cla()
plt.clf()
plt.plot(k_distance,band_0,'ro',k_distance,band_1,'ro',k_distance,band_2,'go')
plt.savefig(os.path.join(savepath,'kagome_band_without SOC_numerical solution_matrix method.png'))
plt.show()
import matplotlib.pyplot as plt
import numpy as np
import os
from matplotlib.ticker import MultipleLocator
from find_data import load_elecdata
from scipy.interpolate import griddata
from find_data import load_elecdata,load_fulldata
from pymodelfit.builtins import LinearModel
import math
from fractions import Fraction
# empty array
k_1 = []
k_2 = []
k_3 = []
band_0 = []
band_1 = []
band_2 = []
k_distance = []
k_spacer = 0
# basis vector of real space
a1 = np.array([1,0])
a2 = np.array([Fraction(1,2),np.sqrt(3)/2])
# extra basis
a3 = np.array([-Fraction(1,2),np.sqrt(3)/2])
# basis vector of reciprocal space
b1 = 3.1415926*np.array([1,-1/np.sqrt(3)])
b2 = 3.1415926*np.array([0,2/np.sqrt(3)])
# high symmetry point
Gamma = np.array([0,0])
K = 3.1415926*np.array([Fraction(1,3),1/np.sqrt(3)])
M = 3.1415926*np.array([0, 1/np.sqrt(3)])
number_band = 3
savepath = maindir = r'D:\Zhouhuibin\20200309_Lab\data\000_python code\exercise\band structure of kagome'
# high symmetry line
k_line = np.array([M, Gamma, K, M])
for i in range(k_line.shape[0]-1):
k_xi = np.linspace(k_line[i,0],k_line[i+1,0],101) # kx sample in high-symmetry line
if k_line[i,0] == k_line[i+1,0]:
k_yi = np.linspace(k_line[i,1],k_line[i+1,1],101)
elif k_line[i,1] == k_line[i+1,1]:
k_yi = np.linspace(k_line[i,1],k_line[i+1,1],101)
else:
slope_xy = (k_line[i+1,1]-k_line[i,1])/(k_line[i+1,0]-k_line[i,0])
k_yi = slope_xy*(k_xi - k_line[i,0]) + k_line[i,1] # interpolate ky from kx
k_1i = k_xi*a1[0]+k_yi*a1[1]
k_2i = k_xi*a2[0]+k_yi*a2[1]
k_3i = k_xi*a3[0]+k_yi*a3[1]
k_1.extend(k_1i)
k_2.extend(k_2i)
k_3.extend(k_3i)
if i > 0:
#compute the distances between high-symmetric points
k_spacer = k_spacer + np.sqrt(pow((k_line[i,0]-k_line[i-1,0]),2) + pow((k_line[i,1]-k_line[i-1,1]),2))
print i,k_spacer
#compute the distances between k points
k_distance_i = np.sqrt(pow((k_xi-k_line[i,0]),2) + pow((k_yi-k_line[i,1]),2)) + k_spacer
k_distance.extend(k_distance_i)
k_1 = np.array(k_1)
k_2 = np.array(k_2)
k_3 = np.array(k_3)
lamda = 0.05
t = 1
for i in range(len(k_1)):
k_1i = k_1[i]
k_2i = k_2[i]
k_3i = k_3[i]
H = 2*lamda*np.array([[0, np.cos(k_2i+k_3i)*1j, -np.cos(k_3i-k_1i)*1j],[-np.cos(k_3i+k_2i)*1j, 0, np.cos(k_1i+k_2i)*1j],[np.cos(k_3i-k_1i)*1j, -np.cos(k_1i+k_2i)*1j, 0]]) + 2*t*np.array([[0, np.cos(k_1i), np.cos(k_2i)],[np.cos(k_1i), 0, np.cos(k_3i)],[np.cos(k_2i), np.cos(k_3i), 0]])
E = np.linalg.eig(H)
band_0.append(E[0][0])
band_1.append(E[0][1])
band_2.append(E[0][2])
# BandData Title
BandData = np.r_[[k_distance],[band_0],[band_1],[band_2]]
BandData = np.transpose(BandData)
BandDATA = os.path.join(maindir,'kagome_band_with SOC_numerical solution_matrix method.txt')
np.savetxt(BandDATA, BandData)
openfile=open(BandDATA,'r+')
content = openfile.read()
openfile.seek(0, 0)
openfile.write('k_point\t'+'band1\t'+'band2\t'+'band3\t'+'\n')
openfile.write('1/a\t'+'t\t'+'t\t'+'t\t'+'\n')
openfile.write('kagome\t'+'kagome\t'+'kagome\t'+'kagome\t'+'\n')
openfile.write('\n'+content)
openfile.close()
plt.cla()
plt.clf()
plt.plot(k_distance,band_0,'ro',k_distance,band_1,'ro',k_distance,band_2,'go')
plt.savefig(os.path.join(savepath,'kagome_band_with SOC_numerical solution_matrix method.png'))
plt.show()