def cal_dos_mf(Vz,Delta,mu=0.,**kwargs): ''' show the meanfield band. ''' model=RashbaModel(Vz=Vz,Delta=Delta,mu=mu,**kwargs) filename_dos='data/dos_%s.dat'%model.get_str() filename_mj='data/mf_%s.npy'%model.get_str() hgen=model.hgen if kwargs.get('kspace'): kl=hgen.kspace.kmesh hmesh=hgen.gethkmesh(kl) else: hmesh=hgen.H(dense=True) #tridmat=sr2trid(hmesh) #g=tinv(tridmat) hmesh=Hmesh(hmesh) emesh,vmesh=hmesh.getemesh(evalvk=True) wlist=linspace(-3,3,501) wlist,dos=Emesh(emesh).show_dos(wlist,geta=3e-3) dosdata=concatenate([wlist[:,newaxis],dos[:,newaxis]],axis=1) savetxt(filename_dos,dosdata) if not kwargs.get('kspace'): gate=0.01 has_mf=Vz>Delta and abs(mu)<sqrt(Vz**2-Delta**2) print 'Has Majorana fermion: %s.'%has_mf mjmask=abs(emesh)<gate print 'Zero Energy States(abs(E) < %s) -> %s'%(gate,emesh[mjmask]) mjdata=vmesh[:,mjmask] save(filename_mj,mjdata)
def plot_dos(delta=0.1,t=1.,mu=0.,kspace=False,nsite=100,**kwargs): ''' show the meanfield band. ''' model=SSHModel(t=t,delta=delta,nsite=nsite,mu=mu,kspace=kspace,**kwargs) hgen=model.hgen if kspace: kl=hgen.kspace.kmesh hmesh=hgen.gethkmesh(kl) else: hmesh=hgen.H() hmesh=Hmesh(hmesh) emesh,vmesh=hmesh.getemesh(evalvk=True) wlist=linspace(-3,3,200) gate=0.01 frmask=abs(emesh)<gate vs=vmesh[:,frmask] print 'Zero Energy States(abs(E) < %s) -> %s'%(gate,emesh[frmask]) ion() subplot(121) Emesh(emesh).show_dos(wlist,geta=3e-3) subplot(122) plot(vs) xlim(-1,nsite*2) pdb.set_trace()
def plot_band(alpha,Vz,Delta,t=1.,mu=0.,nsite=100): ''' show the meanfield band. ''' model=RashbaModel(U=0.,alpha=alpha,Vz=Vz,Delta=Delta,t=t,mu=mu,nsite=nsite,periodic=True,kspace=True) hgen=model.hgen kl=hgen.kspace.kmesh-pi hkmesh=hgen.gethkmesh(kl) hmesh=Hmesh(hkmesh) print hmesh.check_hermicity() ekmesh=hmesh.getemesh() LABELSIZE=14 ion() fig=figure(figsize=(7,5)) plot(kl[:,0],ekmesh) if True:#hgen.spaceconfig.nnambu==1: axhline(y=0,ls='--',color='k') text(1.8,-0.1,'$\mu=0$',ha='center',va='center',fontsize=14) if Vz==0 and alpha!=0: dy=alpha**2/2 annotate('',xy=(-alpha,-2*dy),xycoords='data',xytext=(alpha,-2*dy),\ arrowprops=dict(arrowstyle='<->',shrinkA=0,shrinkB=0)) plot([-alpha,-alpha],[-dy-0.1,-dy+0.1],color='k',ls='-') plot([alpha,alpha],[-dy-0.1,-dy+0.1],color='k',ls='-') text(0,-2*dy-0.1,r'$2\alpha$',va='center',ha='center',fontsize=14) xlabel(r'$k$',fontsize=LABELSIZE) ylabel('Energy($t$)') xlim(-pi,pi) xticks([-pi,0,pi],[r'$-\pi/a$','0',r'$-\pi/a$'],fontsize=14) tight_layout() pdb.set_trace() savefig('data/band_%s.png'%model.get_str())
def test_exp_k(self): t=random.random() Tlist=[0,0.5] Hk=lambda k:2*t*cos(k)*identity(2) klist=arange(1000)*2*pi/1000 hmesh=Hmesh([Hk(k) for k in klist]) E,U=hmesh.getemesh(evalvk=True) for T in Tlist: mval=rFij(E=E,U=U,T=T) assert_allclose(mval[0].diagonal(),0.5*ones(mval.shape[1]))
def plot_band_mf(M,t=1.): ''' show the meanfield band. ''' model=BizardModel_MF(M=M,t=t,mu=0.,N=100,periodic=True,usekspace=True) hgen=model.hgen kl=kmesh=linspace(0,pi,400) hkmesh=hgen.gethkmesh(kl[:,newaxis]) hmesh=Hmesh(hkmesh) ekmesh=hmesh.getemesh() ion() plot(kl,ekmesh) pdb.set_trace()
def plot_band(delta=0.1,t=1.,mu=0.,nsite=100): ''' show the meanfield band. ''' model=SSHModel(t=t,mu=mu,delta=delta,nsite=nsite,periodic=True,kspace=True) hgen=model.hgen kl=hgen.kspace.kmesh-pi hkmesh=hgen.gethkmesh(kl) hmesh=Hmesh(hkmesh) print hmesh.check_hermicity() ekmesh=hmesh.getemesh() ion() plot(kl[:,0],ekmesh) pdb.set_trace()
def perco_fuliang(): ''' Get the bulk entanglement spectrum for Fu Liang's work. ''' model,perco=get_models(L=5,size=5,form='x',N=100) hgen=model.hgen kspace=perco.get_kspace() kpath=path_k([kspace.G,kspace.special_points['X'][0],kspace.M[0],kspace.G],N=50) ion() cfunc=lambda k:EU2C(*eigh(hgen.Hk(k)),T=0.1) ck_red=perco.reduce_k(cfunc,kpath) hkmesh=Hmesh(C2H(ck_red,T=1.)) ekmesh=hkmesh.getemesh() kpath.plot(ekmesh,mode='abs') ylim(-5,5) pdb.set_trace()
def measure_charge_MF(M,t=1.,nsite=6): ''' show the meanfield band. ''' model=BizardModel_MF(M=M,t=t,mu=0.02,N=nsite,periodic=False,usekspace=False) hgen=model.hgen hmesh=hgen.H() hmesh=Hmesh(hmesh) emesh,vmesh=hmesh.getemesh(evalvk=True) cmesh=EU2C(emesh,vmesh) dos=[] for i in xrange(nsite): mask=hgen.spaceconfig.atomindexer==i dos.append(sum(cmesh[mask,mask])) ion() plot(dos) ylim(0,2) pdb.set_trace()
def test_symm(self,useC=True): perco=self.get_perco(L=5,size=5,form='x') hgen=self.model.hgen kspace=perco.get_kspace() kpath=path_k([kspace.G,kspace.special_points['X'][0],kspace.M[0],kspace.G],N=40) ion() if useC: cfunc=lambda k:EU2C(*eigh(hgen.Hk(k)),T=0.1) ck_red=perco.reduce_k(cfunc,kpath) hkmesh=Hmesh(C2H(ck_red,T=1.)) else: hfunc=lambda k:hgen.Hk(k) hk_red=perco.reduce_k(hfunc,kpath) hkmesh=Hmesh(hk_red) ekmesh=hkmesh.getemesh() kpath.plot(ekmesh,mode='abs',ls='--' if useC else '-') ylim(-5,5) pdb.set_trace()
def plot_dos(M,t=1.,periodic=True,usekspace=True,N=100): ''' show the meanfield band. ''' model=BizardModel_MF(M=M,t=t,mu=0.,N=N,periodic=periodic,usekspace=usekspace) hgen=model.hgen if usekspace: kl=hgen.kspace.kmesh hmesh=hgen.gethkmesh(kl[:,newaxis]) else: hmesh=hgen.H() hmesh=Hmesh(hmesh) emesh=hmesh.getemesh() ion() wlist=linspace(-3,3,200) Emesh(emesh).show_dos(wlist) gate=0.01 print 'Zero Energy States(abs(E) < %s) -> %s'%(gate,emesh[abs(emesh)<gate]) pdb.set_trace()
def test_bandrecover(self,useC=True): perco=self.get_perco(L=1,size=1,form='#') T=1. hgen=self.model.hgen kspace=perco.get_kspace() kpath=path_k([kspace.G,kspace.special_points['X'][0],kspace.M[0],kspace.G],N=50) if useC: cfunc=lambda k:EU2C(*eigh(hgen.Hk(k)),T=T) ck_red=perco.reduce_k(cfunc,kpath) hkmesh=Hmesh(C2H(ck_red)) else: hfunc=lambda k:hgen.Hk(k) hk_red=perco.reduce_k(hfunc,kpath) hkmesh=Hmesh(hk_red) ekmesh=hkmesh.getemesh() ekmesh0=Hmesh([hgen.Hk(k) for k in kpath]).getemesh() #kpath.plot(ekmesh,mode='abs') #kpath.plot(ekmesh0,mode='abs',color='r',ls='--') assert_allclose(ekmesh,ekmesh0,atol=1e-4)