예제 #1
0
파일: views.py 프로젝트: GiggleLiu/apps
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)
예제 #2
0
파일: views.py 프로젝트: GiggleLiu/apps
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()
예제 #3
0
파일: views.py 프로젝트: GiggleLiu/apps
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())
예제 #4
0
파일: tests.py 프로젝트: GiggleLiu/bes
 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]))
예제 #5
0
파일: views.py 프로젝트: GiggleLiu/apps
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()
예제 #6
0
파일: views.py 프로젝트: GiggleLiu/apps
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()
예제 #7
0
파일: views.py 프로젝트: GiggleLiu/bes
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()
예제 #8
0
파일: views.py 프로젝트: GiggleLiu/apps
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()
예제 #9
0
파일: tests.py 프로젝트: GiggleLiu/bes
 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()
예제 #10
0
파일: views.py 프로젝트: GiggleLiu/apps
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()
예제 #11
0
파일: tests.py 프로젝트: GiggleLiu/bes
 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)