pythtb.WFArray.berry_curvature#

WFArray.berry_curvature(plane=None, state_idx=None, non_abelian=False, return_flux=False)[source]#

Berry curvature tensor using the Fukui-Hatsugai-Suzuki plaquette method.

The Berry curvature tensor \(\Omega_{\mu\nu}(\mathbf{k})\) is computed using a discretized formula based on the Fukui-Hatsugai-Suzuki (FHS) plaquette-based method [1]. The curvature is approximated from the Berry flux (computed in berry_flux()) by dividing the flux by the (presumed uniform) area of the plaquette in parameter space,

\[\Omega_{\mu\nu}(\mathbf{k}) \approx \frac{\mathcal{F}_{\mu\nu}(\mathbf{k})}{A_{\mu\nu}},\]

where \(A_{\mu\nu}\) is the area (in Cartesian units) of the plaquette in parameter space.

The tensor is either defined is a matrix-valued quantity (non-Abelian case) or as a scalar quantity obtained by tracing over the band indices (Abelian case).

Added in version 2.0.0.

Parameters:
plane(2,) array_like, optional

Array or tuple of two indices defining the axes in the WFArray mesh which the Berry flux is computed over. By default, all directions are considered, and the full Berry flux tensor is returned.

state_idxint or array_like of int, optional

Optional index or array of indices defining the states to be included in the subsequent calculations, typically the indices of bands considered occupied. If not specified, or None, all bands are included.

non_abelianbool, optional

If True then the non-Abelian Berry flux tensor is computed defined as a matrix-valued quantity. If False (default) then the Berry flux is computed as a scalar quantity by tracing over the band indices.

return_fluxbool, optional

If True, the function returns a tuple containing both the Berry curvature and the Berry flux tensors. If False (default), only the Berry curvature tensor is returned.

Returns:
berry_curvnp.ndarray

Berry curvature tensor with shape depending on input parameters. Shape is

  • non_abelian=True, plane=None: (naxes, naxes, *mesh_shape, nstates, nstates),

  • non_abelian=True, plane=(mu, nu): (*mesh_shape, nstates, nstates),

  • non_abelian=False, plane=None: (naxes, naxes, *mesh_shape),

  • non_abelian=False, plane=(mu, nu): (*mesh_shape,),

berry_fluxnp.ndarray, optional

Berry flux tensor with shape depending on input parameters. Returned only if return_flux=True. Shape is same as that of berry_curv.

See also

berry_flux()

For details and formalism on the Berry flux tensor.

Notes

  • The method requires at least a two-dimensional mesh in the combined adiabatic space (momentum + adiabatic parameters). Thus, WFArray.naxes >= 2.

  • The last point along closed or non-periodic axes is trimmed from the curvature array to avoid overcounting, since it is equivalent to the first point.

References

[1]

T. Fukui, Y. Hatsugai, and H. Suzuki, J. Phys. Soc. Jpn. 74, 1674 (2005).