Little Group in 2D
Preamble
using LatticeTools
using Formatting
using Plots
function display_matrix(io::IO, matrix::AbstractMatrix; prefix::AbstractString="")
width = ceil(Int, maximum(length("$item")+1 for item in matrix)/4)*4
for row in eachrow(matrix)
for (icol, col) in enumerate(row)
icol == 1 && print(io, prefix)
printfmt(io, "{:>$(width)s}", "$col")
end
println(io)
end
end
display_matrix (generic function with 1 method)
Set up Lattice and Symmetry
unitcell = makeunitcell([1.0 0.0; 0.0 1.0]; SiteType=String);
addsite!(unitcell, "Ox", FractCoord([0,0], [0.5, 0.0]));
addsite!(unitcell, "Oy", FractCoord([0,0], [0.0, 0.5]));
lattice = makelattice(unitcell, [4 0; 0 4]);
tsym = TranslationSymmetry(lattice);
psym = project(PointSymmetryDatabase.get(13), [1 0 0; 0 1 0]);
Little Group
lge = little_group_elements(tsym, 2, psym)
lg = little_group(tsym, 2, psym)
println("Little Group")
println("------------")
display_matrix(stdout, group_multiplication_table(lg))
lg_matrep = psym.matrix_representations[lge]
println("Matrix Representations: $lg_matrep")
Little Group ------------ 1 2 2 1 Matrix Representations: [[1 0; 0 1], [1 0; 0 -1]]
Finding Point Groups Isomorphic to the Little Group
little_symmetry_candidates = Tuple{PointSymmetry, Vector{Int}}[]
for i in 1:32
ps = PointSymmetryDatabase.get(i)
ϕ = group_isomorphism(lg, ps.group)
if !isnothing(ϕ)
push!(little_symmetry_candidates, (ps, ϕ))
end
end
(psym2, ϕ) = first(little_symmetry_candidates)
lg_matrep2 = lg_matrep[ϕ]
println("Matrix Representations (Isomorphic): $lg_matrep2")
Matrix Representations (Isomorphic): [[1 0; 0 1], [1 0; 0 -1]]
Multiplication Tables
println("Parent Point Group")
println("------------------")
display_matrix(stdout, group_multiplication_table(psym2))
println("Little Group")
println("------------")
display_matrix(stdout, group_multiplication_table(lg_matrep))
println("Isomorphic Little Group")
println("-----------------------")
display_matrix(stdout, group_multiplication_table(lg_matrep2))
Parent Point Group ------------------ 1 2 2 1 Little Group ------------ 1 2 2 1 Isomorphic Little Group ----------------------- 1 2 2 1
Irreps and Little Groups
println("Irreps and Little Groups")
println("------------------------")
for tsic in get_irrep_components(tsym)
idx = tsic.irrep_index
kf = tsym.fractional_momenta[idx]
k = lattice.unitcell.reducedreciprocallatticevectors * kf
psym_little = little_symmetry(tsym, idx, psym)
println("- irrep_index: $(idx)")
println(" momentum: $(k)")
println(" little_point_group: { name: \"$(psym_little.hermann_mauguin)\", order: $(group_order(psym_little)) }")
println(" is_psym_compatible: $(iscompatible(tsym, idx, psym))")
println(" is_psym_little_compatible: $(iscompatible(tsym, idx, psym_little))")
end
Irreps and Little Groups ------------------------ - irrep_index: 1 momentum: [0.0, 0.0] little_point_group: { name: "4mm", order: 8 } is_psym_compatible: true is_psym_little_compatible: true - irrep_index: 2 momentum: [0.25, 0.0] little_point_group: { name: "m", order: 2 } is_psym_compatible: false is_psym_little_compatible: true - irrep_index: 3 momentum: [0.5, 0.0] little_point_group: { name: "mm2", order: 4 } is_psym_compatible: false is_psym_little_compatible: true - irrep_index: 4 momentum: [0.75, 0.0] little_point_group: { name: "m", order: 2 } is_psym_compatible: false is_psym_little_compatible: true - irrep_index: 5 momentum: [0.0, 0.25] little_point_group: { name: "m", order: 2 } is_psym_compatible: false is_psym_little_compatible: true - irrep_index: 6 momentum: [0.25, 0.25] little_point_group: { name: "m", order: 2 } is_psym_compatible: false is_psym_little_compatible: true - irrep_index: 7 momentum: [0.5, 0.25] little_point_group: { name: "m", order: 2 } is_psym_compatible: false is_psym_little_compatible: true - irrep_index: 8 momentum: [0.75, 0.25] little_point_group: { name: "m", order: 2 } is_psym_compatible: false is_psym_little_compatible: true - irrep_index: 9 momentum: [0.0, 0.5] little_point_group: { name: "mm2", order: 4 } is_psym_compatible: false is_psym_little_compatible: true - irrep_index: 10 momentum: [0.25, 0.5] little_point_group: { name: "m", order: 2 } is_psym_compatible: false is_psym_little_compatible: true - irrep_index: 11 momentum: [0.5, 0.5] little_point_group: { name: "4mm", order: 8 } is_psym_compatible: true is_psym_little_compatible: true - irrep_index: 12 momentum: [0.75, 0.5] little_point_group: { name: "m", order: 2 } is_psym_compatible: false is_psym_little_compatible: true - irrep_index: 13 momentum: [0.0, 0.75] little_point_group: { name: "m", order: 2 } is_psym_compatible: false is_psym_little_compatible: true - irrep_index: 14 momentum: [0.25, 0.75] little_point_group: { name: "m", order: 2 } is_psym_compatible: false is_psym_little_compatible: true - irrep_index: 15 momentum: [0.5, 0.75] little_point_group: { name: "m", order: 2 } is_psym_compatible: false is_psym_little_compatible: true - irrep_index: 16 momentum: [0.75, 0.75] little_point_group: { name: "m", order: 2 } is_psym_compatible: false is_psym_little_compatible: true
This page was generated using Literate.jl.