velocity_matrix

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

Calculate the velocity matrix of a set of states

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

\[\mathbf{v}_{ij\alpha} = \frac1\hbar \langle \psi_j | \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)\).

Although this matrix should be Hermitian it is not checked, and we explicitly calculate all elements.

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.

Returns:
numpy.ndarray

velocity matrixstate with final dimension (state.shape[0], state.shape[0], 3), the velocity unit is Ang/ps. Units may change in future releases.

See also

velocity
only calculate the diagonal components of this matrix
inv_eff_mass_tensor
inverse effective mass tensor