shc

sisl.physics.electron.shc(bz, k_average=True, sigma='z', *, J_axes='xyz', distribution='step', eigenstate_kwargs={}, apply_kwargs={}, **berry_kwargs)[source]

Electronic spin Hall conductivity for a given BrillouinZone integral

σαβγ=e2dkifiΩi,αβγ(k)

where Ωi,αβγ and fi are the spin Berry curvature and occupation for state i.

The conductivity will be averaged by volume of the periodic unit cell. See volumef for details.

See [9] and [4] for details on the implementation.

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

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

  • sigma (Union[CartesianAxisStrLiteral, npt.ArrayLike]) – which Pauli matrix is used, alternatively one can pass a custom spin matrix, or the full sigma.

  • J_axes (Union[CartesianAxisStrLiteral, Sequence[CartesianAxisStrLiteral]]) – the direction(s) where the J operator will be applied (defaults to all).

  • distribution (DistributionType) – An optional distribution enabling one to automatically sum states across occupied/unoccupied states. Defaults to the step function.

  • eigenstate_kwargs – keyword arguments passed directly to the bz.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.renew(**apply_kwargs).

  • **berry_kwargs (dict, optional) –

    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).

Return type:

np.ndarray

Examples

For instance, sigma = 'x', J_axes = 'y' will result in Jyσx=12{σ^x,v^y}, and the rest will be the AHC.

>>> cond = shc(bz, J_axes="y")
>>> shc_y_xyz = cond[1]
>>> ahc_xz_xyz = cond[[0, 2]]

Passing an explicit σ matrix is also allowed:

>>> cond = shc(bz)
>>> assert np.allclose(cond, shc(bz, sigma=Spin.Z))

For further examples, please see ahc which is equivalent to this method.

Notes

Original implementation by Armando Pezo.

See also

derivative

method for calculating the exact derivatives

berry_curvature

the actual method used internally

spin_berry_curvature

method used to calculate the Berry-flux for calculating the spin conductivity

volumef

volume calculation of the primary unit cell.

ahc

anomalous Hall conductivity, this is the equivalent method for the SHC.

Returns:

shc – Spin Hall conductivity returned in certain dimensions shc[J_axes, :]. Anomalous Hall conductivity returned in the remaining dimensions shc[!J_axes, :]. 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/SHC. 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 we find the unit to be

  • AHC: shc[!J_axes, :] S/AngD2.

  • SHC: shc[J_axes, :] /eS/AngD2.

Return type:

numpy.ndarray

Parameters: