Bloch

class sisl.physics.Bloch(*bloch)

Bases: object

Bloch’s theorem object containing unfolding factors and unfolding algorithms

This class is a wrapper for expanding any matrix from a smaller matrix cell into a larger, using Bloch’s theorem. The general idea may be summarized in the following equation:

\[\begin{split}\mathbf M_{K}^N =\frac1N \; \sum_{ \substack{j=0\\ k_j=\frac{K+j}N } }^{N-1} \quad \begin{bmatrix} 1 & \cdots & e^{i (1-N)k_j} \\ e^{i k_j} & \cdots & e^{i (2-N)k_j} \\ \vdots & \ddots & \vdots \\ e^{i (N-1)k_j} & \cdots & 1 \end{bmatrix} \otimes \mathbf M_{k_j}^1.\end{split}\]
Parameters

bloch ((3,) int) – Bloch repetitions along each direction

Examples

>>> bloch = Bloch([2, 1, 2])
>>> k_unfold = bloch.unfold_points([0] * 3)
>>> M = [func(*args, k=k) for k in k_unfold]
>>> bloch.unfold(M, k_unfold)

Attributes

__dict__

__doc__

__module__

__weakref__

list of weak references to the object (if defined)

bloch

Number of Bloch expansions along each lattice vector

Methods

__call__(func, k, *args, **kwargs)

Return a functions return values as the Bloch unfolded equivalent according to this object

__delattr__

Implement delattr(self, name).

__dir__

Default dir() implementation.

__eq__

Return self==value.

__format__

Default object formatter.

__ge__

Return self>=value.

__getattribute__

Return getattr(self, name).

__gt__

Return self>value.

__hash__

Return hash(self).

__init__(*bloch)

Create Bloch object

__init_subclass__

This method is called when a class is subclassed.

__le__

Return self<=value.

__len__()

Return unfolded size

__lt__

Return self<value.

__ne__

Return self!=value.

__new__

Create and return a new object.

__reduce__

Helper for pickle.

__reduce_ex__

Helper for pickle.

__repr__

Return repr(self).

__setattr__

Implement setattr(self, name, value).

__sizeof__

Size of object in memory, in bytes.

__str__()

Representation of the Bloch model

__subclasshook__

Abstract classes can override this to customize issubclass().

unfold(M, k_unfold)

Unfold the matrix list of matrices M into a corresponding k-point (unfolding k-points are k_unfold)

unfold_points(k)

Return a list of k-points to be evaluated for this objects unfolding

property bloch

Number of Bloch expansions along each lattice vector

unfold(M, k_unfold)[source]

Unfold the matrix list of matrices M into a corresponding k-point (unfolding k-points are k_unfold)

Parameters
  • M ((:, :, :)) – an *-N-M matrix used for unfolding

  • k_unfold ((:, 3) of float) – unfolding k-points as returned by Bloch.unfold_points

Returns

unfolded matrix of size M[0].shape * k_unfold.shape[0] ** 2

Return type

numpy.ndarray

unfold_points(k)[source]

Return a list of k-points to be evaluated for this objects unfolding

The k-point k is with respect to the unfolded geometry. The return list of k points are the k-points required to be sampled in the folded geometry (this.parent).

Parameters

k ((3,) of float) – k-point evaluation corresponding to the unfolded unit-cell

Returns

a list of np.prod(self.bloch) k-points used for the unfolding

Return type

k_unfold