自动构建SlaterKoster系数的TB模型(完整版代码)
fromnumpyimportimportnumpy。matlibasmtlimportmatplotlib。pyplotaspltimportmatplotlibfrommatplotlibimportcmlatticeandorbitspypzpxdxydyzdz2dxzd(x2y2)012345678lat〔〔1,0〕,〔12,sqrt(3)2〕〕latarray(lat)o1〔23,13,5〕o2〔23,13,7〕o3〔13,23,5〕o4〔13,23,7〕ddsigma0ddpi0。4096dddelta0。0259orb〔o1,o2,o3,o4〕orb〔array(i)foriinorb〕num4ro2(x,y)o1(0,0)defvector(o1,o2,x,y):r(o2〔0:2〕array(〔x,y〕)o1〔0:2〕)。dot(lat)lr〔0〕sqrt(r〔0〕2r〔1〕2)mr〔1〕sqrt(r〔0〕2r〔1〕2)returnr,l,mspypzpxdxydyzdz2dxzd(x2y2)012345678defsk(l,m,d1,d2,ddsigma,ddpi,dddelta):skzeros((9,9))sk〔4,4〕3l2m2ddsigma(l2m24l2m2)ddpil2m2dddeltask〔4,5〕0sk〔4,6〕0。5sqrt(3)lm(l2m2)ddsigma0。5lmdddeltask〔4,7〕0sk〔4,8〕32lm(l2m2)ddsigma2lm(m2l2)ddpi0。5lm(l2m2)dddeltask〔5,4〕0sk〔5,5〕m2ddpil2dddeltask〔5,6〕0sk〔5,7〕lmddpilmdddeltask〔5,8〕0sk〔6,4〕sk〔4,6〕sk〔6,5〕0sk〔6,6〕14(l2m2)2ddsigma34(l2m2)2dddeltask〔6,7〕0sk〔6,8〕sqrt(3)4(l2m2)dddeltasqrt(3)4(l2m2)(l2m2)ddsigmask〔7,4〕0sk〔7,5〕sk〔5,7〕sk〔7,6〕0sk〔7,7〕l2ddpim2dddeltask〔7,8〕0sk〔8,4〕sk〔4,8〕sk〔8,5〕0sk〔8,6〕sk〔6,8〕sk〔8,7〕sk〔7,8〕sk〔8,8〕34(l2m2)ddsigma(l2m2(l2m2)2)ddpi14(l2m2)2dddeltareturnsk〔d1,d2〕defhopvec(o1,o2,x,y):r,l,mvector(o1,o2,x,y)d1,d2o1〔2〕,o2〔2〕tsk(l,m,d1,d2,ddsigma,ddpi,dddelta)returnt,rt131,r131hopvec(o1,o3,0,0)t141,r141hopvec(o1,o4,0,0)t132,r132hopvec(o1,o3,1,0)t142,r142hopvec(o1,o4,1,0)t133,r133hopvec(o1,o3,0,1)t143,r143hopvec(o1,o4,0,1)t231,r231hopvec(o2,o3,0,0)t241,r241hopvec(o2,o4,0,0)t232,r232hopvec(o2,o3,1,0)t242,r242hopvec(o2,o4,1,0)t233,r233hopvec(o2,o3,0,1)t243,r243hopvec(o2,o4,0,1)defH(K):Hzeros((num,num),dtypecomplex)H〔0,2〕t131exp(1。jK。dot(r131))t132exp(1。jK。dot(r132))t133exp(1。jK。dot(r133))H〔0,3〕t141exp(1。jK。dot(r141))t142exp(1。jK。dot(r142))t143exp(1。jK。dot(r143))H〔1,2〕t231exp(1。jK。dot(r231))t232exp(1。jK。dot(r232))t233exp(1。jK。dot(r233))H〔1,3〕t241exp(1。jK。dot(r241))t242exp(1。jK。dot(r242))t243exp(1。jK。dot(r243))foriinrange(num):forjinrange(num):ifji:H〔j,i〕conj(H〔i,j〕)returnHdefeH(K):returnlinalg。eigh(H(K))〔0〕reciprocallatticeb1array(〔1,1sqrt(3)〕)pi2b2array(〔0,2sqrt(3)〕)pi2高对称点Garray(〔0,0〕)M0。5b1K13b113b2K点路径GMkgmlinspace(G,M,100,endpointFalse)kmklinspace(M,K,100,endpointFalse)kkglinspace(K,G,100)K点相对距离defDist(r1,r2):returnlinalg。norm(r1r2)lgmDist(G,M)lmkDist(M,K)lkgDist(K,G)lklinspace(0,1,100)xgmlgmlkxmklmklkxgm〔1〕xkglkglkxmk〔1〕kpathconcatenate((xgm,xmk,xkg),axis0)Node〔0,xgm〔1〕,xmk〔1〕,xkg〔1〕〕Eiggmarray(list(map(eH,kgm)))Eigmkarray(list(map(eH,kmk)))Eigkgarray(list(map(eH,kkg)))eig1hstack((Eiggm〔:,0〕,Eigmk〔:,0〕,Eigkg〔:,0〕))eig2hstack((Eiggm〔:,1〕,Eigmk〔:,1〕,Eigkg〔:,1〕))eig3hstack((Eiggm〔:,2〕,Eigmk〔:,2〕,Eigkg〔:,2〕))eig4hstack((Eiggm〔:,3〕,Eigmk〔:,3〕,Eigkg〔:,3〕))plt。plot(kpath,eig1)plt。plot(kpath,eig2)plt。plot(kpath,eig3)plt。plot(kpath,eig4)plt。plot(kpath,eig5)plt。plot(kpath,eig6)plt。xticks(Node,〔rGamma39;,M,K,rGamma39;〕)plt。show()
结果: