I wanted to use for this purpose DMRG, which is executed with an argument "orthogonal_to". I first did an exact diagonalization to obtain some benchmark results. Then I run DMRG without any conservation of quantum numbers. Finally, I used DMRG with conservation of 'Sz'. I obtained the following results for a SpinChain with 3 SpinSites (with spin 1/2):
Code: Select all
===== EXACT DIAGONALIZATION =====
[-1.0000000e+00+0.j 1.2171636e-16+0.j 5.0000000e-01+0.j -1.0000000e+00+0.j 5.0000000e-01+0.j 0.0000000e+00+0.j 5.0000000e-01+0.j 5.0000000e-01+0.j]
===== DMRG - NO CONSERVATION =====
[-1.0, -1.0, -1.6833599511052614e-16, -7.783179800973695e-17, -7.783179800973695e-17, -7.783179800973695e-17, -7.783179800973695e-17, 3.4663131977831515e-17]
===== DMRG - CONSERVATION OF Sz =====
[-1.0, -1.0, -1.1148336360798884e-16, -1.3877787807814466e-17, -7.320883228133898e-18, -2.4903616914531226e-18, 0.5, 0.5]
It seems, like DMRG is performing well on the subspace on which it is launched. E.g. with conservation of Sz it runs on a smaller subspace and is able to obtain at lest the groundstate of this subspace.
What am I doing wrong? Or maybe there is some other way to get what I want? I thought about using ExactDiag and then casting obtained vectors to MPSs, but I would like to stick with the DMRG.