Recent Changes - Search:




Calculate excited states using the MPS excitation ansatz [1].


mp-excitation-ansatz [options] <psi> [psi-right]



Show help message.

-H, --Hamiltonian

The operator the use for the Hamiltonian (if unspecified, use wavefunction attribute Hamiltonian of psi).

-k, --momentum

The excitation momentum, in units of {$\pi$} (default 0). This can be a single number, or a range in the form start:end:step or start:end,num, which will produce num = floor(1 + (end-start)/step) samples from start to end inclusive.


Override the lattice unit cell size (otherwise, use the size of the unit cell of the lattice).


(2D cylinders) The target value of the y-momentum, in units of {$\pi$} (only a single value at a time is currently allowed). Specifying this option will enable targeting eigenstates of y-momentum.


(2D cylinders) Shift ky by subtracting this value, in units of {$\pi$} (useful when the output value of ky is shifted by some arbitrary phase).


(2D cylinders) The energy parameter to penalise states with the wrong y-momentum (default 5).

-n, --numeigen

The number of lowest eigenvalues to calculate (default 1).

-q, --quantumnumber

The quantum number sector for the excitation (default identity).

-r, --rotate

Rotate the right boundary unit cell by this many sites to the left.


(2D cylinders) The string MPO representation of the cylinder translation operator {$T_y$} for calculating the momentum in the y axis.

-o, --output

The prefix to use for output files, which will be of the form [prefix].k[k]; if a y-momentum is being targeted, this will become [prefix].kx[kx].ky[ky]; if more than one eigenvalue per momentum is being calculated, then .n[n] is appended to the end, where [n] is the index of the eigenvalue (starting from zero).
If this option is not specified, no files are saved.


Force the output filenames to use this many decimal places in the momentum.


The error tolerance for the ARPACK eigensolver for finding the excited states (default 1e-10).


The error tolerance for the GMRES algorithm for solving the left and right block Hamiltonians (default 1e-13).


The error tolerance for transfer matrix eigenvalues near unity (default 1e-12).


The random number generator seed for generating the initial state.


Use a random initial guess for each momentum. Otherwise, the lowest eigenvector for the previous momentum is used as an initial guess for the next one.


Store the left and right boundary wavefunctions by references to the input files.


Store the left and right boundary wavefunctions by writing them to the output files (default).


Hide column headings; use twice to hide output of momentum.

-v, --verbose

Increase verbosity.


This tool calculates the excited states for a given ground state using the MPS excitation ansatz {$$|\Phi_k(B)\rangle = \sum_n \mathrm{e}^{\mathrm{i}kn} \cdots A_L^{s_{n-2}} A_L^{s_{n-1}} B^{s_n} A_R^{s_{n+1}} A_R^{s_{n+2}} \cdots$$} where {$A_L$} and {$A_R$} are the left- and right-orthogonal forms respectively of the ground state. The lowest-energy states of this form are found for a specified momentum {$k$} by using a numerical eigensolver on the effective Hamiltonian for this state as the matrix {$B$} is varied.

We may also calculate topologically non-trivial excitations where the {$A_L$} and {$A_R$} matrices are taken from two different ground states, which can be done by specifying the optional command line option psi-right.

For 2D systems on a finite-width cylinder, we can calculate the {$y$}-momentum along the circumference of the cylinder by specifying the cylinder translation operator using the --string option. We can then target excited states which are simultaneously eigenstates of the {$y$}-momentum operator by penalising states with the wrong {$y$}-momentum [2]: this can be enabled by further specifying the --ky option.


As an example, we can calculate the Haldane gap, as was done in the original MPS excitation ansatz paper [1].

First, we find the ground state of the spin-1 antiferromagnetic Heisenberg model:

$ spinchain-u1 -S 1 -o lattice
$ mp-idmrg-s3e -H lattice:H_J1 -w psi -m "10..100x100,100x100" -q 0 --create

We can then calculate the energy gap at {$k = \pi$} by

$ mp-excitation-ansatz psi -k 1
#mp-excitation-ansatz psi -k 1
#Date: Tue, 17 Oct 2023 15:40:44 +1000
#Wavefunction unit cell size is 1 site
#Using a lattice unit cell size of 1 site
#FBZ ranges from 0 to 2pi
#k/pi                 #E
1                     0.41047915829201

We can calculate the dispersion relation for a range of {$k$} with the following command, using a larger error tolerance to speed up the calculation (in this example, the finite bond dimension of the ground state will have the most significant impact on the error anyway)

$ mp-excitation-ansatz psi -k 0:1:0.1 --tol 1e-5
#mp-excitation-ansatz psi -k 0:1:0.1 --tol 1e-5
#Date: Tue, 17 Oct 2023 15:42:10 +1000
#Wavefunction unit cell size is 1 site
#Using a lattice unit cell size of 1 site
#FBZ ranges from 0 to 2pi
#k/pi                 #E
0                     0.90251679306323
0.1                   1.1825165295609
0.2                   1.7522702327676
0.3                   2.312985081061
0.4                   2.6486031454093
0.5                   2.7162814426233
0.6                   2.5226507892681
0.7                   2.1070146846372
0.8                   1.5291130870744
0.9                   0.8684292477286
1                     0.41047915829369


  • There is some ambiguity to the meaning of the momentum when using a wavefunction or a lattice with a multi-site unit cell. The first Brillouin zone (FBZ) is taken to range from 0 to 2*pi*LatticeUnitCellSize/WavefunctionUnitCellSize. Here, LatticeUnitCellSize defaults to the number of sites in the lattice file’s unit cell, however, it can be manually overridden with --latticeucsize. The wavefunction and lattice unit cell sizes, as well as the FBZ range, are printed in the preamble of the output.
  • When calculating the {$y$}-momentum with a different psi-right specified, the resulting values of ky will possibly be shifted by a constant, since the eigenvectors of the left/right transfer matrices with {$T_y$} have an arbitrary phase factor which needs to be fixed (see the notes on mp-ibc-overlap). If this happens, the workaround is to use the --kyfix option to shift the values of ky by subtracting the specified value.
  • When calculating the {$y$}-momentum, if there are two or more excitations with the same energy, then the eigenvectors returned by ARPACK may not be eigenvectors of {$T_y$} and so their expectation values will be some linear combination of the {$y$}-momentum eigenvalues. This can be avoided by targeting a specific {$y$}-momentum by using the --ky option.


[1] J. Haegeman et al., Variational matrix product ansatz for dispersion relations, Phys. Rev. B 85, 100408(R) (2012), doi:10.1103/PhysRevB.85.100408, arXiv:1103.2286.
[2] M. Van Damme et al., Efficient matrix product state methods for extracting spectral information on rings and cylinders, Phys. Rev. B 104, 115142 (2021), doi:10.1103/PhysRevB.104.115142, arXiv:2102.10982.
Edit - History - Print - Recent Changes - Search
Page last modified on November 01, 2023, at 08:56 AM