|
8 | 8 | Use [`KrylovKit.eigsolve`](@extref) to perform exact diagonalization on a |
9 | 9 | `FiniteMPOHamiltonian` to find its eigenvectors as `FiniteMPS` of maximal rank, essentially |
10 | 10 | equivalent to dense eigenvectors. |
| 11 | +
|
| 12 | +### Arguments |
| 13 | +- `opp::FiniteMPOHamiltonian`: the Hamiltonian to diagonalize. |
| 14 | +
|
| 15 | +### Keyword arguments |
| 16 | +- `sector=first(sectors(oneunit(physicalspace(opp, 1))))`: the total charge of the |
| 17 | + eigenvectors, which is chosen trivial by default. |
| 18 | +- `len::Int=length(opp)`: the length of the system. |
| 19 | +- `num::Int=1`: the number of eigenvectors to find. |
| 20 | +- `which::Symbol=:SR`: the kind eigenvalues to find, see [`KrylovKit.eigsolve`](@extref). |
| 21 | +- `alg=Defaults.alg_eigsolve(; dynamic_tols=false)`: the diagonalization algorithm to use, |
| 22 | + see [`KrylovKit.eigsolve`](@extref). |
| 23 | +
|
| 24 | +!!! note "Valid `sector` values" |
| 25 | + The total charge of the eigenvectors is imposed by adding a charged auxiliary space as |
| 26 | + the leftmost virtualspace of each eigenvector. Specifically, this is achieved by passing |
| 27 | + `left=Vect[typeof(sector)](sector => 1)` to the [`FiniteMPS`](@ref) constructor. As |
| 28 | + such, the only valid `sector` values (i.e. a `sector` value for which the corresponding |
| 29 | + eigenstate has valid fusion channels) are those that occur in the dual of the fusion of |
| 30 | + all the physical spaces in the system. |
| 31 | +
|
11 | 32 | """ |
12 | 33 | function exact_diagonalization(opp::FiniteMPOHamiltonian; |
13 | 34 | sector=first(sectors(oneunit(physicalspace(opp, 1)))), |
|
0 commit comments