Symmetry
AbstractSymmetry
LatticeTools.AbstractSymmetry
— TypeAbstractSymmetry{OperationType<:AbstractSpaceSymmetryOperation}
Abstract symmetry whose elements are of type OperationType
.
TranslationSymmetry
LatticeTools.TranslationSymmetry
— TypeTranslationSymmetry
Represent lattice translation symmetry.
julia> TranslationSymmetry([3 0; 0 2])
Fields
hypercube::Hypercube
elements::Vector{TranslationOperation{Int}}
group::FiniteGroup
Additional Fields
generators::Vector{Int}
conjugacy_classes::Vector{Vector{Int}}
character_table::Matrix{ComplexF64}
irreps::Vector{Vector{Matrix{ComplexF64}}}
element_names::Vector{String}
Cache Fields
generator_translations::Matrix{Int}
coordinates::Vector{Vector{Int}}
orthogonal_shape::Vector{Int}
orthogonal_coordinates::Vector{Vector{Int}}
orthogonal_to_coordinate_map::Dict{Vector{Int}, Vector{Int}}
coordinate_to_orthogonal_map::Dict{Vector{Int}, Vector{Int}}
orthogonal_shape_matrix::Matrix{Int}
orthogonal_reduced_reciprocal_shape_matrix::Matrix{Rational{Int}}
fractional_momenta::Vector{Vector{Rational{Int}}}
Constructors
LatticeTools.TranslationSymmetry
— MethodTranslationSymmetry(shape::Matrix{<:Integer}; tol=√ϵ)
LatticeTools.TranslationSymmetry
— MethodTranslationSymmetry(lattice::Lattice; tol=√ϵ)
LatticeTools.TranslationSymmetry
— MethodTranslationSymmetry(hypercube::Hypercube; tol=√ϵ)
LatticeTools.TranslationSymmetry
— MethodTranslationSymmetry(hypercube::Hypercube, generators::AbstractMatrix{<:Integer}; tol::Real=Base.rtoldefault(Float64))
Common Functions for Symmetry
LatticeTools.dimension
— Methoddimension(sym::TranslationSymmetry)
Spatial dimension of the translation symmetry
LatticeTools.elements
— Methodelements(sym::TranslationSymmetry)
Get the elements of the translation symmetry.
LatticeTools.element
— Methodelement(sym::TranslationSymmetry, i)
Get the i
th element of the translation symmetry.
LatticeTools.element_names
— Methodelement_names(sym::TranslationSymmetry)
Get the names of the elements of the translation symmetry.
LatticeTools.element_name
— Methodelement_name(sym::TranslationSymmetry, i)
Get the name of the i
th element of the translation symmetry.
LatticeTools.group
— Methodgroup(sym::TranslationSymmetry)
Group structure of the translation symmetry
LatticeTools.group_order
— Methodgroup_order(sym::TranslationSymmetry, g...)
Group order of the translation symmetry. Calls group_order(group(sym), g...)
LatticeTools.group_multiplication_table
— Methodgroup_multiplication_table(sym::TranslationSymmetry)
Group multiplication table of the translation symmetry. Calls group_multiplication_table(group(sym))
LatticeTools.generator_indices
— Methodgenerator_indices(sym::TranslationSymmetry)
Return indices of the generating translations.
LatticeTools.generator_elements
— Methodgenerator_elements(sym::TranslationSymmetry)
Return the generating translation operations.
LatticeTools.symmetry_name
— Methodsymmetry_name(sym::TranslationSymmetry)
Name of the translation symmetry. Return TranslationSymmetry[(n11,n21)x(n12,n22)]
.
LatticeTools.symmetry_product
— Methodsymmetry_product(tsym::TranslationSymmetry)
Return a binary function which combines two translation operations, with the given periodic boundary condition.
julia> using LatticeTools
julia> tsym = TranslationSymmetry([3 0; 0 4]);
julia> p = symmetry_product(tsym);
julia> p(TranslationOperation([2, 1]), TranslationOperation([2, 3]))
TranslationOperation{Int64}([1, 0])
Irreducible Representations
LatticeTools.character_table
— Methodcharacter_table(sym::TranslationSymmetry)
Return the character table of the translation symmetry.
LatticeTools.irreps
— Methodirreps(sym::TranslationSymmetry)
Return the irreducible representations of the translation symmetry
LatticeTools.irrep
— Methodirrep(sym::TranslationSymmetry, idx)
Return the idx
th irreducible representation of the translation symmetry
LatticeTools.num_irreps
— Methodnum_irreps(sym::TranslationSymmetry)
Return the number of irreducible representations of the translation symmetry, i.e. number of allowed momentum points. Aliases: num_irreps
, numirreps
, irrepcount
LatticeTools.numirreps
— Methodnumirreps(sym::TranslationSymmetry)
Return the number of irreducible representations of the translation symmetry, i.e. number of allowed momentum points. Aliases: num_irreps
, numirreps
, irrepcount
LatticeTools.irrepcount
— Methodirrepcount(sym::TranslationSymmetry)
Return the number of irreducible representations of the translation symmetry, i.e. number of allowed momentum points. Aliases: num_irreps
, numirreps
, irrepcount
LatticeTools.irrep_dimension
— Methodirrep_dimension(sym::TranslationSymmetry, idx::Integer)
Dimension of the idx
th irrep of the translation symmetry, which is always 1 for translation symmetry which is Abelian.
Functions Specific to Translation Symmetry
LatticeTools.fractional_momentum
— Methodfractional_momentum(sym::TranslationSymmetry, g...)
Return the g
th fractional momentum of the translation symmetry.
fractional_momentum(sym, g)
Return the g
th fractional momentum of the normal (translation) symmetry.
Arguments
sym::SymmorphicSymmetry{<:TranslationSymmetry, S2, E}
LatticeTools.isbragg
— Methodisbragg(shape, integer_momentum, identity_translation)
Test whether an orthogonal momentum is compatible with the identity translation. Since identity translation can only be in the trivial representation (otherwise the phases cancel), this function tests whether the phase is unity. The orthogonal momentum is given as an integer vector.
\[ t(\rho) \vert \psi(k) \rangle = exp(i k \cdot \rho ) \vert \psi(k) \rangle = \vert \psi(k) \rangle\]
When the orthogonal shape is [n₁, n₂, ...], orthogonal momentum is chosen from {0, 1, ..., n₁-1} × {0,1, ..., n₂-1} × ....
LatticeTools.isbragg
— Methodisbragg(shape, integer_momentum, identity_translations)
Check for Bragg condition at the integer momentum
for all the identity translations
.
LatticeTools.isbragg
— Methodisbragg(k, t)
Check for Bragg condition at momentum k
and translation t
. Fractional momentum is normalized to 1, i.e. lies within [0, 1)ⁿ
LatticeTools.isbragg
— Methodisbragg(k, translations)
Check for Bragg condition at k
for all the translations.
LatticeTools.isbragg
— Methodisbragg(tsym, tsym_irrep_index, translation)
Check for Bragg condition at momentum given by the tsym_irrep_index
.
LatticeTools.isbragg
— Methodisbragg(tsym, tsym_irrep_index, translations)
Check for Bragg condition at momentum given by the tsym_irrep_index
for all translations.
PointSymmetry
LatticeTools.PointSymmetry
— TypePointSymmetry
Arguments
elements::Vector{PointOperation{Int}}
group::FiniteGroup
generators::Vector{Int}
conjugacy_classes::Vector{Vector{Int}}
character_table::Matrix{ComplexF64}
irreps::Vector{Vector{Matrix{ComplexF64}}}
element_names::Vector{String}
matrix_representations::Vector{Matrix{Int}}
hermann_mauguin::String
schoenflies::String
Common Functions for Symmetry
LatticeTools.dimension
— Methoddimension(sym::PointSymmetry)
Spatial dimension of the point symmetry
LatticeTools.elements
— Methodelements(sym::PointSymmetry)
Return the elements of the point symmetry.
LatticeTools.element
— Methodelement(sym::PointSymmetry, i)
Return the i
th element of the point symmetry.
LatticeTools.element_names
— Methodelement_names(sym::PointSymmetry)
Return the names of the elements of the point symmetry.
LatticeTools.element_name
— Methodelement_name(sym::PointSymmetry, i)
Return the name of the i
th element of the point symmetry.
LatticeTools.group
— Methodgroup(sym::PointSymmetry)
Group structure of the point symmetry
LatticeTools.group_order
— Methodgroup_order(sym::PointSymmetry, g...)
Group order of the point symmetry. Calls group_order(group(sym), g...)
LatticeTools.group_multiplication_table
— Methodgroup_multiplication_table(sym::PointSymmetry)
Group multiplication table of the point symmetry. Calls group_multiplication_table(group(sym))
LatticeTools.generator_indices
— Methodgenerator_indices(sym::PointSymmetry)
Return indices of the generating translations.
LatticeTools.generator_elements
— Methodgenerator_elements(sym::PointSymmetry)
Return the generating point operations.
LatticeTools.symmetry_name
— Methodsymmetry_name(sym::TranslationSymmetry)
Name of the point symmetry. Return TranslationSymmetry[<Hermann Mauguin>]
.
LatticeTools.symmetry_product
— Methodsymmetry_product(psym::PointSymmetry)
Return a function which takes two point operations and combines them. Not really necessary, but is defined for consistency with translation symmetry.
Irreducible Representations
LatticeTools.character_table
— Methodcharacter_table(sym::PointSymmetry)
Return the character table of the point symmetry.
LatticeTools.irreps
— Methodirreps(sym::PointSymmetry)
Return the irreducible representations of the point symmetry.
LatticeTools.irrep
— Methodirrep(sym::PointSymmetry, idx::Integer)
Return the idx
th irreducible representation of the point symmetry.
LatticeTools.num_irreps
— Methodnum_irreps(sym::PointSymmetry)
Return the number of irreducible representations of the point symmetry. Aliases: num_irreps(::PointSymmetry)
, numirreps(::PointSymmetry)
, irrepcount(::PointSymmetry)
LatticeTools.numirreps
— Methodnumirreps(sym::PointSymmetry)
Return the number of irreducible representations of the point symmetry. Aliases: num_irreps(::PointSymmetry)
, numirreps(::PointSymmetry)
, irrepcount(::PointSymmetry)
LatticeTools.irrepcount
— Methodirrepcount(sym::PointSymmetry)
Return the number of irreducible representations of the point symmetry. Aliases: num_irreps(::PointSymmetry)
, numirreps(::PointSymmetry)
, irrepcount(::PointSymmetry)
LatticeTools.irrep_dimension
— Methodirrep_dimension(sym::PointSymmetry, idx::Integer)
Dimension of the idx
th irrep of the point symmetry.
Projection to Subspace
LatticeTools.project
— Methodproject(psym, projection; tol=√ϵ)
Project psym
to a subspace using projection
Arguments
psym::PointSymmetry
projection::AbstractMatrix{<:Integer}
: n × d matrix, where d ≤ n.
Optional Arguments
tol::Real
: singular values of projection must be 1 up to tolerance.
Little Symmetry
LatticeTools.little_group_elements
— Functionlittle_group_elements(tsym, psym)
Return elements of psym
compatible with the translation symmetry tsym
.
little_group_elements(tsym, tsym_irrep_index, psym)
Return elements of psym
compatible with the translation symmetry tsym
at irrep tsym_irrep_index
little_group_elements(tsymbed, psymbed)
little_group_elements(tsymbed, tsym_irrep_index, psymbed)
little_group_elements(tsic, psym)
Return little group elements (i.e. indices) of psym
corresponding to the irrep of translation symmetry specified by tsic
. tsic
and psym
are either
IrrepComponent{TranslationSymmetry}
andPointSymmetry
, orIrrepComponent{SymmetryEmbedding{TranslationSymmetry}}
andSymmetryEmbedding{PointSymmetry}
LatticeTools.little_group
— Functionlittle_group(tsym, tsym_irrep_index, psym)
little_group(tsym, psym, elements)
Generate a little group with given elements. The elements of the little group, which may be sparse, are compressed into consecutive integers.
little_group(tsic, psym)
Return the FiniteGroup
object that corresponds to the little group of psym
at tsic
.
little_group(tsic, psymbed)
Return the FiniteGroup
object that corresponds to the little group of psymbed
at tsic
.
LatticeTools.little_symmetry
— Functionlittle_symmetry(tsym, psym, lg_elements)
Generate a little symmetry. First generate a little group with lg_elements
, look up PointSymmetryDatabase
using the names of the elements, and then checks for group isomorphism.
Arguments
tsym::TranslationSymmetry
: translation symmetrypsym::PointSymmetry
: point symmetrylg_elements::AbstractVector{<:Integer}
: indices of the elements of the little group
little_symmetry(tsym, psym)
little_symmetry(tsym, tsym_irrep_index, psym)
little_symmetry(tsymbed, psymbed)
little_symmetry(tsymbed, tsym_irrep_index, psymbed)
little_symmetry(tsic, psym)
Return the PointSymmetry
object that corresponds to the little group of psym at tsic
.
Compatibility
LatticeTools.iscompatible
— Functioniscompatible(hypercube, operator::TranslationOperation{<:Integer})
iscompatible(hypercube, operator::PointOperation{<:Integer})
iscompatible(hypercube, symmetry::TranslationSymmetry)
iscompatible(hypercube, symmetry::PointSymmetry)
iscompatible(tsym::TranslationSymmetry, pop::PointOperation{<:Integer})
iscompatible(tsym::TranslationSymmetry, psym::PointSymmetry)
iscompatible(psym::PointSymmetry, tsym::TranslationSymmetry)
iscompatible(tsym, tsym_irrep_index, point_operation)
iscompatible(tsym, tsym_irrep_index, psym)
iscompatible(lattice, translation_operation)
iscompatible(lattice, point_operation)
iscompatible(lattice, translation_symmetry)
Test whether lattice and the symmetry are compatible. For translation symmetry, this means that the hypercubic lattice for both are the same.
iscompatible(lattice, point_symmetry)
iscompatible(tsymbed, psymbed)
Check whether the point symmetry embedding psymbed
is compatible with the translation symmetry embedding tsymbed
, i.e. whether they have the same "lattice".
iscompatible(tsymbed, tsym_irrep_index, psymbed)
Check whether the point symmetry embedding psymbed
is compatible with the translation symmetry irrep defined by tsym_irrep_index
and symmetry(tsymbed)
. In other words, the little group elements
iscompatible(tsic, psym)
Test whether the point symmetry psym
is compatible with the irrep component tsic
(i.e. momentum) of the translation symmetry.
iscompatible(lattice::Lattice, ssym::SymmorphicSymmetry)
PointSymmetryDatabase
LatticeTools.PointSymmetryDatabase
— ModulePoint symmetry database module. Provides matrix representations (in units of lattice vectors) and other information about the point symmetries (Hermann-Mauguin notation, names of the elements, etc.), together with character tables and irreducible representations.
LatticeTools.PointSymmetryDatabase.get2d
— Functionget2d(group_index::Integer)
Get the group_index
th two-dimensional point group symmetry. Ref: [https://www.cryst.ehu.es]
LatticeTools.PointSymmetryDatabase.get3d
— Functionget3d(group_index::Integer)
Get the group_index
th three-dimensional point group symmetry. Ref: [https://www.cryst.ehu.es]
LatticeTools.PointSymmetryDatabase.find2d
— Functionfind2d(group_name::AbstractString)
Find a two-dimensional point group symmetry by Hermann-Mauguin name. Ref: https://www.cryst.ehu.es/
find2d(element_names::AbstractVector{<:AbstractString})
Find a two-dimensional point group symmetry by element names. The names must be "simplified", without any subscripts.
LatticeTools.PointSymmetryDatabase.find3d
— Functionfind3d(group_name::AbstractString)
Find a three-dimensional point group symmetry by Hermann-Mauguin name. Ref: https://www.cryst.ehu.es/
find3d(element_names::AbstractVector{<:AbstractString})
Find a three-dimensional point group symmetry by element names. The names must be "simplified", without any subscripts.
IrrepDatabase
LatticeTools.IrrepDatabase
— ModuleIrrep datbase module. Provides irreducible representation data of point symmetries in three dimensions (and therefore two and one).
Symmorphic Symmetry
LatticeTools.SymmorphicSymmetry
— TypeSymmorphicSymmetry{S1, S2, E}
Symmorphic symmetry of symmetry S1
⋊ S2
, whose elements are of type E
. For symmorphic space group, the normal symmetry S1
is translation symmetry, and S2
is point symmetry. S1
and S2
can either be AbstractSymmetry
or SymmetryEmbedding
.
Fields
normal::S1
: normal subgrouprest::S2
elements::Array{E}
element_names::Array{String}
Operators
LatticeTools.:⋊
— Function⋊(normal::AbstractSymmetry, rest::AbstractSymmetry)
Return symmorphic symmetry normal ⋊ rest
.
LatticeTools.:⋉
— Function⋉(rest::AbstractSymmetry, normal::AbstractSymmetry)
Return symmorphic symmetry normal ⋊ rest
.
LatticeTools.symmetry_product
— Methodsymmetry_product(sym)
Arguments
sym::SymmorphicSymmetry{TranslationSymmetry,PointSymmetry,S}) where {S<:SpaceOperation{<:Integer}}
LatticeTools.group
— Methodgroup(sym::SymmorphicSymmetry)
Return FiniteGroup
of the elements.
LatticeTools.group_order
— Methodgroup_order(sym::SymmorphicSymmetry)
Group order of sym
, which is the product of the subgroup and the normal subgroup.
LatticeTools.group_multiplication_table
— Methodgroup_multiplication_table(sym::SymmorphicSymmetry)
Return group multiplication table of sym
.
LatticeTools.elements
— Methodelements(sym::SymmorphicSymmetry)
Return the elements of the symmorphic symmetry.
LatticeTools.element
— Methodelement(sym::SymmorphicSymmetry, g...)
Return the i
th element of the symmorphic symmetry.
LatticeTools.element_names
— Methodelement_names(sym::SymmorphicSymmetry)
Return the element names of the symmorphic symmetry.
LatticeTools.element_name
— Methodelement_name(sym::SymmorphicSymmetry, g...)
Return the name of the g
th element of the symmorphic symmetry.
LatticeTools.fractional_momentum
— Methodfractional_momentum(sym, g)
Return the g
th fractional momentum of the normal (translation) symmetry.
Arguments
sym::SymmorphicSymmetry{<:TranslationSymmetry, S2, E}
LatticeTools.generator_indices
— Methodgenerator_indices(sym::SymmorphicSymmetry)
Return the indices of the generators, which is a union of the generators of normal and rest.
LatticeTools.generator_elements
— Methodgenerator_elements(sym::SymmorphicSymmetry)
Return the generating elements