Dispersion

Diagonalization on paths and meshes.

elphmod.dispersion.band_order(v, V, by_mean=True, dv=inf, eps=1e-10, status=True)[source]

Sort bands by overlap of eigenvectors at neighboring k points.

Parameters:
vndarray

List of eigenvalues.

Vndarray

Corresponding list of eigenvectors.

by_meanbool

Sort disentangled bands by average frequency?

dvfloat

Maximum allowed difference between consecutive eigenvalues of the same band after disentanglement.

epsfloat

Maximum difference between eigenvalues considered degenerate.

statusbool

Show progress bar?

Returns:
ndarray

List of band indices that sort eigenstates.

elphmod.dispersion.dispersion(matrix, k, angle=60, vectors=False, gauge=False, rotate=False, order=False, hermitian=True, broadcast=True, shared_memory=False, **order_kwargs)[source]

Diagonalize Hamiltonian or dynamical matrix for given k points.

Parameters:
matrixfunction

Matrix to be diagonalized as a function of k in crystal coordinates with period \(2 \pi\).

kndarray

k points in crystal coordinates with period \(2 \pi\). Wave-vector components are stored along the last axis; the leading axes describe the mesh. The shapes of matrix and k together determine the shape of the results.

anglefloat

Angle between the axes of the reciprocal lattice.

vectorsbool

Return eigenvectors?

gaugebool

Choose largest element of each eigenvector to be real? Not stable!

rotatebool

Align (phonon) eigenvectors with wave vector k via in-plane rotation. This is experimental and supposed to support the band-order algorithm.

orderbool

Order/disentangle bands via their k-local character? Depending on the topology of the band structure, this may not be possible. Adjacent points in k must be adjacent in the Brillouin zone too.

hermitianbool

Assume matrix to be Hermitian, i.e., calculate real eigenvalues?

broadcastbool

Broadcast result from rank 0 to all processes?

shared_memorybool

Store results in shared memory?

**order_kwargs

Keyword arguments passed to band_order().

Returns:
ndarray

Eigenvalues for the given k points.

ndarray, optional

Corresponding eigenvectors.

ndarray, optional

Indices which have been used to order the bands.

elphmod.dispersion.dispersion_full(matrix, size, angle=60, vectors=False, gauge=False, rotate=False, order=False, hermitian=True, broadcast=True, shared_memory=False, **order_kwargs)[source]

Diagonalize Hamiltonian or dynamical matrix on uniform k-point mesh.

elphmod.dispersion.dispersion_full_nosym(matrix, size, vectors=False, order=False, *args, **kwargs)[source]

Diagonalize Hamiltonian or dynamical matrix on uniform k-point mesh.

Use this routine to get eigenvectors less symmetric than the eigenvalues!

elphmod.dispersion.map_dispersions(V1, V2)[source]

Map two similar arrays of eigenvectors onto each other.

elphmod.dispersion.sample(matrix, k, **kwargs)[source]

Calculate Hamiltonian or dynamical matrix for given k points.

Parameters:
matrixfunction

Matrix as a function of k.

kndarray

k points.

**kwargs

Keyword arguments passed to matrix.

elphmod.dispersion.unfolding_weights(k, R, U0, U, blocks0=None, blocks=None, sgn=-1)[source]

Calculate weights for “unfolding” of supercell dispersions.

Parameters:
klist of d-tuples

k points in arbitrary representation.

Rlist of d-tuples

Positions of the unit cells in the supercell. The representation must be compatible with the k points: If k is given in crystal coordinates with a period of \(2 \pi\), R must be given in crystal coordinates with a period of 1. k and R can also be defined in Cartesian coordinates.

U0: ndarray

Eigenvectors of the symmetric system.

U: ndarray

Eigenvectors of the supercell system.

blocks0list of indexing objects, optional

Mapping from indices of R to slices of U0. By default, all orbitals are selected.

blockslist of indexing objects, optional

Mapping from indices of R to slices of U. By default, it is assumed that the orbitals are grouped into blocks corresponding to unit cells. Within the blocks, the order of the orbitals is as in U0. The order of the blocks is as in R.

sgnint

Sign convention for Fourier transform in tight-binding model. The default sign -1 is suitable for data from Wannier90 as provided by elphmod.el.Model.H(). Other conventions require +1.

Returns:
ndarray

Weights of the supercell states.