pythtb.TBModel.position_hwf#

TBModel.position_hwf(evecs, pos_dir, hwf_evec=False, basis='orbital')[source]#

Eigenvalues and eigenvectors of the position operator

Returns eigenvalues and optionally eigenvectors of the position operator matrix \(X\) in basis of the orbitals or, optionally, of the input wave functions (typically Bloch functions). The returned eigenvectors can be interpreted as linear combinations of the input states evec that have minimal extent (or spread \(\Omega\) in the sense of maximally localized Wannier functions) along direction dir. The eigenvalues are average positions of these localized states.

Parameters:
evecsnp.ndarray

Eigenvectors for which we are computing matrix elements of the position operator. The shape of this array is evecs[band, orbital] if spinful=True and evecs[band, orbital, spin] if spinful=False.

Changed in version 2.0.0: Parameter evec renamed to evecs to clarify that multiple eigenvectors can be passed at once.

pos_dirint

Direction along which we are computing matrix elements. This integer must not be one of the periodic directions since position operator matrix element in that case is not well defined.

Changed in version 2.0.0: Parameter dir renamed to pos_dir to avoid conflict with built-in function dir().

hwf_evecbool, optional

Default is False. If set to True this function will return not only eigenvalues but also eigenvectors of \(X\).

basis{“orbital”, “wavefunction”, “bloch”}, optional

Default is “orbital”. If basis="wavefunction" or basis="bloch", the hybrid Wannier function hwf is returned in the basis of the input wave functions. That is, the elements of hwf[i, j] give the amplitudes of the i-th hybrid Wannier function on the j-th input state. If basis="orbital", the elements of hwf[i, orb] (or hwf[i, orb, spin] if spinful=True) give the amplitudes of the i-th hybrid Wannier function on the specified basis function.

Returns:
hwfcnp.ndarray

Eigenvalues of the position operator matrix \(X\) (also called hybrid Wannier function centers). Length of this vector equals number of bands given in evecs input array. Hybrid Wannier function centers are ordered in ascending order. Note that in general n-th hwfc does not correspond to n-th state in evecs.

hwfnp.ndarray

Eigenvectors of the position operator matrix \(X\). (also called hybrid Wannier functions). These are returned only if parameter hwf_evec = True.

The shape of this array is [h,x] or [h,x,s] depending on value of basis and spinful.

  • If basis is “bloch” then x refers to indices of Bloch states.

  • If basis is “orbital” then x (or x and s) correspond to orbital index (or orbital and spin index if spinful=True).

See also

Hybrid Wannier centers in the Haldane model

For an example.

position_matrix

For the definition of the matrix \(X\).

position_expectation

For the position expectation value.

Notes

Note that these eigenvectors are not maximally localized Wannier functions in the usual sense because they are localized only along one direction. They are also not the average positions of the Bloch states evecs, which are instead computed by position_expectation().

See Fig. 3 in [1] for a discussion of the hybrid Wannier function centers in the context of a Chern insulator.

References

[1]

S. Coh, D. Vanderbilt, Phys. Rev. Lett. 102, 107603 (2009).

Examples

Diagonalizes Hamiltonian at some k-points

>>> evals, evecs = my_model.solve_ham(k_vec, return_eigvecs=True)

Computes hybrid Wannier centers (and functions) for 3-rd kpoint and bottom five bands along first coordinate

>>> hwfc, hwf = my_model.position_hwf(evecs[2, :5], 0, hwf_evec=True, basis="orbital")