Hello!
I'm using OSMPS to solve a particle number non-conserving Hamiltonian with interacting fermions. I've got some questions by now:
Q1. What does the 'bond' term actually generate when we use
H.AddMPOTerm(Operators,'bond',['P','Q'],Phase=True)
Is it \sum_i P_i Q_{i+1}
or \sum_i (P_i Q_{i+1}+P_{i+1}Q_{i})?
Does it always guarantee Hermiticity? Does it depend on whether 'P'=='Q' ? I'm quite confused.
The term I want to generate is
\sum_i (f_i f_{i+1}+fdagger_{i+1}fdagger_i).
Is the following correct:
H.AddMPOTerm(Operators,'bond',['f','f'],Phase=True)
H.AddMPOTerm(Operators,'bond',['fdagger','fdagger'],weight=-1,Phase=True)?
Q2. My Hamiltonian doesn't conserve fermion number, but it does conserve "fermionic parity" (the oddness or evenness of particle number). The ground state would be a superposition of states with even number of atoms (like the BCS ground state). Is it possible to make use of this symmetry in the present code? (or just slightly modify the source code?)
Q3. Sometimes I'm interested in whether the ground state has a degeneracy, so I have to look at the energies of a few excited states. It seems that the excited state search is not 100% reliable at present, right? Sometimes it doesn't give the 1st excited state but instead returns a higher one, say 2nd or 3rd,etc, and sometimes it gives the same state as ground state when there is actually no degeneracy. Is there anything I can do to make the excited state search more reliable?
Q4. The 'BondEntropy' observable returns the Von Neumann entropy the reduced density matrix \rho_i of a certain bipartition. However, I'm interested in the eigenvalues of \rho_i, called "entanglement spectrum"--how could I get it?
Thanks a lot for your time!
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
below the answers to your questions. Let me know if I should be more detailed or if you have any other questions.
1) The AddMPOTerm method of the MPO is adding the hermitian conjugate terms if your bond term is not hermitian itself. In your P, Q example this would not depend if P == Q, but if P == P^dagger AND Q == Q^dagger. In this case openMPS would add exactly one term. Otherwise it ensures hermiticity and two terms are added.
In the example for your actual simulation with
H.AddMPOTerm(Operators,'bond',['f','f'],Phase=True)
the terms with 'fdagger' are added automatically and you can skip the second line. You can check this with printing H.data['bond']. Or more specific after adding only the first line 'f' you obtain the bond terms including 'fdagger':
2) We support U(1) symmetry - which would be number conservation as you mentioned - in the current version 1 which you can download or is available via version control. I have discrete symmetries in a local development branch and I can discuss next week (starting at 9/12/16) if it makes sense to push that feature. Discrete symmetries are of Ising Z2 type which looks to me like your case. Your symmetry generator would be the matrix with diagonal entries (0, 1, 0, 1, ...), in case with spinless fermions of all the same type only (0, 1).
3) Excited state search can get stuck in local minima. Two ways to improve this might be
a) Tuning your convergence parameters, in case you did not tried that yet. First thing I would try would be to increase to number of iterations (sweeps).
b) Use of symmetries might efficiently exclude set of states, e.g the first (second) excited state of the quantum Ising model is the ground state (first excited) state of the quantum Ising model with odd (even) symmetry.
For any case where an excited state is equal to the ground state I would like to have the example script in order to debug this. By default, the excited states should be orthogonal to all previous states.
4) At the moment there is no possibiltiy to specify in the python front end to save the singular values of one (or all) splittings. The quick solutions is to write them to some file from fortran*, on the other hand I will put that on my list for future support.
Kind regards,
Daniel
If you are familiar enough with fortran, that would be the files ObsOps_include_transfer.f90 / ObsOps_qinclude_transfer.f90 where the singular values are used to calculate the bond entropy. Personally I would append something to the filename "Obsname" for this kind of dirty solution, so that you can be sure that the filename is unique. I don't give you any line numbers, since I don't know which revision you were using (or if you downloaded version 1).
If you would like to refer to this comment somewhere else in this project, copy and paste the following link:
Hello!
I'm using OSMPS to solve a particle number non-conserving Hamiltonian with interacting fermions. I've got some questions by now:
Q1. What does the 'bond' term actually generate when we use
H.AddMPOTerm(Operators,'bond',['P','Q'],Phase=True)
Is it \sum_i P_i Q_{i+1}
or \sum_i (P_i Q_{i+1}+P_{i+1}Q_{i})?
Does it always guarantee Hermiticity? Does it depend on whether 'P'=='Q' ? I'm quite confused.
The term I want to generate is
\sum_i (f_i f_{i+1}+fdagger_{i+1}fdagger_i).
Is the following correct:
H.AddMPOTerm(Operators,'bond',['f','f'],Phase=True)
H.AddMPOTerm(Operators,'bond',['fdagger','fdagger'],weight=-1,Phase=True)?
Q2. My Hamiltonian doesn't conserve fermion number, but it does conserve "fermionic parity" (the oddness or evenness of particle number). The ground state would be a superposition of states with even number of atoms (like the BCS ground state). Is it possible to make use of this symmetry in the present code? (or just slightly modify the source code?)
Q3. Sometimes I'm interested in whether the ground state has a degeneracy, so I have to look at the energies of a few excited states. It seems that the excited state search is not 100% reliable at present, right? Sometimes it doesn't give the 1st excited state but instead returns a higher one, say 2nd or 3rd,etc, and sometimes it gives the same state as ground state when there is actually no degeneracy. Is there anything I can do to make the excited state search more reliable?
Q4. The 'BondEntropy' observable returns the Von Neumann entropy the reduced density matrix \rho_i of a certain bipartition. However, I'm interested in the eigenvalues of \rho_i, called "entanglement spectrum"--how could I get it?
Thanks a lot for your time!
Hallo Allen,
below the answers to your questions. Let me know if I should be more detailed or if you have any other questions.
1) The AddMPOTerm method of the MPO is adding the hermitian conjugate terms if your bond term is not hermitian itself. In your P, Q example this would not depend if P == Q, but if P == P^dagger AND Q == Q^dagger. In this case openMPS would add exactly one term. Otherwise it ensures hermiticity and two terms are added.
In the example for your actual simulation with
H.AddMPOTerm(Operators,'bond',['f','f'],Phase=True)
the terms with 'fdagger' are added automatically and you can skip the second line. You can check this with printing H.data['bond']. Or more specific after adding only the first line 'f' you obtain the bond terms including 'fdagger':
2) We support U(1) symmetry - which would be number conservation as you mentioned - in the current version 1 which you can download or is available via version control. I have discrete symmetries in a local development branch and I can discuss next week (starting at 9/12/16) if it makes sense to push that feature. Discrete symmetries are of Ising Z2 type which looks to me like your case. Your symmetry generator would be the matrix with diagonal entries (0, 1, 0, 1, ...), in case with spinless fermions of all the same type only (0, 1).
3) Excited state search can get stuck in local minima. Two ways to improve this might be
a) Tuning your convergence parameters, in case you did not tried that yet. First thing I would try would be to increase to number of iterations (sweeps).
b) Use of symmetries might efficiently exclude set of states, e.g the first (second) excited state of the quantum Ising model is the ground state (first excited) state of the quantum Ising model with odd (even) symmetry.
For any case where an excited state is equal to the ground state I would like to have the example script in order to debug this. By default, the excited states should be orthogonal to all previous states.
4) At the moment there is no possibiltiy to specify in the python front end to save the singular values of one (or all) splittings. The quick solutions is to write them to some file from fortran*, on the other hand I will put that on my list for future support.
Kind regards,
Daniel