Convert a Hamiltonian matrix to an MPO for DMRG's input

Hi,

I am trying to to find the optimal process to find the ground state of a Hamiltonian matrix when given as a 2D array.

In the examples I found in your documentation, the MPO hamiltonian is directly constructed from the hamiltonian operators.

My follow up question is:
Is it recommended to optimize the given hamiltonian before giving it as an input into the dmrg algorithm?
Maybe taking advantage of symmetries during its MPO construction? Or compressing it with SVD sweeps after the construction?

Thank you in advance,
Daniel

In general the dense matrix representation of a Hamiltonian will be exponentially large in the number of sites of the system, so normally it wouldn’t make sense to start from that representation if you were running DMRG. That’s why we generally expect users to specify the Hamiltonian as a sum of local terms in some operator basis symbolically as an OpSum, since we can then construct the Hamiltonian as an MPO without going through the exponentially large matrix representation.

EDIT: To answer your follow-up questions, when you construct a Hamiltonian symbolically as an OpSum and then convert it to an MPO, internally ITensorMPS.jl already compresses the MPO to the optimal bond dimension using SVDs. Additionally, if you specify your site indices to have conserved QNs, it will also take advantage of those conserved quantities when it is being constructed. You could try writing down the MPO representations by hand for a few simple Hamiltonians and see how the optimal bond dimension compares to the bond dimensions of the MPOs constructed by ITensor, those should match.

1 Like

This topic was automatically closed 10 days after the last reply. New replies are no longer allowed.