How to change the max bond dimension according to the energy error in the middle of the DMRG calculation

Hi,

I am working on a bit more complicated model. As you can see, a large bond dimension allows finer convergence, but at the cost of more time. For faster convergence, I think it would be better to set the bond dimension low in advance and increase the bond dimension based on the energy error in the middle of the DMRG calculation. The observer system seems to help, but is it possible to access the maximum bond dimension?

Thank you.

It’s an interesting question, but currently our code is not set up to do this. The only thing you could do is to make a copy of our dmrg function (and change the name) then customize it for your purposes to modify the max bond dimension dynamically in the way that you are proposing. If you do, I’d be interested to know how well it works.

But philosophically, I’m not sure you need to make this modification. Here is an argument why: if you do more sweeps at a lower bond dimension (imagine doing 20 sweeps at a bond dimension of 10) then these sweeps will be so fast that it will take a negligible amount of time. So there your energy precision will be low, but also your running time will be fast. If you continue to work in this way, then you will continue to get the corresponding nice tradeoff between running time and precision. You could do 80 sweeps at bond dimension 10, followed by 40 sweeps at bond dimension 20, then 20 sweep at bond dimension 40, 10 at bond dimension 80, and so on. Then your last two sweeps at bond dimension 200, say, will take most of the overall computing time but will also be putting in the last few digits of accuracy in your result. This to me seems like a nice balance of resources versus what the resources are buying you. Hope that’s a helpful argument.