Dear forum,
I am trying to calculate the energies of the first few excited states for the system discussed in an earlier post:
http://itensor.org/support/89/issues-with-my-drmg-code
For this purpose, I went through the following:
http://itensor.org/docs.cgi?page=formulas/excited_dmrg
I believe the code first finds the ground state |psi0> and then finds the lowest energy state |psi1> that is orthogonal to the ground state, i.e. <psi0|psi1> = 0 and similarly finds higher excited states |psi2>, |psi3>, etc. Assuming this is how the code works, I wrote the following lines:
auto psi0 = IQMPS(initState);
auto en0 = dmrg(psi0,H,sweeps,{"Quiet=",true});
auto wfs = vector<IQMPS>(1);
wfs.at(0) = psi0;
auto psi1 = IQMPS(initState);
auto en1 = dmrg(psi1,H,wfs,sweeps,{"Quiet=",true,"Weight=",20.0});
auto wfs1 = vector<IQMPS>(1);
wfs1.at(0) = psi1;
auto psi2 = IQMPS(initState);
auto en2 = dmrg(psi2,H,wfs1,sweeps,{"Quiet=",true,"Weight=",20.0});
Note: The Hamiltonian is a function of the polarization angle theta.
The output does not make sense because the first excited state energies (en1) for some values of theta are smaller than the ground state energies (en0) and the second excited state energies (en2) for some values of theta are smaller than the first excited state energies.
Questions:
(1) What is the correct way to code first few excited state energies?
(2) What does the Weight option exactly do and why is it taken to be 20.0?
(3) If the ground state is , say, 3-fold degenerate, do en0, en1 and en2 report the same value of energy?
Thanks in advance.
Regards,
Niraj