Hi,

consider I want dmrg to find a state with some specified value of a given observable. I think this should be possible in a very similar way to how dmrg looks for excited states, but can’t quite work it out.

Namely, I have a problem where my initial state has S_z = 0 and I know that the ground state is a singlet, S=0. There is a parameter regime where the triplet state S=1, S_z=0 is very close in energy, and thus dmrg converges into a state which is a mixture of the two, with \langle S^2 \rangle not exactly 0 (as expected for a singlet), but somewhat larger.

I would like to use my a priori physical knowledge and tell dmrg to look for the singlet states. Basically, I want to optimize \psi for

where \lambda is some weight I would set empirically (similar to the excited state overlap weights), and S is the value of spin I want the final state to have.

One possibility would be to sum the three MPOs into

and run dmrg with this operator. How would one approach this?

Another option would require hacking the excited state calculation code, to make it compute the overlap in the second bracket at every step.

If possible, this approach would allow for optimisation of \psi for any a priori known observable, which might be generally useful, if it does not turn out to be computationally costly.

What would be the best approach?

Thanks, Luka