shc
- sisl.physics.electron.shc(bz: BrillouinZone, k_average: bool = True, sigma: CartesianAxisStrLiteral | npt.ArrayLike = 'z', *, J_axes: CartesianAxisStrLiteral | Sequence[CartesianAxisStrLiteral] = 'xyz', distribution: _TDist = 'step', eigenstate_kwargs={}, apply_kwargs={}, **berry_kwargs) np.ndarray [source]
Electronic spin Hall conductivity for a given BrillouinZone integral
\[\sigma^\gamma_{\alpha\beta} = \frac{-e^2}{\hbar}\int\,\mathrm d\mathbf k \sum_i f_i\boldsymbol\Omega^\gamma_{i,\alpha\beta}(\mathbf k)\]where \(\boldsymbol\Omega^\gamma_{i,\alpha\beta}\) and \(f_i\) are the spin Berry curvature and occupation for state \(i\).
The conductivity will be averaged by volume of the periodic unit cell. See
Lattice.volumef
for details.See [9] and [4] for details on the implementation.
- Parameters:
bz – 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. Note, for large bz integrations this may explode the memory usage.
sigma – which Pauli matrix is used, alternatively one can pass a custom spin matrix, or the full sigma.
J_axes – the direction(s) where the \(J\) operator will be applied (defaults to all).
distribution – 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 ak
or awrap
keyword argument as they are already used.apply_kwargs – keyword arguments passed directly to
bz.apply(**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).
Examples
For instance,
sigma = 'x', J_axes = 'y'
will result in \(J^{\sigma^x}_y=\dfrac12\{\hat{\sigma}^x, \hat{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 \(\sigma\) 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
Lattice.volumef
volume calculation of the primary unit cell.
ahc
anomalous Hall conductivity, this is the equivalent method for the SHC.
- Returns:
shc (
numpy.ndarray
) – Spin Hall conductivity returned in certain dimensionsshc[J_axes, :]
. Anomalous Hall conductivity returned in the remaining dimensionsshc[!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 beAHC:
shc[!J_axes, :]
\(S/\mathrm{Ang}^{D-2}\).SHC:
shc[J_axes, :]
\(\hbar/e S/\mathrm{Ang}^{D-2}\).