principia_materia.translation_group.lattice_ftg module
- class principia_materia.translation_group.lattice_ftg.LatticeFTG(vec, supa, pg=None, strict_symmetry=True, tol=1e-06)
Bases:
Lattice
A finite translation group (i.e. supercell) of the primitive lattice with point symmetry.
- Parameters:
vec (array of float, shape(dim, dim)) – The lattice vectors, in row convention.
supa (array of int, shape(dim, dim)) – Super lattice matrix.
pg (str or a PointGroup object) – The point group of the lattice.
strict_symmetry (bool, optional, default to True) – If True, lattice points must rotate into a point that also fits in the cell.
tol (float, optional, default to 1.0E-6) – Tolerance threshold.
- copy()
Return a copy of the object.
- Returns:
new – A copy of the object itself.
- Return type:
- find_irreducible_lattice_points()
Find the irreducible set of lattice points under the given symmetry.
- rotated_lattice_points
Dictionary of how what each lattice points rotate into for each group operation. (Indices)
- Type:
dict with str as keys and array of int as values
- irreducible_lattice_points_trans
The name of the operation takes the lattice points at its index to one of the irreducible lattice points.
- Type:
array of str, shape(multiplicity)
- irreducible_lattice_points_index_map
The corresponding irreducible lattice point index in the lattice point list for each lattice point.
- Type:
array of int, shape(multiplicity)
- irreducible_lattice_points_index
Index of irreducible lattice points in the lattice points list.
- Type:
array of int, shape(nilp)
- irreducible_lattice_points_map
The corresponding irreducible lattice point index in the irreducible lattice point list for each lattice point.
- Type:
array of int, shape(multiplicity)
- irreducible_lattice_points_mult
The multiplicity of each irreducible lattice point.
- Type:
array of int, shape(nilp)
- irreducible_lattice_points
The list of irreducible lattice point.
- Type:
array of array of int, shape(nilp, dim)
- \* nilp=number of irreducible lattice points
- get_index(points)
Find the index of a given lattice point or a list of lattice points.
The algorithm is descrived in method
create_mesh
. For each lattice point, instead of using the ordinary indexing of a list, this algorithm only has the time complexity of O(1), which is much more efficient when used.In order to compute the index, the a tranformation matrix \(\textrm{H}_p\) and an index weight vector \(\textrm{IW}\)
\[ \begin{align}\begin{aligned}& H_{p, (j, i)} = H^{-1}_{(j, i)} \times H_{(i, i)} \forall i \in [1, d], j \in [1, i)\\& \textrm{IW}_{i} = \prod_{j=1}^{i} H_{(j, j)}\end{aligned}\end{align} \]Then the index of any given point in the supercell can be computed directly:
\[& \textrm{index}_{t} = ((t \cdot L + \textrm{floor}(t \cdot L \cdot H_p)) \mod \textrm{diag}(H)) \cdot \textrm{IW}\]- Parameters:
points (array of integers, shape(dim) or shape(N, dim)) – Points to compute indices.
- property invsupa
The inverse of the supercell matrix.
- property multiplicity
The multiplicity of the supercell.
- set_lattice_points()
Find t-points that fit in the supercell.
- set_lattice_points_diagonal()
Find the lattice points that fit in the given diagonal supercell.
Same as set_lattice_points_generic, except for diagonal supercells it can be simplified.
- set_lattice_points_generic()
Find the lattice points that fit in the given supercell.
It uses the algorithm implemented in
get_lattice_points
function (described in Phys. Rev. B 100, 014303 (2019)). And meanwhile, prepares the matrices to determine the index of each lattice point using the inverse operation of the above metioned function.- lattice_points
Lattice points of the super cell (i.e. FTG).
- Type:
array of int, shape(self.multiplicity, 3)
- property supa
The supercell matrix.
- property supa_is_diagonal
Whether the supercell is a diagonal matrix.
- to_dict()
Return a dictionary containing key information about the LatticeFTG object.
- principia_materia.translation_group.lattice_ftg.get_lattice_ftg_io_wrapper(title='LatticeFTG')
YAML data wrapper for LatticeFTG class.
- principia_materia.translation_group.lattice_ftg.get_lattice_points(supa, decimals=6)
Find t-points using Hermite Normal Form (HNF) of the \(S_BZ\).
The algorithm is described in paper:
We can decompose the supercell matrix into its HNF:
\[ \begin{align}\begin{aligned}& S_BZ = HL^{-1}\\& S_BZ^{-1} = LH^{-1}\end{aligned}\end{align} \]Then we have the condition of the t-points that fit in the supercell:
\[ \begin{align}\begin{aligned}& 0 <= t S_BZ^{-1} e_j < 1\\& 0 <= t L H^{-1} e_j < 1\end{aligned}\end{align} \]If we let \(t' = tL\), we can rewrite the condition
\[0 <= t' H^{-1} e_j < 1\], and we can solve for \(t'\) and recover \(t\) afterwards:
\[t = t' L^{-1}\]- Parameters:
supa (array of int, shape(dim, dim)) – Supercell matrix.
decimals (int, optional, default to 6) – The decimal points to round