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()
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)