Peierls substitution[1]:
选取磁场为方向,在朗道规范[2]下,磁势可以选为
,,于是有
六角格子示意图:

考虑以下三个跃迁:
变换得到:
假设这里的还未定义,为任意值。
令时,体系第一次进入到Hofstadter蝴蝶的循环状态。那么
和
都应该取整数,即
和
都是
的整数倍。
的最大值为
,这时所对应的磁场是最小的,为第一次进入循环。
也就是说如果某个元胞的某个跃迁的相位是零,那么在下一个元胞的相同的位置相位应该为2pi,这样整体体系才会完全重复。
为六角格子的面积,即元胞面积。
如果格子更加复杂,例如Kagome格子[3,4],需要考虑每个跃迁进入周期的情况,从而确定的值,最终得到的
是格子最小的封闭面积。
附:有限宽度石墨烯条带的Hofstadter蝴蝶Python代码
"""
This code is supported by the website: https://www.guanjihuan.com
The newest version of this code is on the web page: https://www.guanjihuan.com/archives/12185
"""
import numpy as np
from math import *
import cmath
import functools
def hamiltonian(B, k, N, M, t1, a): # graphene哈密顿量(N是条带的宽度参数)
# 初始化为零矩阵
h00 = np.zeros((4*N, 4*N), dtype=complex)
h01 = np.zeros((4*N, 4*N), dtype=complex)
# 原胞内的跃迁h00
for i in range(N):
h00[i*4+0, i*4+0] = M
h00[i*4+1, i*4+1] = -M
h00[i*4+2, i*4+2] = M
h00[i*4+3, i*4+3] = -M
# 最近邻
h00[i*4+0, i*4+1] = t1*cmath.exp(-2*pi*1j*B*(3*a*i+1/4*a)*(np.sqrt(3)/2*a))
h00[i*4+1, i*4+0] = np.conj(h00[i*4+0, i*4+1])
h00[i*4+1, i*4+2] = t1
h00[i*4+2, i*4+1] = np.conj(h00[i*4+1, i*4+2])
h00[i*4+2, i*4+3] = t1*cmath.exp(2*pi*1j*B*(3*a*i+7/4*a)*(np.sqrt(3)/2)*a)
h00[i*4+3, i*4+2] = np.conj(h00[i*4+2, i*4+3])
for i in range(N-1):
# 最近邻
h00[i*4+3, (i+1)*4+0] = t1
h00[(i+1)*4+0, i*4+3] = t1
# 原胞间的跃迁h01
for i in range(N):
# 最近邻
h01[i*4+1, i*4+0] = t1*cmath.exp(-2*pi*1j*B*(3*a*i+1/4*a)*(np.sqrt(3)/2*a))
h01[i*4+2, i*4+3] = t1*cmath.exp(-2*pi*1j*B*(3*a*i+7/4*a)*(np.sqrt(3)/2*a))
matrix = h00 + h01*cmath.exp(1j*k) + h01.transpose().conj()*cmath.exp(-1j*k)
return matrix
def main():
N = 30
a = 1
hamiltonian_function0 = functools.partial(hamiltonian, k=0, N=N, M=0, t1=1, a=a)
B_array = np.linspace(0, 1/(3*np.sqrt(3)/2*a*a), 100)
BS_array = B_array*(3*np.sqrt(3)/2*a*a)
eigenvalue_array = calculate_eigenvalue_with_one_parameter(B_array, hamiltonian_function0)
plot(BS_array, eigenvalue_array, xlabel='Flux (BS/phi_0)', ylabel='E', title='Ny=%i'%N, filename='a', show=1, save=0, style='k.', y_min=None, y_max=None, markersize=3)
# import guan
# eigenvalue_array = guan.calculate_eigenvalue_with_one_parameter(B_array, hamiltonian_function0)
# guan.plot(BS_array, eigenvalue_array, xlabel='Flux (BS/phi_0)', ylabel='E', title='Ny=%i'%N, filename='a', show=1, save=0, style='k.', y_min=None, y_max=None, markersize=3)
def calculate_eigenvalue_with_one_parameter(x_array, hamiltonian_function, print_show=0):
dim_x = np.array(x_array).shape[0]
i0 = 0
if np.array(hamiltonian_function(0)).shape==():
eigenvalue_array = np.zeros((dim_x, 1))
for x0 in x_array:
hamiltonian = hamiltonian_function(x0)
eigenvalue_array[i0, 0] = np.real(hamiltonian)
i0 += 1
else:
dim = np.array(hamiltonian_function(0)).shape[0]
eigenvalue_array = np.zeros((dim_x, dim))
for x0 in x_array:
if print_show==1:
print(x0)
hamiltonian = hamiltonian_function(x0)
eigenvalue, eigenvector = np.linalg.eigh(hamiltonian)
eigenvalue_array[i0, :] = eigenvalue
i0 += 1
return eigenvalue_array
def plot(x_array, y_array, xlabel='x', ylabel='y', title='', fontsize=20, labelsize=20, show=1, save=0, filename='a', file_format='.jpg', dpi=300, style='', y_min=None, y_max=None, linewidth=None, markersize=None, adjust_bottom=0.2, adjust_left=0.2):
import matplotlib.pyplot as plt
fig, ax = plt.subplots()
plt.subplots_adjust(bottom=adjust_bottom, left=adjust_left)
ax.plot(x_array, y_array, style, linewidth=linewidth, markersize=markersize)
ax.grid()
ax.set_title(title, fontsize=fontsize, fontfamily='Times New Roman')
ax.set_xlabel(xlabel, fontsize=fontsize, fontfamily='Times New Roman')
ax.set_ylabel(ylabel, fontsize=fontsize, fontfamily='Times New Roman')
if y_min!=None or y_max!=None:
if y_min==None:
y_min=min(y_array)
if y_max==None:
y_max=max(y_array)
ax.set_ylim(y_min, y_max)
ax.tick_params(labelsize=labelsize)
labels = ax.get_xticklabels() + ax.get_yticklabels()
[label.set_fontname('Times New Roman') for label in labels]
if save == 1:
plt.savefig(filename+file_format, dpi=dpi)
if show == 1:
plt.show()
plt.close('all')
if __name__ == '__main__':
main()
运行结果:

参考资料:
[1] 佩尔斯替换 Peierls substitution
[2] 磁场和磁势的选取
[3] Du et al. - 2018 - Floquet Hofstadter butterfly on the kagome and triangular lattices
【说明:本站主要是个人的一些笔记和代码分享,内容可能会不定期修改。为了使全网显示的始终是最新版本,这里的文章未经同意请勿转载。引用请注明出处:https://www.guanjihuan.com】
请问如果要是转角的TMD系统,算霍夫斯塔特蝴蝶,BS/Φ=1这里的S代表的是我三角格子的面积(假设我用三角格子),还是莫尔原胞的面积,还是磁原胞的面积,我觉得用三角格子的面积才能满足完全的周期性,每一个格点的跃迁差2Π
这个问题我也不确定,但首先排除磁元胞的面积,因为六角格子的情况就不是磁元胞的面积。你可以先试着算一下,看重复的周期,然后再试着用 Peierls substitution 在晶格上的分布情况来解释。
请问根据塞曼能的公式,磁场方向和自旋方向相同时,能量不应该增高吗,为什么Hofstadter 蝴蝶能量在一个周期既有增高也有降低
在磁场下能带形成朗道能级,这个是晶格层面的;在磁场下有塞曼效应,这个是原子层面的。看你要考虑哪一方面了。对于实际材料,可能两者都需要考虑,尤其是在强磁场下。
朗道能级不应该是(n-1/2)h/2pi*qB/mc吗随着磁场的增加朗道能级不应该也增高吗
零能附近的几个朗道能级确实是这样的,表达式关系参考这个:狄拉克电子朗道能级的根号N分布。
如果是高能部分的能带,情况会比较复杂,可能不能用简单表达式来描述,只能通过数值计算,给出这个霍夫斯塔特蝴蝶。
那也就是说一个材料的形成能带会增高和下降的霍夫斯塔特蝴蝶是因为朗道能级和塞曼效应的共同影响吗,那具体的分析有没有什么可以参考的啊
塞曼效应在强磁场下才会比较明显。具体的看你想考虑什么问题了,如果是对实验进行解释,那么能解释得通就行,根据需要考虑一些效应。如果是材料计算,看模型或模拟参数里是否加入这一项内容。
模型计算,在哈密顿里面引入佩尔斯替换里面不包含塞曼效应吗,强磁场指的是多大啊
在模型计算中引入佩尔斯替换(Peierls substitution)时,通常不包含塞曼效应。在模型中引入塞曼效应(Zeeman Effect),需要显式地在哈密顿量中加入描述磁场与电子自旋耦合的项。“强磁场”的大小不一定,需要根据具体材料来判断。
另外,常规问题直接问 AI 就能够直接解决的。
谢谢,麻烦您啦
请问 如果一个系统磁场加到17T就满足磁原胞,那从17T到34T的纳米带是不是和1T到17T纳米带相同啊
从 Peierls substitution 来看,能带结构和性质是相似的,从 Hofstadter 蝴蝶的周期性可以看出。但磁场翻倍时,磁原胞尺寸减半,布里渊区也会发生折叠,这是不一样的地方。
另外,对于实际材料,在强场极限下,能带可能会进一步分裂,可能会有其他复杂的情况。
那 17T到34T在算磁通的时候面积要减半算吗,还是直接就把磁场增大到原来的两倍别的不变
为了直观对比,可以考虑让“磁元胞”面积保持不变,而实际的“磁元胞”大小是减半了。
老师你好,我想问一下对于三能带模型中的三角格子,想让其具有周期性边界条件应该如何做呢?
在需要加上周期边界条件的两个边缘之间加上跃迁项。
三角格子中磁通没办法整数填充吧,并且随着格点数的增加,跃迁项的相位一直是递增的,按照那样考虑的话没办法完全消除边缘态。
如果有磁场的话,那么有一个大的磁元胞,可以满足周期性边界条件。可以使用那个大的磁元胞。
请问为什么Hofstadter butterfly在中间空白处有几个小点呢,取更大的N也还是会出现,我看单层的graphene是没有的,PHYSICAL REVIEW B 88, 125426 (2013)。
这里是一维有限宽度的情况,存在边缘态,那些额外的点应该就是边缘态。如果是二维的情况,应该就没有了。
请问,这个e指数的1/4*a与7/4*a是怎么来的呢?
跃迁项在y方向上的投影坐标,我取在了跃迁中点的位置,所以是1/4*a。这个坐标的零点选取不唯一,是人为选定的,不影响最终的计算结果。
请问如果在三维非层状材料上面施加磁场计算朗道能级,这个Peierls substitution是要格外添加一个积分吗?
没有再添加积分呀,Peierls substitution只是在跃迁方向上做了一个路径的积分,对hopping项起作用。磁通也只是考虑某个平面区间上的。
请问这个y1 y2 y3是什么?这里的Lx是两个格点的x方向坐标的距离吗?
y1 y2 y3是纵向的坐标,但纵向坐标的零点选取不唯一。
嗯,对的,Lx是两个格点之间的距离在x方向上的投影。
t1和t3不是一个吗?
是同一个。
当磁场加到一定的值时,会进入下一个Hofstadter蝴蝶周期,这时候整个体系应该是完全一样的。在这个新周期,如果某个元胞的某个跃迁的相位是零,那么在下一个元胞的相同的位置相位应该为2pi,这样才会完全重复。