Recent Changes - Search:



Mp Evolve Krylov

On 12/05/2016, a bug was diagnosed and (hopefully) fixed that has a major effect on the performance of mp-evolve-krylov.

The bug affects the algorithm in the case where the Krylov subspace loses orthogonality (as happens naturally due to truncation of the MPS bond dimension). There was a complex-conjugation bug in calculating some of the the Hamiltonian matrix elements. This has no effect while the Krylov subspace is orthogonal (those matrix elements will be zero anyway), but when the Krylov subspace loses orthogonality, the bug leads to a failure of convergence Krylov subspace expansion.

At this time there are no suggestions that this has led to incorrect calculations, but the fix will improve the accuracy (a bit) and improve the performance (a lot). So anyone using mp-evolve-krylov should apply the patch to the code.


Update your copy of the toolkit from the Subversion server, by running svn update from the trunk/ directory. If for some reason you are not able to access the svn server, then place the fixed version of the file progressivekrylov.cpp in the mp-algorithms/ directory and recompile mp-evolve-krylov.

From a shell:

cd trunk/mp-algorithms

cd <build-directory>
make install


The main symptom is that the Krylov expansion fails to converge, that is, the algorithm gets ‘stuck’ at some timestep and doesn’t make progress.

When compiled with DEBUG checks enabled (ie, without -DNDEBUG on the compiler command line), the program will abort with an assert failure in line 381 of progressivekrylov.cpp.

A workaround to this problem that has been found in the past is to force keeping a larger number of states in the Krylov vectors (eg with -m or --variance-mod parameters). This works, but has a significant effect on the performance.


The Krylov time evolution algorithm uses the Lanczos recursion algorithm to construct a subspace representation of the Hamiltonian. In exact arithmetic, the Lanczos procedure results in a subspace Hamiltonian that is exactly tri-diagonal, that is, matrix elements only on the diagonal M(i,i) and immediately next to the diagonal M(i+1,i) and M(i,i+1). However, this is only the case if the Krylov vectors obtained in the Lanczos iteration are obtained with perfect accuracy. For an MPS, the truncation error is the biggest effect, that tends to cause loss of orthogonality quite quickly. For this reason, mp-evolve-krylov calculates all matrix elements in the Krylov subspace.

Unfortunately, while the diagonal and sub-diagonal matrix elements are calculated correctly, there was a complex-conjugation bug affecting the remaining matrix elements. This means that the algorithm works correctly while the Krylov vectors are orthogonal (or approximately orthogonal), but fails when the vectors lose orthogonality. This causes the Krylov expansion to fail to converge.

Are there any cases where the Krylov subspace loses orthogonality, but the Krylov expansion converges anyway (and hence lead to incorrect results)? I haven’t seen any such cases so far, but it could be possible.

Edit - History - Print - Recent Changes - Search
Page last modified on May 13, 2016, at 12:13 AM