pythtb.WFArray.berry_phase#
- WFArray.berry_phase(axis_idx, state_idx=None, berry_evals=False, contin=True)[source]#
Berry phase accumulated along a specified mesh axis.
This routine evaluates the geometric phase accumulated by a set of states transported along a closed loop in parameter space. The phase is computed from the Wilson loop unitary matrix. Explicitly,
\[\phi_{\mu} = -\text{Im} \ln \det W_{\mu}\]where \(W_{\mu}\) (obtained from
wilson_loop()) is the ordered product of the unitary (overlap) links along theaxis_idxdirection \(\mu\) in the mesh.If
berry_evals=True, the function additionally returns the individual multiband phases (“hybrid Wannier centers”) determined from the phases of the eigenvalues of the Wilson loop unitary matrix,\[\phi_{\mu}^{(n)} = -\text{Im} \ln \lambda_{\mu}^{(n)}\]When summed modulo \(2\pi\), the \(\phi_{\mu}^{(n)}\) reproduce the total Berry phase.
- Parameters:
- axis_idxint
Index of the
Meshaxis along which the Berry phase is computed. For a one-dimensionalMesh, this must be 0.Changed in version 2.0.0: Renamed from dir to axis_idx to avoid conflict with built-in Python function dir().
- state_idxint or array-like of int, optional
Band index or list of indices specifying which states to include in the Berry phase calculation. If omitted, all bands are included.
Changed in version 2.0.0: Renamed from
occ. The band indices are not required to be occupied bands only. The default behavior is to include all bands, and the"all"option has been removed.- continbool, optional
Controls branch-continuity of the returned Berry phases. If True (default), phases are chosen to vary smoothly along the orthogonal mesh directions. The reference phase (first string) is constrained to lie in \([-\pi, \pi]\). Subsequent phases are adjusted by adding or subtracting \(2 \pi\) as needed to ensure continuity with the previous string. If False, all phases are constrained to lie in \([-\pi, \pi]\).
- berry_evalsbool, optional
If True, also return the Wilson loop eigen-phases (hybrid Wannier centers). These are branch-fixed following the same rules as above.
- Returns:
- phasenp.ndarray
Total Berry phase along
axis_idx. Scalar when only one axis is present in theMesh, otherwise an array with one less dimension than the originalMesh, corresponding to the Berry phase for each remainingMeshpoints.For example, if
Meshhas axes[i, j, k], andaxis_idx=1, then the returned array has shape[i, k].- evalsnp.ndarray, optional
Only returned if
berry_evals=True. Wilson loop eigen-phases alongaxis_idx. Follows the same indexing convention as above, with an additional trailing index labeling the phases \(\phi_n\).
See also
wilson_loop()- Formalism
Sec. 4.5 for the discretized formula used to compute Berry phase.
- Berry phase and curvature in the Haldane model
For an example
- Graphene Dirac cone Berry phase
For an example
- Three-site Thouless pump
For an example
Notes
berry_evalsare to be distinguished from Wilson loop eigenvalues (as returned inwilson_loop()withwilson_evals=True). Theberry_evalsare the phase arguments ofwilson_evals, not the eigenvalues themselves.For a single 1D string, the Berry phase is always returned in \([-\pi,\pi]\).
For multidimensional meshes, the phase is computed for each 1D string obtained by slicing along
axis_idx; continuity treatment depends oncontin.A manifold specified by
state_idxshould be isolated from other states (no degeneracies with states outside the subset). Ensuring this is the user’s responsibility.For an array of size
Nalongaxis_idx, the Wilson loop is formed from theN-1nearest-neighbor inner products. This gives an open-path phase unless the endpoints correspond to the same physical Hamiltonian; in which case the first state is appended to the end (if endpoints are not already identical) to close the loop (with appropriate PBC phase along k-axes).
Examples
Compute Berry phases along the second mesh axis for the three lowest bands. If
wfhas axes[i, j, k], thenphase[i, k]is the result along the stringwf[i, :, k].>>> phase = wf.berry_phase(axis_idx=1, state_idx=[0, 1, 2])