pythtb.TBModel.local_chern_marker#

TBModel.local_chern_marker(occ_idxs=None, return_bulk_avg=False, trim_cells=4, **params)[source]#

Bianco-Resta local Chern marker.

The local Chern marker is a real-space diagnostic of topology, assigning to each orbital/site a scalar quantity that reflects the topological character of the occupied bands. It is defined as

\[C(\boldsymbol{\tau}_i) = \frac{4\pi}{{A_\text{cell}}}\, \mathrm{Im} \; \langle \phi_i | \mathcal{P} \left[ X,\mathcal{P} \right]\left[Y,\mathcal{P}\right] | \phi_i \rangle ,\]

where \(\mathcal{P}\) is the projector onto the occupied subspace, \(X,Y\) are the single-particle position operators and \(|\phi_i\rangle\) is the orbital basis state at site \(\boldsymbol{\tau}_i\).

This quantity is intensive: when normalized by the unit-cell volume, its spatial average converges to the total Chern number of the occupied manifold in the crystalline case [1].

Added in version 2.0.0.

Parameters:
occ_idxsarray-like, optional

Indices of the occupied bands. If none are provided, the lower half bands are considered occupied.

return_bulk_avgbool, optional

If True, also returns the bulk-averaged Chern number computed from the local Chern marker. Default is False.

trim_cellsint, optional

Number of unit cells to trim from each edge when computing the bulk-averaged Chern number. Default is 4.

Returns:
C_localnp.ndarray of shape (norb,)

Per-site local Chern marker.

C_bulk_avgfloat, optional

Bulk-averaged Chern number computed from local Chern marker. Returned only if return_bulk_avg is True.

See also

chern_number

Computes the total Chern number via Berry curvature integration.

Bianco-Resta Local Chern marker

Jupyter notebook tutorial on local Chern marker.

References

[1]

R. Bianco and R. Resta, “Mapping topological order in coordinate space”, Phys. Rev. B 84, 241106(R) (2011).