[go: up one dir, main page]

Menu

#168 Add method to calculate excited eigenstates of a Hamiltonian

0.3.2
done
nobody
nobody
2021-01-16
2019-09-02
Ulf Lorenz
No
What and Why

One technique for getting the lowest few eigenstates of a Hamiltonian is repeated relaxation.

  • You first relax a trial state until you have a good approximation of the ground state of the Hamiltonian.
  • Then, you relax (the same or another) trial state again, while repeatedly projecting the result into the space orthogonal of the groundstate. This yields an approximation of the first excited eigenstate
  • You relax yet another state again, while repeatedly projection it to the orthogonal state of the groundstate and first excited state. This gives you an approximation of the second excited state.

And so on.

Using e.g., Chebychev propagators, this relaxation can be extremely fast, especially when you need the first few excited states of a large-dimensional system. The drawback is that the numerical errors accumulate pretty quickly, so you can only get the lowest few eigenstates in that way.

This also has a fancy name; Arnoldi method or so.

Acceptance criteria
  • There is some implementation of this scheme (factory/*?)
  • There is a highlighted demo that demonstrates the use of this scheme.

Note: Originally tried Lanczos algorithm, but doing this turned out to be pretty tricky, so I deferred this to [#203]

Instead I went for repeated relaxation including the MolVibration/H3+ demo

Related

Tickets: #203

Discussion

  • Ulf Lorenz

    Ulf Lorenz - 2020-01-01
    • labels: --> Matlab-version
     
  • Ulf Lorenz

    Ulf Lorenz - 2020-07-31
    • Milestone: Backlog --> 0.3.2
     
  • Ulf Lorenz

    Ulf Lorenz - 2020-11-08
    • summary: Eigenstate calculator that repeatedly relaxes and projects out found eigenstates --> Faster Eigenstate calculator
    • Description has changed:

    Diff:

    --- old
    +++ new
    @@ -1,3 +1,29 @@
    +#####What and Why#####
    +
    +Currently, we have only one eigenstate solver that diagonalizes the Hamiltonian matrix. While this works fine in general, such a diagonalization becomes not very useful for very large systems (~10k grid points), because the computational complexity scales very unfavorably.
    +
    +On the other hand, you often do not want to have _all_ eigenstates, but just the lowest few (after all, you want to solve the time-dependent Schroedinger equation). An example would be a state with finite, but low temperature, where you sum over a handful of eigenstates to get the thermal average.
    +
    +Two solvers seem useful:
    +
    +* Iterative Arnoldi method. That is, propagate in imaginary time to get the groundstate, then propagate again while always projecting out the groundstate to get the first excited state etc.
    +* Lanczos method. Repeatedly apply the Hamiltonian to a random initial test state and solve the eigenvalue problem in the resulting Krylov subspace. There are various issues about usability (a random starting vector may not give all relevant eigenstates), but in general the method seems fast and easy enough to implement.
    +
    +The suggestion would be to implement the Lanczos method unless there are severe obstacles.
    +
    +
    +#####Acceptance criteria#####
    +
    +*  Implement a method to get some approximate eigenstates and -energies for a given problem
    +** squeeze the solver into the EigenstatePrimitive interface, i.e., that it can be used like any other solver.
    +* Add a demo that highlights the usage and ideally potential pitfalls
    +
    +----
    +
    +Old content
    +
    +
    +
     #####What and Why#####
    
     One technique for getting the lowest few eigenstates of a Hamiltonian is repeated relaxation.
    
    • status: open --> assigned
    • assigned_to: Ulf Lorenz
     
  • Ulf Lorenz

    Ulf Lorenz - 2020-12-30
    • summary: Faster Eigenstate calculator --> Add method to calculate excited eigenstates of a Hamiltonian
    • Description has changed:

    Diff:

    --- old
    +++ new
    @@ -1,29 +1,3 @@
    -#####What and Why#####
    -
    -Currently, we have only one eigenstate solver that diagonalizes the Hamiltonian matrix. While this works fine in general, such a diagonalization becomes not very useful for very large systems (~10k grid points), because the computational complexity scales very unfavorably.
    -
    -On the other hand, you often do not want to have _all_ eigenstates, but just the lowest few (after all, you want to solve the time-dependent Schroedinger equation). An example would be a state with finite, but low temperature, where you sum over a handful of eigenstates to get the thermal average.
    -
    -Two solvers seem useful:
    -
    -* Iterative Arnoldi method. That is, propagate in imaginary time to get the groundstate, then propagate again while always projecting out the groundstate to get the first excited state etc.
    -* Lanczos method. Repeatedly apply the Hamiltonian to a random initial test state and solve the eigenvalue problem in the resulting Krylov subspace. There are various issues about usability (a random starting vector may not give all relevant eigenstates), but in general the method seems fast and easy enough to implement.
    -
    -The suggestion would be to implement the Lanczos method unless there are severe obstacles.
    -
    -
    -#####Acceptance criteria#####
    -
    -*  Implement a method to get some approximate eigenstates and -energies for a given problem
    -** squeeze the solver into the EigenstatePrimitive interface, i.e., that it can be used like any other solver.
    -* Add a demo that highlights the usage and ideally potential pitfalls
    -
    -----
    -
    -Old content
    -
    -
    -
     #####What and Why#####
    
     One technique for getting the lowest few eigenstates of a Hamiltonian is repeated relaxation.
    @@ -40,5 +14,5 @@
    
     #####Acceptance criteria#####
    
    -* There is an EigenstatePrimitive implementation that implements this scheme.
    +* There is some implementation of this scheme (factory/*?)
     * There is a highlighted demo that demonstrates the use of this scheme.
    
     
  • Ulf Lorenz

    Ulf Lorenz - 2020-12-30
    • Description has changed:

    Diff:

    --- old
    +++ new
    @@ -16,3 +16,8 @@
    
     * There is some implementation of this scheme (factory/*?)
     * There is a highlighted demo that demonstrates the use of this scheme.
    +
    +
    +----
    +
    +Note: Originally tried Lanczos algorithm, but doing this turned out to be pretty tricky, so I deferred this to [#203]
    
     

    Related

    Tickets: #203

  • Ulf Lorenz

    Ulf Lorenz - 2021-01-16
    • Description has changed:

    Diff:

    --- old
    +++ new
    @@ -21,3 +21,5 @@
     ----
    
     Note: Originally tried Lanczos algorithm, but doing this turned out to be pretty tricky, so I deferred this to [#203]
    +
    +Instead I went for repeated relaxation including the MolVibration/H3+ demo
    
    • status: assigned --> done
    • assigned_to: Ulf Lorenz --> nobody
     

    Related

    Tickets: #203


Log in to post a comment.