예제 #1
0
파일: views.py 프로젝트: GiggleLiu/apps
def get_mps(K,Jp,J1=1.,J2=0.2412,nsite=30,which='finite',data_file=None):
    '''
    Run finite-DMFT/lanczos for two impurity Kondo model to get the Ground state energy.

    Parameters:
        :J1/J2/K/Jp: float, the parameters defining the model.
        :nsite: integer, the number of sites, must be even.
        :which: 'finite'/'lanczos', select the method to solve the chain, 'finite dmrg' or 'lanczos'.
    '''
    assert(which=='finite' or which=='lanczos')
    assert(nsite%2==0)

    model=TIKM(J1=J1,J2=J2,K=K,Jp=Jp,nsite=nsite)
    hgen=SpinHGen(spaceconfig=model.spaceconfig,evolutor=MaskedEvolutor(hndim=model.spaceconfig.hndim) if which=='finite' else NullEvolutor(hndim=2))
    dmrgegn=DMRGEngine(hchain=model.H_serial,hgen=hgen,tol=0)
    if which=='lanczos':
        H=get_H(H=model.H_serial,hgen=hgen)
        EG,EV=eigsh(H,k=1)
        mps=state2MPS(EV[:,0])
    else:
        EG=dmrgegn.run_finite(endpoint=(2,'<-',0),maxN=[10,20],tol=0)[-1]
        mps=dmrgegn.get_mps(direction='<-')  #right normalized initial state
    if data_file is not None:
        mps.save(data_file)
    return mps
예제 #2
0
파일: testdmrg.py 프로젝트: amilacsw/dmrg
 def test_dmrg_infinite(self):
     '''test for infinite dmrg.'''
     maxiter=100
     model=self.get_model(maxiter+2,1)
     hgen=SpinHGen(spaceconfig=SpinSpaceConfig([2,1]),evolutor=MaskedEvolutor(hndim=2))
     dmrgegn=DMRGEngine(hchain=model.H_serial,hgen=hgen,tol=0)
     EG=dmrgegn.run_infinite(maxiter=maxiter,maxN=20,tol=0)[-1]
     assert_almost_equal(EG,0.25-log(2),decimal=2)
예제 #3
0
파일: testvmps.py 프로젝트: yanguang21/dmrg
 def dmrgrun(self,model):
     '''Get the result from DMRG'''
     #run dmrg to get the initial guess.
     hgen=ExpandGenerator(spaceconfig=model.spaceconfig,H=model.H_serial,evolutor_type='masked')
     dmrgegn=DMRGEngine(hgen=hgen,tol=0,reflect=True)
     dmrgegn.use_U1_symmetry('M',target_block=zeros(1))
     EG,mps=dmrgegn.run_finite(endpoint=(5,'<-',0),maxN=30,tol=1e-12)
     return EG,mps
예제 #4
0
파일: testdmrg.py 프로젝트: GiggleLiu/apps
 def test_dmrg_infinite(self):
     '''test for infinite dmrg.'''
     maxiter=100
     model=self.get_model(maxiter+2,1)
     hgen=RGHGen(spaceconfig=SpinSpaceConfig([2,1]),H=model.H_serial,evolutor_type='masked')
     dmrgegn=DMRGEngine(hgen=hgen,tol=0,reflect=True)
     dmrgegn.use_U1_symmetry('M',target_block=0)
     EG=dmrgegn.run_infinite(maxiter=maxiter,maxN=20,tol=0)[0]
     assert_almost_equal(EG,0.25-log(2),decimal=2)
예제 #5
0
 def test_dmrg_infinite(self):
     '''test for infinite dmrg.'''
     maxiter = 100
     model = self.get_model(maxiter + 2, 1)
     hgen = ExpandGenerator(spaceconfig=SpinSpaceConfig([1, 2]),
                            H=model.H_serial,
                            evolutor_type='masked')
     dmrgegn = DMRGEngine(hgen=hgen, tol=0, reflect=True, iprint=10)
     dmrgegn.use_U1_symmetry('M', target_block=zeros(1))
     EG = dmrgegn.run_infinite(maxiter=maxiter, maxN=20, tol=0)[0]
     assert_almost_equal(EG, 0.25 - log(2), decimal=2)
예제 #6
0
파일: testdmrg.py 프로젝트: amilacsw/dmrg
 def test_dmrg_finite(self):
     '''
     Run iDMFT for heisenberg model.
     '''
     model=self.get_model(10,1)
     hgen1=SpinHGen(spaceconfig=SpinSpaceConfig([2,1]),evolutor=NullEvolutor(hndim=2))
     hgen2=SpinHGen(spaceconfig=SpinSpaceConfig([2,1]),evolutor=MaskedEvolutor(hndim=2))
     dmrgegn=DMRGEngine(hchain=model.H_serial,hgen=hgen1,tol=0)
     EG1=dmrgegn.direct_solve()
     dmrgegn=DMRGEngine(hchain=model.H_serial,hgen=hgen2,tol=0)
     EG2=dmrgegn.run_finite(endpoint=(5,'<-',0),maxN=[10,20,30,40,40],tol=0)[-1]
     assert_almost_equal(EG1,EG2,decimal=4)
예제 #7
0
파일: testdmrg.py 프로젝트: GiggleLiu/apps
 def test_dmrg_finite(self):
     '''
     Run iDMFT for heisenberg model.
     '''
     nsite=10
     model=self.get_model(nsite,1)
     hgen1=RGHGen(spaceconfig=SpinSpaceConfig([2,1]),H=model.H_serial,evolutor_type='null')
     hgen2=RGHGen(spaceconfig=SpinSpaceConfig([2,1]),H=model.H_serial,evolutor_type='masked')
     H=get_H(hgen1)
     EG1=eigsh(H,k=1,which='SA')[0]
     dmrgegn=DMRGEngine(hgen=hgen2,tol=0,reflect=True)
     dmrgegn.use_U1_symmetry('M',target_block=0)
     EG2=dmrgegn.run_finite(endpoint=(5,'<-',0),maxN=[10,20,30,40,40],tol=0)[0]
     assert_almost_equal(EG1,EG2,decimal=4)
예제 #8
0
파일: testdmrg.py 프로젝트: GiggleLiu/apps
    def test_vmps(self):
        '''
        Run vMPS for Heisenberg model.
        '''
        nsite=10
        filename='mps_heisenberg_%s.dat'%(nsite)
        model=self.get_model(nsite,which=1)

        #mps=MPS.load(filename)
        #run dmrg to get the initial guess.
        hgen=RGHGen(spaceconfig=SpinSpaceConfig([2,1]),H=model.H_serial,evolutor_type='masked')
        dmrgegn=DMRGEngine(hgen=hgen,tol=0,reflect=True)
        dmrgegn.use_U1_symmetry('M',target_block=0)
        EG,mps=dmrgegn.run_finite(endpoint=(1,'<-',0),maxN=40,tol=1e-12)
        mps.save(filename)

        #run vmps
        vegn=VMPSEngine(H=model.H,k0=mps)
        vegn.run()
예제 #9
0
파일: testdmrg.py 프로젝트: amilacsw/dmrg
    def test_vmps(self):
        '''
        Run vMPS for Heisenberg model.
        '''
        nsite=10
        filename='mps_heisenberg_%s.dat'%(nsite)
        model=self.get_model(nsite,which=1)

        #mps=MPS.load(filename)
        #run dmrg to get the initial guess.
        hgen=SpinHGen(spaceconfig=SpinSpaceConfig([2,1]),evolutor=MaskedEvolutor(hndim=2))
        dmrgegn=DMRGEngine(hchain=model.H_serial,hgen=hgen,tol=0)
        dmrgegn.run_finite(endpoint=(1,'<-',0),maxN=40,tol=1e-12)
        #hgen=dmrgegn.query('r',nsite-1)
        mps=dmrgegn.get_mps()  #right normalized initial state
        mps.save(filename)

        #run vmps
        vegn=VMPSEngine(H=model.H,k0=mps)
        vegn.run()
예제 #10
0
파일: views.py 프로젝트: GiggleLiu/apps
def spin1_vmps(J, Jz, h, nsite, append=False):
    """
    Run vMPS for Heisenberg model.
    """
    filename = "mps_heisenberg_%s.dat" % (nsite)
    model = Spin1Model(J=J, Jz=Jz, h=h, nsite=nsite)
    if append:
        mps = MPS.load(filename)
    else:
        # run dmrg to get the initial guess.
        hgen = RGHGen(spaceconfig=SpinSpaceConfig([2, 1]), H=model.H_serial, evolutor_type="masked")
        dmrgegn = DMRGEngine(hgen=hgen, tol=0)
        EG = dmrgegn.run_finite(endpoint=(1, "<-", 0), maxN=10, tol=0)[-1]
        # hgen=dmrgegn.query('r',nsite-1)
        mps = dmrgegn.get_mps(direction="<-")  # right normalized initial state
        mps.save(filename)

    # run vmps
    vegn = VMPSEngine(H=model.H, k0=mps)
    vegn.run()
예제 #11
0
 def test_dmrg_finite(self):
     '''
     Run iDMFT for heisenberg model.
     '''
     nsite = 10
     model = self.get_model(nsite, 1)
     hgen1 = ExpandGenerator(spaceconfig=SpinSpaceConfig([1, 2]),
                             H=model.H_serial,
                             evolutor_type='null')
     hgen2 = ExpandGenerator(spaceconfig=SpinSpaceConfig([1, 2]),
                             H=model.H_serial,
                             evolutor_type='masked')
     H = get_H(hgen1)
     EG1 = eigsh(H, k=1, which='SA')[0]
     dmrgegn = DMRGEngine(hgen=hgen2, tol=0, reflect=True)
     dmrgegn.use_U1_symmetry('M', target_block=zeros(1))
     EG2 = dmrgegn.run_finite(endpoint=(5, '<-', 0),
                              maxN=[10, 20, 40, 40, 40],
                              tol=0)[0]
     assert_almost_equal(EG1, EG2, decimal=4)
예제 #12
0
파일: views.py 프로젝트: GiggleLiu/apps
def heisenberg_vmps(J,Jz,h,nsite,append=False):
    '''
    Run vMPS for Heisenberg model.
    '''
    filename='mps_heisenberg_%s.dat'%(nsite)
    model=HeisenbergModel(J=J,Jz=Jz,h=h,nsite=nsite)
    if append:
        mps=MPS.load(filename)
    else:
        #run dmrg to get the initial guess.
        hgen=RGHGen(spaceconfig=model.spaceconfig,H=model.H_serial,evolutor_type='masked')
        dmrgegn=DMRGEngine(hgen=hgen,tol=0)
        EG=dmrgegn.run_finite(endpoint=(1,'<-',0),maxN=10,tol=0)[-1]
        #hgen=dmrgegn.query('r',nsite-1)
        mps=dmrgegn.get_mps(direction='<-')  #right normalized initial state
        mps.save(filename)

    #run vmps
    vegn=VMPSEngine(H=model.H,k0=mps)
    vegn.run()
예제 #13
0
파일: views.py 프로젝트: GiggleLiu/apps
def spin1_dmrg(J, Jz, h, nsite=10, which="finite", J2=0, J2z=None):
    """
    Run iDMFT for heisenberg model.
    """
    if J2 == 0:
        model = Spin1Model(J=J, Jz=Jz, h=h, nsite=nsite)
    else:
        model = Spin1Model(J=J, Jz=Jz, J2=J2, J2z=J2z, h=h, nsite=nsite)
    hgen = RGHGen(spaceconfig=SpinSpaceConfig([2, 1]), H=model.H_serial, evolutor_type="masked")
    dmrgegn = DMRGEngine(hgen=hgen, tol=0, reflect=True)
    dmrgegn.use_U1_symmetry("M", target_block=0)
    if which == "infinite":
        dmrgegn.run_infinite(maxiter=50, maxN=20, tol=0)
    elif which == "lanczos":
        dmrgegn.direct_solve()
    else:
        dmrgegn.run_finite(endpoint=(5, "<-", 0), maxN=[10, 20, 30, 40, 40], tol=0)
    pdb.set_trace()
예제 #14
0
 def test_lanczos(self):
     '''test for directly construct and solve the ground state energy.'''
     model = self.get_model(10, 1)
     hgen1 = ExpandGenerator(spaceconfig=SpinSpaceConfig([1, 2]),
                             H=model.H_serial,
                             evolutor_type='null')
     hgen2 = ExpandGenerator(spaceconfig=SpinSpaceConfig([1, 2]),
                             H=model.H_serial,
                             evolutor_type='normal')
     dmrgegn = DMRGEngine(hgen=hgen1, tol=0, iprint=10)
     H = get_H(hgen=hgen1)
     H2, bm2 = get_H_bm(hgen=hgen2, bstr='M')
     Emin = eigsh(H, k=1)[0]
     Emin2 = eigsh(bm2.extract_block(H2, (zeros(1), zeros(1)),
                                     uselabel=True),
                   k=1)[0]
     print 'The Ground State Energy is %s, tolerence %s.' % (Emin,
                                                             Emin - Emin2)
     assert_almost_equal(Emin, Emin2)
예제 #15
0
파일: views.py 프로젝트: GiggleLiu/apps
def solve1(J,Jz,h,target_block,nsite=10,parity=None,nspin=2):
    '''
    Run iDMFT for heisenberg model.
    '''
    model=HeisenbergModel(J=J,Jz=Jz,h=h,nsite=nsite,nspin=nspin)
    suffix='%s_%s%s.dat'%(model.get_str(),target_block,parity)
    filename_mps='data/mps_'+suffix
    filename_eng='data/eng_'+suffix
    parity=None

    hgen=RGHGen(spaceconfig=model.spaceconfig,H=model.H_serial,evolutor_type='masked')
    dmrgegn=DMRGEngine(hgen=hgen,tol=0,reflect=parity is not None,eigen_solver='JD')
    dmrgegn.use_U1_symmetry('M',target_block=target_block)
    if parity is not None:
        dmrgegn.use_disc_symmetry({'C':parity})
    t0=time.time()
    Emin,mps=dmrgegn.run_finite(endpoint=(5,'<-',0),maxN=[10,20,40,80,80],tol=1e-8)
    t1=time.time()

    print 'The Ground State Energy for %s: %s, Elapse %s.'%(model,Emin,t1-t0)
    print 'FIN - CORE:%s'%RANK
    mps.save(filename_mps)
    savetxt(filename_eng,Emin)
    return Emin,mps
예제 #16
0
def test_fsfermi():
	dmrg=DMRGEngine(fslhgen,fsrhgen)	
	dmrg.finite(mwarmup=10,mlist=[10,20,30,40,40])
예제 #17
0
def test_isfermi():
	dmrg=DMRGEngine(fslhgen,fsrhgen)
	dmrg.infinite(m=40)
예제 #18
0
def test_ifermi():
	dmrg=DMRGEngine(flhgen,frhgen)
	dmrg.infinite(m=40)
예제 #19
0
def test_fspin():
	dmrg=DMRGEngine(lhgen,rhgen)
	dmrg.finite(mwarmup=10,mlist=[10,20,30,40,40])
예제 #20
0
def test_ispin():
	dmrg=DMRGEngine(lhgen,rhgen)
	dmrg.infinite(m=20)
예제 #21
0
def test_tomps():
	dmrg=DMRGEngine(lhgen,rhgen)  
	dmrg.finite(mwarmup=10,mlist=[10])
	dmps=dmrg.tomps()
	return dmps