对于六角形布里渊区,在计算的时候,通常会将他平移成平行四边形,如下所示
一般的,给定平行四边形的两条矢量G1,G2,我们要在平行四边形内生成均匀的点。采样如下算法,这其实就是利用平面向量斜坐标离散基矢构造出来的
import numpy as np
import matplotlib.pyplot as plt
G1 = np.array([0 ,-1.7321]) # Reciprocal Lattice 1
G2 = np.array([1.5,-0.8660]) # Reciprocal Lattice 2
n1 = 200 # Reciprocal Lattice 1 上的格点数
n2 = 200 # Reciprocal Lattice 2 上的格点数
n = n1*n2 # 总的格点数
e1 = G1/n1
e2 = G2/n2
KPOS = np.zeros((n1,n2,2))
for i in range(n1):
for j in range(n2):
KPOS[i][j][:] = i*e1 + j*e2
KPOS = KPOS.reshape(n,2)
output = open('KPOINTS.txt','w')
for i in range(n):
#plt.scatter(KPOS[i][0],KPOS[i][1])
output.write("%f %f %f\n" %(KPOS[i][0],KPOS[i][1],0.0))
#plt.show()