[Wannier] How to calculate current operator
Jonathan Yates
jonathan.yates at materials.ox.ac.uk
Wed Feb 2 00:58:58 CET 2011
On 1 Feb 2011, at 17:24, Saeed Bahramy wrote:
> Dear Wannier90 developers and users,
>
> I'm trying to calculate the current operator Jx using Wannier90 code.
> By definition, I consider Jx to be the first derivative of H(k) with
> respect to kx. Having the real space Wannier hamiltonian H(R), then It
> should be possible to calculate Jx analytically by,
>
> Jx(k)=SUM_R[ i Rx H(R) exp(ik.R)]
>
> were SUM_R indicates the summation over all real space R-vectors. My
> procedure to calculate Jx is as follows,
>
> 1) I read the components of R-vectors (irvec) and H(R) from the
> Wannier90 output file seedname_hr.dat.
>
> 2) I build the R-vector as R=irvec(1,j)*A1+irvec(2,j)*A2+irvec(3,j)A3.
> Here, A1, A2 and A3 are my HEXAGONAL lattice vectors and j is the
> index for the jth R-vector. Having R, I then take its x-component as
> Rx, namely Rx=R(1).
>
> 3) I construct a fine k-mesh, and finally calculate Jx at each k using
> the above equation.
>
> While this procedure seems to be very straightforward, it doesn't
> appear to be giving me correct Jx results.
Saeed,
Maybe you already know this - but the formalism is contained in Physical Review B 75, 195121 (2007).
The formula you have quoted for J (or velocity to keep with the notion of that paper) is not in the basis of eigenstates - so it needs to be rotated into this basis. This will give you the elements of velocity diagonal in the band index. There are additional terms for the interband contributions.
As the diagonal elements of v are simply the band gradients you could use this to test your implementation (ie compare against numerical differentiation of the wannier interpolated bands along some path in the BZ)
Jonathan
--
Department of Materials, University of Oxford, Parks Road, Oxford, OX1 3PH, UK
tel: +44 (0)1865 612797 http://users.ox.ac.uk/~oums0549/
More information about the Wannier
mailing list