Hello,
I have seen similar questions in this forum and know that related extension may be in progress. But for the simple 1D hard boson model with at most one boson in nearest neighbor sites, it seems not very difficult to rewrite the dmrg code.
If there are L sites, we can group (1,2), (2,3), (3,4), …, (L-1, L) sites for form new L-1 sites. The effective Hamiltonian can be derived. For the new sites, there are three possible states: 00, 01, 10 for each site and notice that nearest neighbor states share a common label [if (1,2) site is in state 00, (2,3) site can be only in 00 and 01 states …]. If there is no constraint, the new Hilbert space is larger than the original one: 3^{L-1} > 2^L. But the constraint can be encoded into MPS by adding labels to left and right link indices, e.g. if the physical state is 01, the left link is labeled by 0 and the right one is labeled by 1. Now for nearest neighbor tensors, only blocks with link indices sharing the same label can be contracted.
I believe this idea works well. My question is if this idea can be easily implemented in the current ITensor library. Thanks.

Hi Jin,
Sorry we missed your question – it’s an interesting question. We don’t directly support this kind of non-outer-product Hilbert space at this time, though we are working on a very general non-Abelian group symmetry system that could probably be used to do this kind of thing in the future.

So at this time, I would recommend one of the following approaches:

you could just use a four-boson Hilbert space and add a term to your Hamiltonian which effectively pushes states with occupancy (1,1) to very high energies. So basically something like a nearest-neighbor interaction + V n_j n_{j+1} with a large V. If your results do not depend on the value of V (i.e. you compute things for a few large values of V and confirm they are unchanged) then you can be sure that the (1,1) states are excluded.

following the work by Chepiga and Mila, you can switch to a “bond basis” which has three states corresponding to the neighboring sites being (0,0), (0,1), or (1,0). Then you can work out the definition of various operators in this new basis and finally code your problem entirely in this new basis. This might be the nicest way to go.

Hi miles, thanks for the reply. Yes, we can write various operators in the bond basis, but there are constraints for the Hilbert space as discussed above. That is, nearest-neighbor bonds share a site state, if the jth bond take (0,1) state, the (j+1)th bond can only take (1,0) state, and the (j-1)th bond can take (0,0) and (1,0) states. It seems this needs some time to figure it out.