一般强关联的格点系统无非就是方格子,三角格子,六角格子这些常见的晶格。首先我们需要给出晶格常数,并找出元胞中不等价的格点。同时我们也可以推导出倒格矢。通常H0的形式都是比较简单的,可以直接解析推导出来。
此时H0是一个k的函数,hopping项是给定的常数。k为(kx,ky,kz)
有时候H0比较复杂,需要从Wannier90中的hr.dat生成,这种情况,每次循环都需要调用函数构建一次H0。
import numpy as np
from np import sqrt, pi, exp
a1 = 1/2*np.array([3, sqrt(3)])
a2 = 1/2*np.array([3, -sqrt(3)])
b1 = 2*pi/3*np.array([1, sqrt(3)])
b2 = 2*pi/3*np.array([1, -sqrt(3)])
G = np.array([0, 0])
M = 2*pi/3*np.array([1, 0])
K = 2*pi/3*np.array([1, sqrt(3)/3])
High_symmetry_Kpoints = {'G': G, 'M': M, 'K': K}
def Hamiltonian(k, t = 1):
return np.matrix([[0, -t*(1 + exp(-1j*np.vdot(k,a1)) + exp(-1j*np.vdot(k, a2)))],
[-t*(1 + exp(-1j*np.vdot(k,a1)) + exp(-1j*np.vdot(k, a2))), 0]])
后面计算通常有两种模式,一种是沿着高对称点,需要沿着高对称点均匀取点
另一种是布里渊区均与取点。此时一种等价的方法是沿着倒格矢构成的平行四边形布里渊区均与取点。后一种方法对于利用格林函数卷积计算关联函数磁化率非常有用。