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.