Ejemplo n.º 1
0
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()
Ejemplo n.º 2
0
 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)