Hi, good question. The zip-up method for applying an MPO to an MPS is described in this paper: https://arxiv.org/abs/1002.1305 (motivation and discussion starts around page 5).

It's a sort of "quasi-controlled" algorithm for applying an MPO, meaning that you can get it to converge to arbitrary accuracy with sufficiently small truncations, but you can also encounter some cases where it behaves poorly in practice depending on numerical details of how the MPO and MPS are constructed internally (such as whether the tensors obey right- and left- orthogonality constraints or not).

In practice I haven't been to happy with its performance, typically finding that I need to take quite small truncation cutoffs to get accurate results. But maybe it works well for your case or perhaps it can be improved. So it's present in ITensor as sort of an experimental feature but I don't want to steer new users to it.

Recently I made a major improvement to the exactApplyMPO algorithm that drastically improves its scaling. It's a fully controlled algorithm that should give consistent results across a wide range of MPOs and MPS. Its only drawback is that to leading order it scales as an additional power of the MPO bond dimension compared to fitApplyMPO or zipUpApplyMPO, which is non-trivial of course. But it could be acceptably fast for your case and should be the most reliable algorithm. So please try that and see if it's fast enough for you.

The problem with fitApplyMPO is that it can fail to converge (no matter how many sweeps are done) if the product of the MPO times the MPS is too different from the original MPS. But fitApplyMPO can work pretty well for MPOs that are not too far from the identity, such as when doing time evolution with a small step size.

Anyway you can see that this is a tricky business, which is why I recommend people try exactApplyMPO first.

In the future I'm planning to replace all these methods by a single method "applyMPO" that defaults to exactApply, but can accept an optional argument that tells the method to try one of the less reliable but faster algorithms such as fitApply. Also I'm planning to try a hybrid algorithm that could combine the best aspects of exactApply and fitApply (reliability and good scaling).