Eigenvectors of H(k) for different k values

Hello :) I'm trying to calculate the Berry curvature. Is there a way to get access to the eigenvectors of H (k) for different k values just diagonalizing the following hamiltonian H_k? -----------Code------------------------------------------------------------------------------- wrapped = kwant.wraparound.wraparound(sys).finalized() def ham(sys,k_x,k_y=None, **params): k= momentum_to_lattice(sys, [k_x] if k_y is None else [k_x,k_y]) p=dict(zip(sys._momentum_names,k),**params) return sys.hamiltonian_submatrix(params=p,sparse=False) H_k= ham(wrapped,kx,ky) ------------------------------------------------------------------------------------------------------ Thanks for your time and help! Nayra

Hi Nayra, The Hamiltonian that you compute is a dense numpy array, so to get its eigenvectors you should directly use e.g. numpy.linalg.eigh (which returns eigenvectors and eigenvalues). As a side-remark, the topology course has an implementation of the Berry flux that could be useful as a reference, see over here: https://gitlab.kwant-project.org/qt/topocm/-/blob/master/src/w4_haldane/hald... Best, Anton On Wed, 27 Jan 2021 at 14:04, Nayra Alvarez <nayraa78@gmail.com> wrote:
Hello :)
I'm trying to calculate the Berry curvature. Is there a way to get access to the eigenvectors of H (k) for different k values just diagonalizing the following hamiltonian H_k?
-----------Code------------------------------------------------------------------------------- wrapped = kwant.wraparound.wraparound(sys).finalized()
def ham(sys,k_x,k_y=None, **params): k= momentum_to_lattice(sys, [k_x] if k_y is None else [k_x,k_y]) p=dict(zip(sys._momentum_names,k),**params) return sys.hamiltonian_submatrix(params=p,sparse=False)
H_k= ham(wrapped,kx,ky) ------------------------------------------------------------------------------------------------------ Thanks for your time and help!
Nayra

Dear Anton, Thanks for the reply! I have a last question, I want to calculate the velocity operator, Can I do that just calculating the derivate of the Hamiltonian H(k) using some finite difference? Best, Nayra

Hi Nayra, I usually against using finite difference approximations to functions that are completely under one's control. Right now, there's unfortunately no high level API in Kwant to get the velocity operator, however if you evaluate the Hamiltonian at 4 k-points, you can recover the full hopping, and through it the velocity operator. Best, Anton On Sat, 30 Jan 2021 at 22:30, Nayra Alvarez <nayraa78@gmail.com> wrote:
Dear Anton,
Thanks for the reply!
I have a last question, I want to calculate the velocity operator, Can I do that just calculating the derivate of the Hamiltonian H(k) using some finite difference?
Best,
Nayra

Dear Anton, Just to be sure about my calculations, the velocity operator in the 'x' direction, with the convention that Kwant uses, would be Vop_x(k) = j*Rx* H(k), where H(k) is just the hopping terms? Best, Nayra
participants (2)
-
Anton Akhmerov
-
Nayra Alvarez