velocity

sisl.physics.electron.velocity(state, dHk, energy=None, dSk=None, degenerate=None, project=False)[source]

Calculate the velocity of a set of states

These are calculated using the analytic expression (\(\alpha\) corresponding to the Cartesian directions):

\[\mathbf{v}_{i\alpha} = \frac1\hbar \langle \psi_i | \frac{\partial}{\partial\mathbf k}_\alpha \mathbf H(\mathbf k) | \psi_i \rangle\]

In case of non-orthogonal basis the equations substitutes \(\mathbf H(\mathbf k)\) by \(\mathbf H(\mathbf k) - \epsilon_i\mathbf S(\mathbf k)\).

The velocities calculated are without the Berry curvature contributions.

In case the user requests to project the velocities (project is True) the equation follows that of PDOS with the same changes. In case of non-colinear spin the velocities will be returned also for each spin-direction.

Parameters
  • state (array_like) – vectors describing the electronic states, 2nd dimension contains the states. In case of degenerate states the vectors may be rotated upon return.

  • dHk (list of array_like) – Hamiltonian derivative with respect to \(\mathbf k\). This needs to be a tuple or list of the Hamiltonian derivative along the 3 Cartesian directions.

  • energy (array_like, optional) – energies of the states. Required for non-orthogonal basis together with dSk. In case of degenerate states the eigenvalues of the states will be averaged in the degenerate sub-space.

  • dSk (list of array_like, optional) – \(\delta \mathbf S_k\) matrix required for non-orthogonal basis. This and energy must both be provided in a non-orthogonal basis (otherwise the results will be wrong). Same derivative as dHk

  • degenerate (list of array_like, optional) – a list containing the indices of degenerate states. In that case a prior diagonalization is required to decouple them. This is done 3 times along each of the Cartesian directions.

  • project (bool, optional) – whether the velocities will be returned projected per orbital

Returns

  • numpy.ndarray – if project is false, velocities per state with final dimension (state.shape[0], 3), the velocity unit is Ang/ps. Units may change in future releases.

  • numpy.ndarray – if project is true, velocities per state with final dimension (state.shape[0], state.shape[1], 3), the velocity unit is Ang/ps. Units may change in future releases.