ahc

sisl.physics.electron.ahc(bz: BrillouinZone, k_average: bool = True, *, distribution: _TDist = 'step', eigenstate_kwargs={}, apply_kwargs={}, **berry_kwargs) np.ndarray[source]

Electronic anomalous Hall conductivity for a given BrillouinZone integral

\[\sigma_{\alpha\beta} = \frac{-e^2}{\hbar}\int\,\mathrm d\mathbf k\sum_i f_i\Omega_{i,\alpha\beta}(\mathbf k)\]

where \(\Omega_{i,\alpha\beta}\) and \(f_i\) is the Berry curvature and occupation for state \(i\).

The conductivity will be averaged by volume of the periodic unit cell. Hence the unit of ahc depends on the periodic unit cell. See Lattice.volumef for details.

See [14] for details on the implementation.

Parameters:
  • bz (BrillouinZone) – containing the integration grid and has the bz.parent as an instance of Hamiltonian.

  • k_average – if True, the returned quantity is averaged over bz, else all k-point contributions will be collected (in the 1st dimension). Note, for large bz integrations this may explode the memory usage.

  • distribution – An optional distribution enabling one to automatically sum states across occupied/unoccupied states.

  • eigenstate_kwargs – keyword arguments passed directly to the contour.eigenstate method. One should not pass a k or a wrap keyword argument as they are already used.

  • apply_kwargs – keyword arguments passed directly to bz.apply(**apply_kwargs).

  • **berry_kwargs – arguments passed directly to the berry_curvature method.

    Here one can pass derivative_kwargs to pass flags to the derivative method. In particular axes can be used to speedup the calculation (by omitting certain directions).

Examples

To calculate the AHC for a range of energy-points. First create E which is the energy grid. In order for the internal algorithm to be able to broadcast arrays correctly, we have to allow the eigenvalue spectrum to be appended by reshaping.

>>> E = np.linspace(-2, 2, 51)
>>> dist = get_distribution("step", x0=E.reshape(-1, 1))
>>> ahc_cond = ahc(bz, dist)
>>> assert ahc_cond.shape == (3, 3, len(E))

Sometimes one wishes to see the k-resolved AHC. Be aware that AHC requires a dense k-grid, and hence it might require a lot of memory. Here it is calculated at \(E=0\) (default energy reference).

>>> ahc_cond = ahc(bz, k_average=False)
>>> assert ahc_cond.shape == (len(bz), 3, 3)

See also

derivative

method for calculating the exact derivatives

berry_curvature

method used to calculate the Berry curvature for calculating the conductivity

Lattice.volumef

volume calculation of the lattice

shc

spin Hall conductivity

Returns:

ahc (numpy.ndarray) – Anomalous Hall conductivity returned in certain dimensions ahc[:, :]. If sum is False, it will be at least a 3D array with the 3rd dimension having the contribution from state i. If k_average is False, it will have a dimension prepended with k-point resolved AHC. If one passes axes to the derivative_kwargs argument one will get dimensions according to the number of axes requested, by default all axes will be used (even if they are non-periodic). The dtype will be imaginary. When \(D\) is the dimensionality of the system we find the unit to be \(\mathrm S/\mathrm{Ang}^{D-2}\).