Hi Ze-Pei,
Good question. Unfortunately this feature is missing in ITensor currently. We have a practice of not adding features until there is a clear use case, but I think the case you describe definitely justifies adding this feature.
So if you can wait, I will try to add it as soon as I can. Hopefully within a week's time but we'll see.
For the ITensor class, adding this feature should not be extremely hard if you feel like digging into the internals yourself, although it will be faster for me to do it of course. Basically, I plan to allocate a new storage for the concatenated ITensor, then use a "TensorRef" object which is a lower-level type of non-owning tensor to refer to this storage. The TensorRef class supports "tensor slicing" which lets one select only a specific sub-block of the tensor. Then one can straightforwardly copy another tensor whose size matches that sub-block into the sub-block. In this way, one can copy each of the two tensors to be concatenated into the new tensor's storage.
Anyway that's the plan and I hope to finish it soon, at least for the ITensor class. For IQTensors it will be more technical, but should also be possible.
Best regards,
Miles