U(var_num, _eigenvectors, _band, _idx_x, _idx_y, _group_size)[source]

Compute the link variable.

The normalized link variables are defined as

\[\tilde{\mathcal{U}}_\gamma(\mathbf{k}_\alpha) = \frac{\det U_\gamma(\mathbf{k}_\alpha)}{|\det U_\gamma(\mathbf{k}_\alpha)|}, \;\;\; \gamma = \{1, 2\},\]

with link matrices

\[\begin{split}U_\gamma(\mathbf{k}_\alpha) = \begin{pmatrix} \braket{u_1(\mathbf{k}_\alpha)|u_1(\mathbf{k}_\alpha+\hat{\mathbf{e}_\gamma})} & \dots & \braket{u_1(\mathbf{k}_\alpha)|u_M(\mathbf{k}_\alpha+\hat{\mathbf{e}_\gamma})} \\ \vdots & \ddots & \vdots \\ \braket{u_M(\mathbf{k}_\alpha)|u_1(\mathbf{k}_\alpha+\hat{\mathbf{e}_\gamma})} & \dots & \braket{u_M(\mathbf{k}_\alpha)|u_M(\mathbf{k}_\alpha+\hat{\mathbf{e}_\gamma})} \end{pmatrix}.\end{split}\]

Here, \(\mathbf{k}_\alpha\) is the discretized momentum vector, \(\{\hat{\mathbf{e}}_1, \hat{\mathbf{e}}_2\}\) are linearly independent unit vectors in the momentum grid, and \(\ket{u(\mathbf{k}_\alpha)}\) is the eigenvector at momentum \(\mathbf{k}_\alpha\). The link variables are constructed for \(M\) touching bands. [Fukui05]


Input eigenvectors are already normalized from numpy.linalg.eig.

  • var_num ([1, 2]) – The link variable number.

  • _eigenvectors (ndarray) – The array of eigenvectors with dimension (num_bands, num_bands, num_samples, num_samples).

  • _band (int) – The band number. If part of a band group, this must refer to the lowest band of the group.

  • _idx_x (int) – The x-momentum, with respect to the discretized grid.

  • _idx_y (int) – The y-momentum, with respect to the discretized grid.

  • _group_size (int) – The number of bands in the band group.


link_var – The U(1) link variable.

Return type: