You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
People start to think about non-hermitian Hamiltonians.
DMRG would need major adjustments for that, but TEBD could be adjusted quite simply.
Like in the imaginary time evolution with hermitian H, it would lead to non-hermitian U = expm(-i*dt *H_bond), but that's probably fine as long as the time step is small enough, and one could do the left-right-sweep instead of the brick-wall pattern to account for that.
Right now, the only point where it actually does break down is in generating the correct U=expm(-i*dt*H), because it does that by diagonalizing the H = V E V^dagger with eigh under the assumption that H is hermitian, and computing U = V exp(-i dt E) V^dagger.
For non-hermitian H, V V^dagger is no longer the identity, so one would need to compute matrix inverses in Engine._calc_U_bond. Alternatively, and probably better, one could overwrite that function Engine._calc_U_bond to not use the diagonalized H and instead use something like scipy.linalg.expm blockwise, which is already implemented for np_conserved Arrays in expm.
The text was updated successfully, but these errors were encountered:
People start to think about non-hermitian Hamiltonians.
DMRG would need major adjustments for that, but TEBD could be adjusted quite simply.
Like in the imaginary time evolution with hermitian H, it would lead to non-hermitian
U = expm(-i*dt *H_bond)
, but that's probably fine as long as the time step is small enough, and one could do the left-right-sweep instead of the brick-wall pattern to account for that.Right now, the only point where it actually does break down is in generating the correct
U=expm(-i*dt*H)
, because it does that by diagonalizing theH = V E V^dagger
witheigh
under the assumption that H is hermitian, and computingU = V exp(-i dt E) V^dagger
.For non-hermitian H,
V V^dagger
is no longer the identity, so one would need to compute matrix inverses inEngine._calc_U_bond
. Alternatively, and probably better, one could overwrite that functionEngine._calc_U_bond
to not use the diagonalized H and instead use something likescipy.linalg.expm
blockwise, which is already implemented for np_conserved Arrays inexpm
.The text was updated successfully, but these errors were encountered: