diff --git a/build/write_littlegroup_irreps.jl b/build/write_littlegroup_irreps.jl index 2f7dfd29..3d8f25d9 100644 --- a/build/write_littlegroup_irreps.jl +++ b/build/write_littlegroup_irreps.jl @@ -118,9 +118,17 @@ foreach(jldfile -> close(jldfile), values(Crystalline.LGIRREPS_JLDFILES)) foreach(jldfile -> close(jldfile), values(Crystalline.LGS_JLDFILES)) # 3D (from ISOTROPY) -include("build/ParseIsotropy.jl") # load the ParseIsotropy module which -using Main.ParseIsotropy # exports `parselittlegroupirreps` -__write_littlegroupirreps(parselittlegroupirreps()) +include(joinpath((@__DIR__), "ParseIsotropy.jl")) # load the ParseIsotropy module +using Main.ParseIsotropy # (exports `parselittlegroupirreps`) +LGIRS_3D = parselittlegroupirreps() +# ... ISOTROPY is missing several irreps; we bring those in below, obtained from manual +# transcription of irreps from Bilbao; script below defines `LGIRS_add` which stores these +# manual additions (a Dict with `sgnum` keys) +include(joinpath((@__DIR__), "..", "data/lgirreps/manual_lgirrep_additions.jl")) +for (sgnum, lgirsd_add) in LGIRS_add # merge Bilbao additions with ISOTROPY irreps + merge!(LGIRS_3D[sgnum], lgirsd_add) +end +__write_littlegroupirreps(LGIRS_3D) # 2D (from point group matching) __write_littlegroupirreps(LGIRS_2D′) diff --git a/data/lgirreps/3d/irreps_data.jld2 b/data/lgirreps/3d/irreps_data.jld2 index 1084101f..dd9b9a5e 100644 Binary files a/data/lgirreps/3d/irreps_data.jld2 and b/data/lgirreps/3d/irreps_data.jld2 differ diff --git a/data/lgirreps/3d/littlegroups_data.jld2 b/data/lgirreps/3d/littlegroups_data.jld2 index b78a9e85..ceddcfab 100644 Binary files a/data/lgirreps/3d/littlegroups_data.jld2 and b/data/lgirreps/3d/littlegroups_data.jld2 differ diff --git a/data/lgirreps/manual_lgirrep_additions.jl b/data/lgirreps/manual_lgirrep_additions.jl new file mode 100644 index 00000000..bf528aaf --- /dev/null +++ b/data/lgirreps/manual_lgirrep_additions.jl @@ -0,0 +1,644 @@ +# The goal of this script is to tabulate and construct the irreps in Φ-Ω (basic domain, Ω; +# representation domain, Φ) that are missing from ISOTROPY but still feature in the bandreps +# from Bilbao. By manual comparison, we found that there are 145 such irreps, across 20 +# space groups, namely: +# ┌───────┬─────────────────────────────────────────────────────────────────────────────┬───────────────┬────────────────────────────────┬──────────────┐ +# │ │ Missing │ Missing │ [NS≡nonsymmorph; S≡symmorph] │ Has fragile │ +# │ SGs │ LGIrrep labels │ KVec labels │ Match method │ phases? │ +# │───────┼─────────────────────────────────────────────────────────────────────────────┼───────────────┼────────────────────────────────┼──────────────│ +# │ 23 │ WA₁, WA₂, WA₃, WA₄ │ WA │ S: MonoOrthTetraCubic ┐ │ ÷ │ +# │ 24 │ WA₁ │ WA │ NS: Inherits from └ 23 │ ÷ │ +# │ 82 │ PA₁, PA₂, PA₃, PA₄ │ PA │ S: MonoOrthTetraCubic │ │ +# │ 121 │ PA₁, PA₂, PA₃, PA₄, PA₅ │ PA │ S: MonoOrthTetraCubic ┐ │ │ +# │ 122 │ PA₁, PA₂ │ PA │ NS: Inherits from └ 121 │ │ +# │ 143 │ HA₁, HA₂, HA₃, KA₁, KA₂, KA₃, PA₁, PA₂, PA₃ │ HA, KA, PA │ S: TriHex │ │ +# │ 144 │ HA₁, HA₂, HA₃, KA₁, KA₂, KA₃, PA₁, PA₂, PA₃ │ HA, KA, PA │ NS: Orphan (type b) ┐ │ ÷ │ +# │ 145 │ HA₁, HA₂, HA₃, KA₁, KA₂, KA₃, PA₁, PA₂, PA₃ │ HA, KA, PA │ NS: Orphan (type b) ┘ │ ÷ │ +# │ 150 │ HA₁, HA₂, HA₃, KA₁, KA₂, KA₃, PA₁, PA₂, PA₃ │ HA, KA, PA │ S: TriHex │ │ +# │ 152 │ HA₁, HA₂, HA₃, KA₁, KA₂, KA₃, PA₁, PA₂, PA₃ │ HA, KA, PA │ NS: Orphan (type b) ┐ │ ÷ │ +# │ 154 │ HA₁, HA₂, HA₃, KA₁, KA₂, KA₃, PA₁, PA₂, PA₃ │ HA, KA, PA │ NS: Orphan (type b) ┘ │ │ +# │ 157 │ HA₁, HA₂, HA₃, KA₁, KA₂, KA₃, PA₁, PA₂, PA₃ │ HA, KA, PA │ S: TriHex ───────┐ │ │ +# │ 159 │ HA₁, HA₂, HA₃, KA₁, KA₂, KA₃, PA₁, PA₂, PA₃ │ HA, KA, PA │ NS: Inherits from └ 157 │ │ +# │ 174 │ HA₁, HA₂, HA₃, HA₄, HA₅, HA₆, KA₁, KA₂, KA₃, KA₄, KA₅, KA₆, PA₁, PA₂, PA₃ │ HA, KA, PA │ S: TriHex │ │ +# │ 189 │ HA₁, HA₂, HA₃, HA₄, HA₅, HA₆, KA₁, KA₂, KA₃, KA₄, KA₅, KA₆, PA₁, PA₂, PA₃ │ HA, KA, PA │ S: TriHex ───────┐ │ │ +# │ 190 │ HA₁, HA₂, HA₃, KA₁, KA₂, KA₃, KA₄, KA₅, KA₆, PA₁, PA₂, PA₃ │ HA, KA, PA │ NS: Inherits from └ 189 │ │ +# │ 197 │ PA₁, PA₂, PA₃, PA₄ │ PA │ S: MonoOrthTetraCubic ┐ │ ÷ │ +# │ 199 │ PA₁, PA₂, PA₃ │ PA │ NS: Inherits from └ 197 │ ÷ │ +# │ 217 │ PA₁, PA₂, PA₃, PA₄, PA₅ │ PA │ S: MonoOrthTetraCubic ┐ │ │ +# │ 220 │ PA₁, PA₂, PA₃ │ PA │ NS: Inherits from └ 217 │ │ +# └───────┴─────────────────────────────────────────────────────────────────────────────┴───────────────┴────────────────────────────────┴──────────────┘ +# In principle, these irreps _could_ be constructed from the existing irreps in ISOTROPY by +# suitable transformations, as described by B&C (e.g. near p. 414) or CDML (p. 69-73). +# Unfortunately, we have thus far not managed to implement that scheme correctly. Instead, +# we here just go the brute-force path and tabulate the things we need manually. +# NB: Of the above space groups, only SG 82 has nontrivial symmetry indicator for bosons +# with TR. Most of the space groups, however, can support symmetry-indicated fragile +# topology (÷ means 'cannot'). + +# ======================================================================================== # +# ================================== UTILITY FUNCTIONS =================================== # +# ======================================================================================== # + +using Crystalline + +# manually converting +# https://www.cryst.ehu.es/cgi-bin/cryst/programs/representations_out.pl +# to our own data format for the missing k-points listed in +# src/special_representation_domain_kpoints.jl +# TODO: This needs to be merged into the special-points branch before master + +function build_lgirrep_with_type(cdml, lg, Psτs, sgops) + # input handling + if Psτs isa Vector # assume zero-τ factors + Ps = complex.(float.(Psτs)) + τs = nothing + elseif Psτs isa Tuple{<:Any, <:Any} # nonzero τ-factors; input as 2-tuple + Ps = complex.(float.(Psτs[1])) + τs = Psτs[2] + else + throw("Unexpected input format of Psτs") + end + # convert scalar irreps (numbers) to 1×1 matrices + if eltype(Ps) <: Number + Ps = fill.(Ps, 1, 1) + end + + lgir = LGIrrep{3}(cdml, lg, Ps, τs, REAL) # place-holder `REAL` reality type + reality = calc_reality(lgir, sgops) + lgir = LGIrrep{3}(cdml, lg, Ps, τs, reality) # update reality type +end + +function prepare_lg_and_sgops(sgnum, kv, klab, ops) + lg = LittleGroup{3}(sgnum, kv, klab, ops) + sgops = reduce_ops(spacegroup(sgnum, Val(3)), centering(sgnum, 3), true) # for herrring + return lg, sgops +end + +function assemble_lgirreps(sgnum, kv, klab, lgops, Psτs) + lg, sgops = prepare_lg_and_sgops(sgnum, kv, klab, lgops) + cdmls = Ref(klab) .* string.(1:length(Psτs)) + lgirs = build_lgirrep_with_type.(cdmls, Ref(lg), Psτs, Ref(sgops)) +end + +if !isdefined(Main, :cispi) + cispi(x) = cis(π*x) +end + + +# ======================================================================================== # +# =========================== MANUALLY COPIED IRREP DATA BELOW =========================== # +# ======================================================================================== # + +# "preallocate" a storage dict +sgnums = [23, 24, 82, 121, 122, 143, 144, 145, 150, 152, 154, 157, 159, 174, 189, 190, 197, + 199, 217, 220] +LGIRS_add = Dict(sgnum=>Dict{String, Vector{LGIrrep{3}}}() for sgnum in sgnums) + +# ========= 23 ========= +sgnum = 23 +# WA₁, WA₂, WA₃, WA₄ +klab = "WA" +kv = KVec(-1/2,-1/2,-1/2) +lgops = SymOperation{3}.(["x,y,z", "x,-y,-z", "-x,y,-z", "-x,-y,z"]) # 1, 2₁₀₀, 2₀₁₀, 2₀₀₁ + +# listed first across irrep (ascending, e.g. WA1, WA2, WA3, WA4 here) then across lgops +Psτs = [[1, 1, 1, 1], # Ps = matrices + # nonzero τs (translations) can be specified by entering a 2-tuple of Ps and τs instead of a vector of Ps + [1, -1, -1, 1], + [1, 1, -1, -1], + [1, -1, 1, -1],] +LGIRS_add[sgnum][klab] = assemble_lgirreps(sgnum, kv, klab, lgops, Psτs) + + +# ========= 24 ========= +sgnum = 24 +# WA₁ +klab = "WA" +kv = KVec(-1/2,-1/2,-1/2) +lgops = SymOperation{3}.(["x,y,z", "x,-y,-z+1/2", "-x+1/2,y,-z", "-x,-y+1/2,z"]) # 1, {2₁₀₀|00½}, {2₀₁₀|½00}, {2₀₀₁|0½0} +Psτs = [[[1 0; 0 1], [1 0; 0 -1], [0 -im; im 0], [0 1; 1 0]],] +LGIRS_add[sgnum][klab] = assemble_lgirreps(sgnum, kv, klab, lgops, Psτs) + + +# ========= 82 ========= +sgnum = 82 +# PA₁, PA₂, PA₃, PA₄ +klab = "PA" +kv = KVec(-1/2,-1/2,-1/2) +lgops = SymOperation{3}.(["x,y,z", "-x,-y,z", "y,-x,-z", "-y,x,-z"]) # 1, 2₀₀₁, -4⁺₀₀₁, -4⁻₀₀₁ +Psτs = [[1, 1, 1, 1], + [1, 1, -1, -1], + [1, -1, -im, im], + [1, -1, im, -im],] +LGIRS_add[sgnum][klab] = assemble_lgirreps(sgnum, kv, klab, lgops, Psτs) + + +# ========= 121 ========= +sgnum = 121 +# PA₁, PA₂, PA₃, PA₄, PA₅ +klab = "PA" +kv = KVec(-1/2,-1/2,-1/2) +lgops = SymOperation{3}.(["x,y,z", "-x,-y,z", "y,-x,-z", "-y,x,-z", "-x,y,-z", "x,-y,-z", "-y,-x,z", "y,x,z"]) + # 1, 2₀₀₁, -4⁺₀₀₁, -4⁻₀₀₁, 2₀₁₀, 2₁₀₀, m₁₁₀, m₁₋₁₀ +Psτs = [[1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, -1, -1, 1, 1, -1, -1], + [1, 1, -1, -1, -1, -1, 1, 1], + [1, 1, 1, 1, -1, -1, -1, -1], + [[1 0; 0 1], [-1 0; 0 -1], [0 -1; 1 0], [0 1; -1 0], [0 1; 1 0], [0 -1; -1 0], [1 0; 0 -1], [-1 0; 0 1]],] +LGIRS_add[sgnum][klab] = assemble_lgirreps(sgnum, kv, klab, lgops, Psτs) + +# ========= 122 ========= +sgnum = 122 +# PA₁, PA₂ +klab = "PA" +kv = KVec(-1/2,-1/2,-1/2) +lgops = SymOperation{3}.(["x,y,z", "-x,-y,z", "y,-x,-z", "-y,x,-z", "-x,y+1/2,-z+1/4", "x,-y+1/2,-z+1/4", "-y,-x+1/2,z+1/4", "y,x+1/2,z+1/4"]) + # 1, 2₀₀₁, -4⁺₀₀₁, -4⁻₀₀₁, {2₀₁₀|0,1/2,1/4}, {2₁₀₀|0,1/2,1/4}, {m₁₁₀|0,1/2,1/4}, {m₁₋₁₀|0,1/2,1/4} + +Psτs = [[[1 0; 0 1], [1 0; 0 -1], [1 0; 0 im], [1 0; 0 -im], [0 -1; 1 0], [0 1; 1 0], [0 -im; 1 0], [0 im; 1 0]], + [[1 0; 0 1], [1 0; 0 -1], [-1 0; 0 -im], [-1 0; 0 im], [0 1; -1 0], [0 -1; -1 0], [0 -im; 1 0], [0 im; 1 0]],] +LGIRS_add[sgnum][klab] = assemble_lgirreps(sgnum, kv, klab, lgops, Psτs) + +# ========= 143 ========= +sgnum = 143 +lgops = SymOperation{3}.(["x,y,z", "-y,x-y,z", "-x+y,-x,z"]) # 1, 3⁺₀₀₁, 3⁻₀₀₁ +# HA₁, HA₂, HA₃ +klab = "HA" +kv = KVec(-1/3,-1/3,-1/2) +Psτs = [[1, 1, 1], + [1, cispi(-2/3), cispi(2/3)], + [1, cispi(2/3), cispi(-2/3)],] +LGIRS_add[sgnum][klab] = assemble_lgirreps(sgnum, kv, klab, lgops, Psτs) + +# KA₁, KA₂, KA₃ +klab = "KA" +kv = KVec(-1/3,-1/3,0) +# ... same lgops & irreps as HA₁, HA₂, HA₃ +LGIRS_add[sgnum][klab] = assemble_lgirreps(sgnum, kv, klab, lgops, Psτs) + +# PA₁, PA₂, PA₃ +klab = "PA" +kv = KVec("-1/3,-1/3,-w") +# ... same lgops & irreps as HA₁, HA₂, HA₃ +LGIRS_add[sgnum][klab] = assemble_lgirreps(sgnum, kv, klab, lgops, Psτs) + +# ========= 144 ========= +sgnum = 144 +lgops = SymOperation{3}.(["x,y,z", "-y,x-y,z+1/3", "-x+y,-x,z+2/3"]) # 1, {3⁺₀₀₁|0,0,1/3}, {3⁻₀₀₁|0,0,2/3} +# HA₁, HA₂, HA₃ +klab = "HA" +kv = KVec(-1/3,-1/3,-1/2) +Psτs = [[1, cispi(-1/3), cispi(-2/3)], + [1, -1, 1], + [1, cispi(1/3), cispi(2/3)],] +LGIRS_add[sgnum][klab] = assemble_lgirreps(sgnum, kv, klab, lgops, Psτs) + +# KA₁, KA₂, KA₃ +klab = "KA" +kv = KVec(-1/3,-1/3,0) +Psτs = [[1, 1, 1], + [1, cispi(-2/3), cispi(2/3)], + [1, cispi(2/3), cispi(-2/3)],] +LGIRS_add[sgnum][klab] = assemble_lgirreps(sgnum, kv, klab, lgops, Psτs) + +# PA₁, PA₂, PA₃ +klab = "PA" +kv = KVec("-1/3,-1/3,-w") +Psτs = [([1, 1, 1], [[0.0,0,0], [0,0,1/3], [0,0,2/3]]), # nonzero τs + ([1, cispi(-2/3), cispi(2/3)], [[0.0,0,0], [0,0,1/3], [0,0,2/3]]), + ([1, cispi(2/3), cispi(-2/3)], [[0.0,0,0], [0,0,1/3], [0,0,2/3]]),] +LGIRS_add[sgnum][klab] = assemble_lgirreps(sgnum, kv, klab, lgops, Psτs) + +# ========= 145 ========= +sgnum = 145 +lgops = SymOperation{3}.(["x,y,z", "-y,x-y,z+2/3", "-x+y,-x,z+1/3"]) # 1, {3⁺₀₀₁|0,0,2/3}, {3⁻₀₀₁|0,0,1/3} +# HA₁, HA₂, HA₃ +klab = "HA" +kv = KVec(-1/3,-1/3,-1/2) +Psτs = [[1, 1, -1], + [1, cispi(-2/3), cispi(-1/3)], + [1, cispi(2/3), cispi(1/3)],] +LGIRS_add[sgnum][klab] = assemble_lgirreps(sgnum, kv, klab, lgops, Psτs) + +# KA₁, KA₂, KA₃ +klab = "KA" +kv = KVec(-1/3,-1/3,0) +# ... same lgops as HA₁, HA₂, HA₃ +Psτs = [[1, 1, 1], + [1, cispi(-2/3), cispi(2/3)], + [1, cispi(2/3), cispi(-2/3)],] +LGIRS_add[sgnum][klab] = assemble_lgirreps(sgnum, kv, klab, lgops, Psτs) + +# PA₁, PA₂, PA₃ +klab = "PA" +kv = KVec("-1/3,-1/3,-w") +# ... same lgops as HA₁, HA₂, HA₃ +Psτs = [([1, 1, 1], [[0.0,0,0], [0,0,2/3], [0,0,1/3]]), # nonzero τs + ([1, cispi(-2/3), cispi(2/3)], [[0.0,0,0], [0,0,2/3], [0,0,1/3]]), + ([1, cispi(2/3), cispi(-2/3)], [[0.0,0,0], [0,0,2/3], [0,0,1/3]]),] +LGIRS_add[sgnum][klab] = assemble_lgirreps(sgnum, kv, klab, lgops, Psτs) + +# ========= 150 ========= +sgnum = 150 +# HA₁, HA₂, HA₃ +klab = "HA" +kv = KVec(-1/3,-1/3,-1/2) +lgops = SymOperation{3}.(["x,y,z", "-y,x-y,z", "-x+y,-x,z", "y,x,-z", "x-y,-y,-z", "-x,-x+y,-z"]) # 1, 3₀₀₁⁺, 3₀₀₁⁻, 2₁₁₀, 2₁₀₀, 2₀₁₀ +Psτs = [[1, 1, 1, 1, 1, 1], + [1, 1, 1, -1, -1, -1], + [[1 0; 0 1], [cispi(-2/3) 0; 0 cispi(2/3)], [cispi(2/3) 0; 0 cispi(-2/3)], [0 1; 1 0], [0 cispi(2/3); cispi(-2/3) 0], [0 cispi(-2/3); cispi(2/3) 0]], ] +LGIRS_add[sgnum][klab] = assemble_lgirreps(sgnum, kv, klab, lgops, Psτs) +# KA₁, KA₂, KA₃ +klab = "KA" +kv = KVec(-1/3,-1/3,0) +# ... same lgops & irreps as HA₁, HA₂, HA₃ +LGIRS_add[sgnum][klab] = assemble_lgirreps(sgnum, kv, klab, lgops, Psτs) +# PA₁, PA₂, PA₃ +klab = "PA" +kv = KVec("-1/3,-1/3,-w") +lgops = SymOperation{3}.(["x,y,z", "-y,x-y,z", "-x+y,-x,z"]) # 1, 3₀₀₁⁺, 3₀₀₁⁻ +Psτs = [[1, 1, 1], + [1, cispi(-2/3), cispi(2/3)], + [1, cispi(2/3), cispi(-2/3)], ] +LGIRS_add[sgnum][klab] = assemble_lgirreps(sgnum, kv, klab, lgops, Psτs) + +# ========= 152 ========= +sgnum = 152 +# HA₁, HA₂, HA₃ +klab = "HA" +kv = KVec(-1/3,-1/3,-1/2) +lgops = SymOperation{3}.(["x,y,z", "-y,x-y,z+1/3", "-x+y,-x,z+2/3", "y,x,-z", "x-y,-y,-z+2/3", "-x,-x+y,-z+1/3"]) # 1, {3₀₀₁⁺|0,0,⅓}, {3₀₀₁⁻|0,0,⅔}, 2₁₁₀, {2₁₀₀|0,0,⅔}, {2₀₁₀|0,0,⅓} +Psτs = [[1, -1, 1, 1, 1, -1], + [1, -1, 1, -1, -1, 1], + [[1 0; 0 1], [cispi(-1/3) 0; 0 cispi(1/3)], [cispi(-2/3) 0; 0 cispi(2/3)], [0 1; 1 0], [0 cispi(-2/3); cispi(2/3) 0], [0 cispi(-1/3); cispi(1/3) 0]], ] +LGIRS_add[sgnum][klab] = assemble_lgirreps(sgnum, kv, klab, lgops, Psτs) +# KA₁, KA₂, KA₃ +klab = "KA" +kv = KVec(-1/3,-1/3,0) +# ... same lgops as HA₁, HA₂, HA₃ +Psτs = [[1, 1, 1, 1, 1, 1], + [1, 1, 1, -1, -1, -1], + [[1 0; 0 1], [cispi(-2/3) 0; 0 cispi(2/3)], [cispi(2/3) 0; 0 cispi(-2/3)], [0 1; 1 0], [0 cispi(2/3); cispi(-2/3) 0], [0 cispi(-2/3); cispi(2/3) 0]], ] +LGIRS_add[sgnum][klab] = assemble_lgirreps(sgnum, kv, klab, lgops, Psτs) +# PA₁, PA₂, PA₃ +klab = "PA" +kv = KVec("-1/3,-1/3,-w") +lgops = SymOperation{3}.(["x,y,z", "-y,x-y,z+1/3", "-x+y,-x,z+2/3"]) # 1, {3₀₀₁⁺|0,0,⅓}, {3₀₀₁⁻|0,0,⅔} +Psτs = [([1, 1, 1], [[0.0,0,0], [0,0,1/3], [0,0,2/3]]), + ([1, cispi(-2/3), cispi(2/3)], [[0.0,0,0], [0,0,1/3], [0,0,2/3]]), + ([1, cispi(2/3), cispi(-2/3)], [[0.0,0,0], [0,0,1/3], [0,0,2/3]]), ] +LGIRS_add[sgnum][klab] = assemble_lgirreps(sgnum, kv, klab, lgops, Psτs) + +# ========= 154 ========= +sgnum = 154 +# HA₁, HA₂, HA₃ +klab = "HA" +kv = KVec(-1/3,-1/3,-1/2) +lgops = SymOperation{3}.(["x,y,z", "-y,x-y,z+2/3", "-x+y,-x,z+1/3", "y,x,-z", "x-y,-y,-z+1/3", "-x,-x+y,-z+2/3"]) # 1, {3₀₀₁⁺|0,0,⅔}, {3₀₀₁⁻|0,0,⅓}, 2₁₁₀, {2₁₀₀|0,0,⅓}, {2₀₁₀|0,0,⅔} +Psτs = [[1, 1, -1, -1, 1, -1], + [1, 1, -1, 1, -1, 1], + [[1 0; 0 1], [cispi(-2/3) 0; 0 cispi(2/3)], [cispi(-1/3) 0; 0 cispi(1/3)], [0 1; 1 0], [0 cispi(-1/3); cispi(1/3) 0], [0 cispi(-2/3); cispi(2/3) 0]], ] +LGIRS_add[sgnum][klab] = assemble_lgirreps(sgnum, kv, klab, lgops, Psτs) +# KA₁, KA₂, KA₃ +klab = "KA" +kv = KVec(-1/3,-1/3,0) +# ... same lgops as HA₁, HA₂, HA₃ +Psτs = [[1, 1, 1, 1, 1, 1], + [1, 1, 1, -1, -1, -1], + [[1 0; 0 1], [cispi(-2/3) 0; 0 cispi(2/3)], [cispi(2/3) 0; 0 cispi(-2/3)], [0 1; 1 0], [0 cispi(2/3); cispi(-2/3) 0], [0 cispi(-2/3); cispi(2/3) 0]], ] +LGIRS_add[sgnum][klab] = assemble_lgirreps(sgnum, kv, klab, lgops, Psτs) +# PA₁, PA₂, PA₃ +klab = "PA" +kv = KVec("-1/3,-1/3,-w") +lgops = SymOperation{3}.(["x,y,z", "-y,x-y,z+2/3", "-x+y,-x,z+1/3"]) # 1, {3₀₀₁⁺|0,0,⅔}, {3₀₀₁⁻|0,0,⅓} +Psτs = [([1, 1, 1], [[0.0,0,0], [0,0,2/3], [0,0,1/3]]), + ([1, cispi(-2/3), cispi(2/3)], [[0.0,0,0], [0,0,2/3], [0,0,1/3]]), + ([1, cispi(2/3), cispi(-2/3)], [[0.0,0,0], [0,0,2/3], [0,0,1/3]]), ] +LGIRS_add[sgnum][klab] = assemble_lgirreps(sgnum, kv, klab, lgops, Psτs) + +# ========= 157 ========= +sgnum = 157 +# HA₁, HA₂, HA₃ +klab = "HA" +kv = KVec(-1/3,-1/3,-1/2) +lgops = SymOperation{3}.(["x,y,z", "-y,x-y,z", "-x+y,-x,z", "y,x,z", "x-y,-y,z", "-x,-x+y,z"]) # 1, 3₀₀₁⁺, 3₀₀₁⁻, m₋₁₁₀, m₁₂₀, m₂₁₀ +Psτs = [[1, 1, 1, 1, 1, 1], + [1, 1, 1, -1, -1, -1], + [[1 0; 0 1], [cispi(-2/3) 0; 0 cispi(2/3)], [cispi(2/3) 0; 0 cispi(-2/3)], [0 1; 1 0], [0 cispi(2/3); cispi(-2/3) 0], [0 cispi(-2/3); cispi(2/3) 0]], ] +LGIRS_add[sgnum][klab] = assemble_lgirreps(sgnum, kv, klab, lgops, Psτs) +# KA₁, KA₂, KA₃ +klab = "KA" +kv = KVec(-1/3,-1/3,0) +# ... same lgops & irreps as HA₁, HA₂, HA₃ +LGIRS_add[sgnum][klab] = assemble_lgirreps(sgnum, kv, klab, lgops, Psτs) +# PA₁, PA₂, PA₃ +klab = "PA" +kv = KVec("-1/3,-1/3,-w") +# ... same lgops & irreps as HA₁, HA₂, HA₃ +LGIRS_add[sgnum][klab] = assemble_lgirreps(sgnum, kv, klab, lgops, Psτs) + +# ========= 159 ========= +sgnum = 159 +# HA₁, HA₂, HA₃ +klab = "HA" +kv = KVec(-1/3,-1/3,-1/2) +lgops = SymOperation{3}.(["x,y,z", "-y,x-y,z", "-x+y,-x,z", "y,x,z+1/2", "x-y,-y,z+1/2", "-x,-x+y,z+1/2"]) # 1, 3₀₀₁⁺, 3₀₀₁⁻, {m₋₁₁₀|0,0,½}, {m₁₂₀|0,0,½}, {m₂₁₀|0,0,½} +Psτs = [[1, 1, 1, -1im, -1im, -1im], + [1, 1, 1, 1im, 1im, 1im], + [[1 0; 0 1], [cispi(-2/3) 0; 0 cispi(2/3)], [cispi(2/3) 0; 0 cispi(-2/3)], [0 -1; 1 0], [0 cispi(-1/3); cispi(-2/3) 0], [0 cispi(1/3); cispi(2/3) 0]], ] +LGIRS_add[sgnum][klab] = assemble_lgirreps(sgnum, kv, klab, lgops, Psτs) +# KA₁, KA₂, KA₃ +klab = "KA" +kv = KVec(-1/3,-1/3,0) +# ... same lgops as HA₁, HA₂, HA₃ +Psτs = [[1, 1, 1, 1, 1, 1], + [1, 1, 1, -1, -1, -1], + [[1 0; 0 1], [cispi(-2/3) 0; 0 cispi(2/3)], [cispi(2/3) 0; 0 cispi(-2/3)], [0 1; 1 0], [0 cispi(2/3); cispi(-2/3) 0], [0 cispi(-2/3); cispi(2/3) 0]], ] +LGIRS_add[sgnum][klab] = assemble_lgirreps(sgnum, kv, klab, lgops, Psτs) +# PA₁, PA₂, PA₃ +klab = "PA" +kv = KVec("-1/3,-1/3,-w") +# ... same lgops as HA₁, HA₂, HA₃ +Psτs = [([1, 1, 1, 1, 1, 1], + [[0.0,0,0], [0.0,0,0], [0.0,0,0], [0,0,1/2], [0,0,1/2], [0,0,1/2]]), + ([1, 1, 1, -1, -1, -1], + [[0.0,0,0], [0.0,0,0], [0.0,0,0], [0,0,1/2], [0,0,1/2], [0,0,1/2]]), + ([[1 0; 0 1], [cispi(-2/3) 0; 0 cispi(2/3)], [cispi(2/3) 0; 0 cispi(-2/3)], [0 1; 1 0], [0 cispi(2/3); cispi(-2/3) 0], [0 cispi(-2/3); cispi(2/3) 0]], + [[0.0,0,0], [0.0,0,0], [0.0,0,0], [0,0,1/2], [0,0,1/2], [0,0,1/2]]), + ] +LGIRS_add[sgnum][klab] = assemble_lgirreps(sgnum, kv, klab, lgops, Psτs) + +# ========= 174 ========= +sgnum = 174 +# HA₁, HA₂, HA₃, HA₄, HA₅, HA₆ +klab = "HA" +kv = KVec(-1/3,-1/3,-1/2) +lgops = SymOperation{3}.(["x,y,z", "-y,x-y,z", "-x+y,-x,z", "x,y,-z", "-y,x-y,-z", "-x+y,-x,-z"]) # 1, 3₀₀₁⁺, 3₀₀₁⁻, m₀₀₁, -6₀₀₁⁻, -6₀₀₁⁺ +Psτs = [[1, 1, 1, 1, 1, 1], + [1, 1, 1, -1, -1, -1], + [1, cispi(-2/3), cispi(2/3), 1, cispi(-2/3), cispi(2/3)], + [1, cispi(-2/3), cispi(2/3), -1, cispi(1/3), cispi(-1/3)], + [1, cispi(2/3), cispi(-2/3), 1, cispi(2/3), cispi(-2/3)], + [1, cispi(2/3), cispi(-2/3), -1, cispi(-1/3), cispi(1/3)], ] +LGIRS_add[sgnum][klab] = assemble_lgirreps(sgnum, kv, klab, lgops, Psτs) +# KA₁, KA₂, KA₃, KA₄, KA₅, KA₆ +klab = "KA" +kv = KVec(-1/3,-1/3,0) +# ... same lgops and irreps as HA₁, HA₂, HA₃ +LGIRS_add[sgnum][klab] = assemble_lgirreps(sgnum, kv, klab, lgops, Psτs) +# PA₁, PA₂, PA₃ +klab = "PA" +kv = KVec("-1/3,-1/3,-w") +lgops = SymOperation{3}.(["x,y,z", "-y,x-y,z", "-x+y,-x,z"]) # 1, 3₀₀₁⁺, 3₀₀₁⁻ +Psτs = [[1, 1, 1], + [1, cispi(-2/3), cispi(2/3)], + [1, cispi(2/3), cispi(-2/3)], ] +LGIRS_add[sgnum][klab] = assemble_lgirreps(sgnum, kv, klab, lgops, Psτs) + +# ========= 189 ========= +sgnum = 189 +# HA₁, HA₂, HA₃, HA₄, HA₅, HA₆ +klab = "HA" +kv = KVec(-1/3,-1/3,-1/2) +lgops = SymOperation{3}.(["x,y,z", "-y,x-y,z", "-x+y,-x,z", "x,y,-z", "-y,x-y,-z", "-x+y,-x,-z", "y,x,-z", "x-y,-y,-z", "-x,-x+y,-z", "y,x,z", "x-y,-y,z", "-x,-x+y,z"]) # 1, 3₀₀₁⁺, 3₀₀₁⁻, m₀₀₁, -6₀₀₁⁻, -6₀₀₁⁺, 2₁₁₀, 2₁₀₀, 2₀₁₀, m₋₁₁₀, m₁₂₀, m₂₁₀ +Psτs = [[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, -1, -1, -1, 1, 1, 1, -1, -1, -1], + [1, 1, 1, -1, -1, -1, -1, -1, -1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1], + [[1 0; 0 1], [cispi(-2/3) 0; 0 cispi(2/3)], [cispi(2/3) 0; 0 cispi(-2/3)], [1 0; 0 1], [cispi(-2/3) 0; 0 cispi(2/3)], [cispi(2/3) 0; 0 cispi(-2/3)], [0 1; 1 0], [0 cispi(2/3); cispi(-2/3) 0], [0 cispi(-2/3); cispi(2/3) 0], [0 1; 1 0], [0 cispi(2/3); cispi(-2/3) 0], [0 cispi(-2/3); cispi(2/3) 0]], + [[1 0; 0 1], [cispi(-2/3) 0; 0 cispi(2/3)], [cispi(2/3) 0; 0 cispi(-2/3)], [-1 0; 0 -1], [cispi(1/3) 0; 0 cispi(-1/3)], [cispi(-1/3) 0; 0 cispi(1/3)], [0 1; 1 0], [0 cispi(2/3); cispi(-2/3) 0], [0 cispi(-2/3); cispi(2/3) 0], [0 -1; -1 0], [0 cispi(-1/3); cispi(1/3) 0], [0 cispi(1/3); cispi(-1/3) 0]], + ] +LGIRS_add[sgnum][klab] = assemble_lgirreps(sgnum, kv, klab, lgops, Psτs) +# KA₁, KA₂, KA₃, KA₄, KA₅, KA₆ +klab = "KA" +kv = KVec(-1/3,-1/3,0) +# ... same lgops and irreps as HA₁, HA₂, HA₃ +LGIRS_add[sgnum][klab] = assemble_lgirreps(sgnum, kv, klab, lgops, Psτs) +# PA₁, PA₂, PA₃ +klab = "PA" +kv = KVec("-1/3,-1/3,-w") +lgops = SymOperation{3}.(["x,y,z", "-y,x-y,z", "-x+y,-x,z", "y,x,z", "x-y,-y,z", "-x,-x+y,z"]) # 1, 3₀₀₁⁺, 3₀₀₁⁻, m₋₁₁₀, m₁₂₀, m₂₁₀ +Psτs = [[1, 1, 1, 1, 1, 1], + [1, 1, 1, -1, -1, -1], + [[1 0; 0 1], [cispi(-2/3) 0; 0 cispi(2/3)], [cispi(2/3) 0; 0 cispi(-2/3)], [0 1; 1 0], [0 cispi(2/3); cispi(-2/3) 0], [0 cispi(-2/3); cispi(2/3) 0]], + ] +LGIRS_add[sgnum][klab] = assemble_lgirreps(sgnum, kv, klab, lgops, Psτs) + +# ========= 190 ========= +sgnum = 190 +# HA₁, HA₂, HA₃ +klab = "HA" +kv = KVec(-1/3,-1/3,-1/2) +lgops = SymOperation{3}.(["x,y,z", "-y,x-y,z", "-x+y,-x,z", "x,y,-z+1/2", "-y,x-y,-z+1/2", "-x+y,-x,-z+1/2", "y,x,-z", "x-y,-y,-z", "-x,-x+y,-z", "y,x,z+1/2", "x-y,-y,z+1/2", "-x,-x+y,z+1/2"]) # 1, 3₀₀₁⁺, 3₀₀₁⁻, {m₀₀₁|0,0,½}, {-6₀₀₁⁻|0,0,½}, {-6₀₀₁⁺|0,0,½}, 2₁₁₀, 2₁₀₀, 2₀₁₀, {m₋₁₁₀|0,0,½}, {m₁₂₀|0,0,½}, {m₂₁₀|0,0,½} +Psτs = [[[1 0; 0 1], [cispi(-2/3) 0; 0 cispi(2/3)], [cispi(2/3) 0; 0 cispi(-2/3)], [1 0; 0 -1], [cispi(-2/3) 0; 0 cispi(-1/3)], [cispi(2/3) 0; 0 cispi(1/3)], [0 1; 1 0], [0 cispi(2/3); cispi(-2/3) 0], [0 cispi(-2/3); cispi(2/3) 0], [0 1; -1 0], [0 cispi(2/3); cispi(1/3) 0], [0 cispi(-2/3); cispi(-1/3) 0]], + [[1 0; 0 1], [cispi(2/3) 0; 0 cispi(-2/3)], [cispi(-2/3) 0; 0 cispi(2/3)], [1 0; 0 -1], [cispi(2/3) 0; 0 cispi(1/3)], [cispi(-2/3) 0; 0 cispi(-1/3)], [0 1; 1 0], [0 cispi(-2/3); cispi(2/3) 0], [0 cispi(2/3); cispi(-2/3) 0], [0 1; -1 0], [0 cispi(-2/3); cispi(-1/3) 0], [0 cispi(2/3); cispi(1/3) 0]], + [[1 0; 0 1], [1 0; 0 1], [1 0; 0 1], [1 0; 0 -1], [1 0; 0 -1], [1 0; 0 -1], [0 1; 1 0], [0 1; 1 0], [0 1; 1 0], [0 1; -1 0], [0 1; -1 0], [0 1; -1 0]], ] +LGIRS_add[sgnum][klab] = assemble_lgirreps(sgnum, kv, klab, lgops, Psτs) +# KA₁, KA₂, KA₃, KA₄, KA₅, KA₆ +klab = "KA" +kv = KVec(-1/3,-1/3,0) +# ... same lgops as HA₁, HA₂, HA₃ +Psτs = [[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, -1, -1, -1, 1, 1, 1, -1, -1, -1], + [1, 1, 1, -1, -1, -1, -1, -1, -1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1], + [[1 0; 0 1], [cispi(-2/3) 0; 0 cispi(2/3)], [cispi(2/3) 0; 0 cispi(-2/3)], [1 0; 0 1], [cispi(-2/3) 0; 0 cispi(2/3)], [cispi(2/3) 0; 0 cispi(-2/3)], [0 1; 1 0], [0 cispi(2/3); cispi(-2/3) 0], [0 cispi(-2/3); cispi(2/3) 0], [0 1; 1 0], [0 cispi(2/3); cispi(-2/3) 0], [0 cispi(-2/3); cispi(2/3) 0]], + [[1 0; 0 1], [cispi(-2/3) 0; 0 cispi(2/3)], [cispi(2/3) 0; 0 cispi(-2/3)], [-1 0; 0 -1], [cispi(1/3) 0; 0 cispi(-1/3)], [cispi(-1/3) 0; 0 cispi(1/3)], [0 1; 1 0], [0 cispi(2/3); cispi(-2/3) 0], [0 cispi(-2/3); cispi(2/3) 0], [0 -1; -1 0], [0 cispi(-1/3); cispi(1/3) 0], [0 cispi(1/3); cispi(-1/3) 0]], ] +LGIRS_add[sgnum][klab] = assemble_lgirreps(sgnum, kv, klab, lgops, Psτs) +# PA₁, PA₂, PA₃ +klab = "PA" +kv = KVec("-1/3,-1/3,-w") +lgops = SymOperation{3}.(["x,y,z", "-y,x-y,z", "-x+y,-x,z", "y,x,z+1/2", "x-y,-y,z+1/2", "-x,-x+y,z+1/2"]) # 1, 3₀₀₁⁺, 3₀₀₁⁻, {m₋₁₁₀|0,0,½}, {m₁₂₀|0,0,½}, {m₂₁₀|0,0,½} +Psτs = [([1, 1, 1, 1, 1, 1], [[0,0,0.0], [0,0,0.0], [0,0,0.0], [0,0,1/2], [0,0,1/2], [0,0,1/2]]), + ([1, 1, 1, -1, -1, -1], [[0,0,0.0], [0,0,0.0], [0,0,0.0], [0,0,1/2], [0,0,1/2], [0,0,1/2]]), + ([[1 0; 0 1], [cispi(-2/3) 0; 0 cispi(2/3)], [cispi(2/3) 0; 0 cispi(-2/3)], + [0 1; 1 0], [0 cispi(2/3); cispi(-2/3) 0], [0 cispi(-2/3); cispi(2/3) 0]], + [[0,0,0.0], [0,0,0.0], [0,0,0.0], [0,0,1/2], [0,0,1/2], [0,0,1/2]]), ] +LGIRS_add[sgnum][klab] = assemble_lgirreps(sgnum, kv, klab, lgops, Psτs) + +# ========= 197 ========= +sgnum = 197 +# PA₁, PA₂, PA₃, PA₄ +klab = "PA" +kv = KVec(-1/2,-1/2,-1/2) +lgops = SymOperation{3}.(["x,y,z", "-x,-y,z", "-x,y,-z", "x,-y,-z", "z,x,y", "z,-x,-y", # 1, 2₀₀₁, 2₀₁₀, 2₁₀₀, 3₁₁₁⁺, 3₋₁₁₋₁⁺, 3₋₁₁₁⁻, 3₋₁₋₁₁⁺, 3₁₁₁⁻, 3₋₁₁₁⁺, 3₋₁₋₁₁⁻, 3₋₁₁₋₁⁻ + "-z,-x,y", "-z,x,-y", "y,z,x", "-y,z,-x", "y,-z,-x", "-y,-z,x"]) +Psτs = [[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, cispi(-2/3), cispi(-2/3), cispi(-2/3), cispi(-2/3), cispi(2/3), cispi(2/3), cispi(2/3), cispi(2/3)], + [1, 1, 1, 1, cispi(2/3), cispi(2/3), cispi(2/3), cispi(2/3), cispi(-2/3), cispi(-2/3), cispi(-2/3), cispi(-2/3)], + [[1 0 0; 0 1 0; 0 0 1], [1 0 0; 0 -1 0; 0 0 -1], [-1 0 0; 0 -1 0; 0 0 1], + [-1 0 0; 0 1 0; 0 0 -1], [0 0 1; 1 0 0; 0 1 0], [0 0 -1; 1 0 0; 0 -1 0], + [0 0 1; -1 0 0; 0 -1 0], [0 0 -1; -1 0 0; 0 1 0], [0 1 0; 0 0 1; 1 0 0], + [0 -1 0; 0 0 -1; 1 0 0], [0 -1 0; 0 0 1; -1 0 0], [0 1 0; 0 0 -1; -1 0 0]], ] +LGIRS_add[sgnum][klab] = assemble_lgirreps(sgnum, kv, klab, lgops, Psτs) + +# ========= 199 ========= +sgnum = 199 +# PA₁, PA₂, PA₃ +klab = "PA" +kv = KVec(-1/2,-1/2,-1/2) +lgops = SymOperation{3}.(["x,y,z", "-x,-y+1/2,z", "-x+1/2,y,-z", "x,-y,-z+1/2", "z,x,y", # 1, {2₀₀₁|0,½,0}, {2₀₁₀|½,0,0}, {2₁₀₀|0,0,½}, 3₁₁₁⁺, {3₋₁₁₋₁⁺|0,0,½}, {3₋₁₁₁⁻|0,½,0}, {3₋₁₋₁₁⁺|½,0,0}, 3₁₁₁⁻, {3₋₁₁₁⁺|½,0,0}, {3₋₁₋₁₁⁻|0,0,½}, {3₋₁₁₋₁⁻|0,½,0} + "z,-x,-y+1/2", "-z,-x+1/2,y", "-z+1/2,x,-y", "y,z,x", "-y+1/2,z,-x", "y,-z,-x+1/2", "-y,-z+1/2,x"]) +Psτs = [[[1 0; 0 1], [1 0; 0 -1], [0 1; 1 0], [0 -1im; 1im 0], + [cispi(-1/12)/√2 cispi(-1/12)/√2; cispi(5/12)/√2 cispi(-7/12)/√2], + [cispi(-1/12)/√2 cispi(11/12)/√2; cispi(5/12)/√2 cispi(5/12)/√2], + [cispi(-1/12)/√2 cispi(-1/12)/√2; cispi(-7/12)/√2 cispi(5/12)/√2], + [cispi(5/12)/√2 cispi(-7/12)/√2; cispi(-1/12)/√2 cispi(-1/12)/√2], + [cispi(1/12)/√2 cispi(-5/12)/√2; cispi(1/12)/√2 cispi(7/12)/√2], + [cispi(1/12)/√2 cispi(7/12)/√2; cispi(1/12)/√2 cispi(-5/12)/√2], + [cispi(-5/12)/√2 cispi(1/12)/√2; cispi(7/12)/√2 cispi(1/12)/√2], + [cispi(1/12)/√2 cispi(-5/12)/√2; cispi(-11/12)/√2 cispi(-5/12)/√2]], + [[1 0; 0 1], [1 0; 0 -1], [0 1; 1 0], [0 -1im; 1im 0], + [cispi(-3/4)/√2 cispi(-3/4)/√2; cispi(-1/4)/√2 cispi(3/4)/√2], + [cispi(-3/4)/√2 cispi(1/4)/√2; cispi(-1/4)/√2 cispi(-1/4)/√2], + [cispi(-3/4)/√2 cispi(-3/4)/√2; cispi(3/4)/√2 cispi(-1/4)/√2], + [cispi(-1/4)/√2 cispi(3/4)/√2; cispi(-3/4)/√2 cispi(-3/4)/√2], + [cispi(3/4)/√2 cispi(1/4)/√2; cispi(3/4)/√2 cispi(-3/4)/√2], + [cispi(3/4)/√2 cispi(-3/4)/√2; cispi(3/4)/√2 cispi(1/4)/√2], + [cispi(1/4)/√2 cispi(3/4)/√2; cispi(-3/4)/√2 cispi(3/4)/√2], + [cispi(3/4)/√2 cispi(1/4)/√2; cispi(-1/4)/√2 cispi(1/4)/√2]], + [[1 0; 0 1], [1 0; 0 -1], [0 1; 1 0], [0 -1im; 1im 0], + [cispi(7/12)/√2 cispi(7/12)/√2; cispi(-11/12)/√2 cispi(1/12)/√2], + [cispi(7/12)/√2 cispi(-5/12)/√2; cispi(-11/12)/√2 cispi(-11/12)/√2], + [cispi(7/12)/√2 cispi(7/12)/√2; cispi(1/12)/√2 cispi(-11/12)/√2], + [cispi(-11/12)/√2 cispi(1/12)/√2; cispi(7/12)/√2 cispi(7/12)/√2], + [cispi(-7/12)/√2 cispi(11/12)/√2; cispi(-7/12)/√2 cispi(-1/12)/√2], + [cispi(-7/12)/√2 cispi(-1/12)/√2; cispi(-7/12)/√2 cispi(11/12)/√2], + [cispi(11/12)/√2 cispi(-7/12)/√2; cispi(-1/12)/√2 cispi(-7/12)/√2], + [cispi(-7/12)/√2 cispi(11/12)/√2; cispi(5/12)/√2 cispi(11/12)/√2]], ] +LGIRS_add[sgnum][klab] = assemble_lgirreps(sgnum, kv, klab, lgops, Psτs) + +# ========= 217 ========= +sgnum = 217 +# PA₁, PA₂, PA₃, PA₄, PA₅ +klab = "PA" +kv = KVec(-1/2,-1/2,-1/2) +lgops = SymOperation{3}.(["x,y,z", "-x,-y,z", "-x,y,-z", "x,-y,-z", "z,x,y", "z,-x,-y", # 1, 2₀₀₁, 2₀₁₀, 2₁₀₀, 3₁₁₁⁺, 3₋₁₁₋₁⁺, 3₋₁₁₁⁻, 3₋₁₋₁₁⁺, 3₁₁₁⁻, 3₋₁₁₁⁺, 3₋₁₋₁₁⁻, 3₋₁₁₋₁⁻, m₋₁₁₀, m₁₁₀, -4₀₀₁⁺, -4₀₀₁⁻, m₀₋₁₁, -4₁₀₀⁺, -4₁₀₀⁻, m₀₁₁, m₋₁₀₁, -4₀₁₀⁻, m₁₀₁, -4₀₁₀⁺ + "-z,-x,y", "-z,x,-y", "y,z,x", "-y,z,-x", "y,-z,-x", "-y,-z,x", "y,x,z", + "-y,-x,z", "y,-x,-z", "-y,x,-z", "x,z,y", "-x,z,-y", "-x,-z,y", "x,-z,-y", + "z,y,x", "z,-y,-x", "-z,y,-x", "-z,-y,x"]) +Psτs = [[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], + [1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1], + [[1 0; 0 1], [1 0; 0 1], [1 0; 0 1], [1 0; 0 1], + [cispi(-2/3) 0; 0 cispi(2/3)], [cispi(-2/3) 0; 0 cispi(2/3)], [cispi(-2/3) 0; 0 cispi(2/3)], [cispi(-2/3) 0; 0 cispi(2/3)], + [cispi(2/3) 0; 0 cispi(-2/3)], [cispi(2/3) 0; 0 cispi(-2/3)], [cispi(2/3) 0; 0 cispi(-2/3)], [cispi(2/3) 0; 0 cispi(-2/3)], + [0 1; 1 0], [0 1; 1 0], [0 1; 1 0], [0 1; 1 0], + [0 cispi(2/3); cispi(-2/3) 0], [0 cispi(2/3); cispi(-2/3) 0], [0 cispi(2/3); cispi(-2/3) 0], [0 cispi(2/3); cispi(-2/3) 0], + [0 cispi(-2/3); cispi(2/3) 0], [0 cispi(-2/3); cispi(2/3) 0], [0 cispi(-2/3); cispi(2/3) 0], [0 cispi(-2/3); cispi(2/3) 0]], + [[1 0 0; 0 1 0; 0 0 1], [1 0 0; 0 -1 0; 0 0 -1], [-1 0 0; 0 -1 0; 0 0 1], [-1 0 0; 0 1 0; 0 0 -1], [0 0 1; 1 0 0; 0 1 0], [0 0 -1; 1 0 0; 0 -1 0], [0 0 1; -1 0 0; 0 -1 0], [0 0 -1; -1 0 0; 0 1 0], [0 1 0; 0 0 1; 1 0 0], [0 -1 0; 0 0 -1; 1 0 0], [0 -1 0; 0 0 1; -1 0 0], [0 1 0; 0 0 -1; -1 0 0], + [1 0 0; 0 0 1; 0 1 0], [1 0 0; 0 0 -1; 0 -1 0], [-1 0 0; 0 0 1; 0 -1 0], [-1 0 0; 0 0 -1; 0 1 0], [0 0 1; 0 1 0; 1 0 0], [0 0 -1; 0 -1 0; 1 0 0], [0 0 1; 0 -1 0; -1 0 0], [0 0 -1; 0 1 0; -1 0 0], [0 1 0; 1 0 0; 0 0 1], [0 -1 0; 1 0 0; 0 0 -1], [0 -1 0; -1 0 0; 0 0 1], [0 1 0; -1 0 0; 0 0 -1]], + [[1 0 0; 0 1 0; 0 0 1], [1 0 0; 0 -1 0; 0 0 -1], [-1 0 0; 0 -1 0; 0 0 1], [-1 0 0; 0 1 0; 0 0 -1], [0 0 1; 1 0 0; 0 1 0], [0 0 -1; 1 0 0; 0 -1 0], [0 0 1; -1 0 0; 0 -1 0], [0 0 -1; -1 0 0; 0 1 0], [0 1 0; 0 0 1; 1 0 0], [0 -1 0; 0 0 -1; 1 0 0], [0 -1 0; 0 0 1; -1 0 0], [0 1 0; 0 0 -1; -1 0 0], # same as first "half" of PA₄ + -[1 0 0; 0 0 1; 0 1 0], -[1 0 0; 0 0 -1; 0 -1 0], -[-1 0 0; 0 0 1; 0 -1 0], -[-1 0 0; 0 0 -1; 0 1 0], -[0 0 1; 0 1 0; 1 0 0], -[0 0 -1; 0 -1 0; 1 0 0], -[0 0 1; 0 -1 0; -1 0 0], -[0 0 -1; 0 1 0; -1 0 0], -[0 1 0; 1 0 0; 0 0 1], -[0 -1 0; 1 0 0; 0 0 -1], -[0 -1 0; -1 0 0; 0 0 1], -[0 1 0; -1 0 0; 0 0 -1]], # negative of second "half" of PA₄ + ] +LGIRS_add[sgnum][klab] = assemble_lgirreps(sgnum, kv, klab, lgops, Psτs) + +# ========= 220 ========= +sgnum = 220 +# PA₁, PA₂, PA₃ +klab = "PA" +kv = KVec(-1/2,-1/2,-1/2) +lgops = SymOperation{3}.(["x,y,z", "-x,-y+1/2,z", "-x+1/2,y,-z", "x,-y,-z+1/2", "z,x,y", # 1, {2₀₀₁|0,½,0}, {2₀₁₀|½,0,0}, {2₁₀₀|0,0,½}, 3₁₁₁⁺, {3₋₁₁₋₁⁺|0,0,½}, {3₋₁₁₁⁻|0,½,0}, {3₋₁₋₁₁⁺|½,0,0}, 3₁₁₁⁻, {3₋₁₁₁⁺|½,0,0}, {3₋₁₋₁₁⁻|0,0,½}, {3₋₁₁₋₁⁻|0,½,0}, {m₋₁₁₀|¼,¼,¼}, {m₁₁₀|¾,¼,¼}, {-4₀₀₁⁺|¼,¾,¼}, {-4₀₀₁⁻|¼,¼,¾}, {m₀₋₁₁|¼,¼,¼}, {-4₁₀₀⁺|¼,¼,¾}, {-4₁₀₀⁻|¾,¼,¼}, {m₀₁₁|¼,¾,¼}, {m₋₁₀₁|¼,¼,¼}, {-4₀₁₀⁻|¼,¾,¼}, {m₁₀₁|¼,¼,¾}, {-4₀₁₀⁺|¾,¼,¼} + "z,-x,-y+1/2", "-z,-x+1/2,y", "-z+1/2,x,-y", "y,z,x", "-y+1/2,z,-x", + "y,-z,-x+1/2", "-y,-z+1/2,x", "y+1/4,x+1/4,z+1/4", "-y+3/4,-x+1/4,z+1/4", + "y+1/4,-x+3/4,-z+1/4", "-y+1/4,x+1/4,-z+3/4", "x+1/4,z+1/4,y+1/4", + "-x+1/4,z+1/4,-y+3/4", "-x+3/4,-z+1/4,y+1/4", "x+1/4,-z+3/4,-y+1/4", + "z+1/4,y+1/4,x+1/4", "z+1/4,-y+3/4,-x+1/4", "-z+1/4,y+1/4,-x+3/4", + "-z+3/4,-y+1/4,x+1/4"]) +Psτs = # PA₁ + [[ [1 0; 0 1], [1 0; 0 -1], [0 1; 1 0], [0 -1im; 1im 0], + [cispi(-3/4)/√2 cispi(-3/4)/√2; cispi(-1/4)/√2 cispi(3/4)/√2 ], + [cispi(-3/4)/√2 cispi(1/4)/√2; cispi(-1/4)/√2 cispi(-1/4)/√2], + [cispi(-3/4)/√2 cispi(-3/4)/√2; cispi(3/4)/√2 cispi(-1/4)/√2], + [cispi(-1/4)/√2 cispi(3/4)/√2; cispi(-3/4)/√2 cispi(-3/4)/√2], + [cispi(3/4)/√2 cispi(1/4)/√2; cispi(3/4)/√2 cispi(-3/4)/√2], + [cispi(3/4)/√2 cispi(-3/4)/√2; cispi(3/4)/√2 cispi(1/4)/√2 ], + [cispi(1/4)/√2 cispi(3/4)/√2; cispi(-3/4)/√2 cispi(3/4)/√2 ], + [cispi(3/4)/√2 cispi(1/4)/√2; cispi(-1/4)/√2 cispi(1/4)/√2 ], + [0 -1im; -1 0], [0 1im; -1 0], [-1im 0; 0 -1], [1 0; 0 1im], + [cispi(-3/4)/√2 cispi(1/4)/√2; cispi(1/4)/√2 cispi(1/4)/√2 ], + [cispi(-3/4)/√2 cispi(-3/4)/√2; cispi(1/4)/√2 cispi(-3/4)/√2], + [cispi(1/4)/√2 cispi(-3/4)/√2; cispi(1/4)/√2 cispi(1/4)/√2 ], + [cispi(3/4)/√2 cispi(3/4)/√2; cispi(3/4)/√2 cispi(-1/4)/√2], + [cispi(1/4)/√2 cispi(3/4)/√2; cispi(-1/4)/√2 cispi(-3/4)/√2], + [cispi(1/4)/√2 cispi(-1/4)/√2; cispi(-1/4)/√2 cispi(1/4)/√2 ], + [cispi(3/4)/√2 cispi(1/4)/√2; cispi(-3/4)/√2 cispi(-1/4)/√2], + [cispi(-3/4)/√2 cispi(-1/4)/√2; cispi(-1/4)/√2 cispi(-3/4)/√2], ]] +push!(Psτs, # PA₂ (first 12 irreps same as PA₁, next 12 have sign flipped) + Psτs[1] .* vcat(ones(Int, 12), fill(-1, 12)) + ) +push!(Psτs, # PA₃ (4-dimensional irrep) + [ [1 0 0 0; 0 1 0 0; 0 0 1 0; 0 0 0 1], # --- + [1 0 0 0; 0 -1 0 0; 0 0 -1 0; 0 0 0 1], # --- + [0 1 0 0; 1 0 0 0; 0 0 0 1im; 0 0 -1im 0], # --- + [0 -1im 0 0; 1im 0 0 0; 0 0 0 -1; 0 0 -1 0], # --- + [cispi(7/12)/√2 cispi(7/12)/√2 0 0; # --- + cispi(-11/12)/√2 cispi(1/12)/√2 0 0; + 0 0 cispi(-7/12)/√2 cispi(11/12)/√2; + 0 0 cispi(-7/12)/√2 cispi(-1/12)/√2], + [cispi(7/12)/√2 cispi(-5/12)/√2 0 0; # --- + cispi(-11/12)/√2 cispi(-11/12)/√2 0 0; + 0 0 cispi(5/12)/√2 cispi(11/12)/√2; + 0 0 cispi(5/12)/√2 cispi(-1/12)/√2], + [cispi(7/12)/√2 cispi(7/12)/√2 0 0; # --- + cispi(1/12)/√2 cispi(-11/12)/√2 0 0; + 0 0 cispi(5/12)/√2 cispi(-1/12)/√2; + 0 0 cispi(-7/12)/√2 cispi(-1/12)/√2], + [cispi(-11/12)/√2 cispi(1/12)/√2 0 0; # --- + cispi(7/12)/√2 cispi(7/12)/√2 0 0; + 0 0 cispi(-1/12)/√2 cispi(5/12)/√2; + 0 0 cispi(11/12)/√2 cispi(5/12)/√2], + [cispi(-7/12)/√2 cispi(11/12)/√2 0 0; # --- + cispi(-7/12)/√2 cispi(-1/12)/√2 0 0; + 0 0 cispi(7/12)/√2 cispi(7/12)/√2; + 0 0 cispi(-11/12)/√2 cispi(1/12)/√2], + [cispi(-7/12)/√2 cispi(-1/12)/√2 0 0; # --- + cispi(-7/12)/√2 cispi(11/12)/√2 0 0; + 0 0 cispi(-5/12)/√2 cispi(7/12)/√2; + 0 0 cispi(1/12)/√2 cispi(1/12)/√2], + [cispi(11/12)/√2 cispi(-7/12)/√2 0 0; # --- + cispi(-1/12)/√2 cispi(-7/12)/√2 0 0; + 0 0 cispi(1/12)/√2 cispi(-11/12)/√2; + 0 0 cispi(-5/12)/√2 cispi(-5/12)/√2], + [cispi(-7/12)/√2 cispi(11/12)/√2 0 0; # --- + cispi(5/12)/√2 cispi(11/12)/√2 0 0; + 0 0 cispi(-5/12)/√2 cispi(-5/12)/√2; + 0 0 cispi(-11/12)/√2 cispi(1/12)/√2], + [0 0 1im 0; 0 0 0 1im; 1 0 0 0; 0 1 0 0], # --- + [0 0 -1im 0; 0 0 0 1im; 1 0 0 0; 0 -1 0 0], # --- + [0 0 0 -1; 0 0 1 0; 0 1 0 0; 1 0 0 0], # --- + [0 0 0 -1im; 0 0 -1im 0; 0 -1im 0 0; 1im 0 0 0], # --- + [0 0 cispi(-1/12)/√2 cispi(-7/12)/√2; # --- + 0 0 cispi(-1/12)/√2 cispi(5/12)/√2; + cispi(7/12)/√2 cispi(7/12)/√2 0 0; + cispi(-11/12)/√2 cispi(1/12)/√2 0 0], + [0 0 cispi(11/12)/√2 cispi(-7/12)/√2; # --- + 0 0 cispi(11/12)/√2 cispi(5/12)/√2; + cispi(7/12)/√2 cispi(-5/12)/√2 0 0; + cispi(-11/12)/√2 cispi(-11/12)/√2 0 0], + [0 0 cispi(11/12)/√2 cispi(5/12)/√2; # --- + 0 0 cispi(-1/12)/√2 cispi(5/12)/√2; + cispi(7/12)/√2 cispi(7/12)/√2 0 0; + cispi(1/12)/√2 cispi(-11/12)/√2 0 0], + [0 0 cispi(5/12)/√2 cispi(11/12)/√2; # --- + 0 0 cispi(-7/12)/√2 cispi(11/12)/√2; + cispi(-11/12)/√2 cispi(1/12)/√2 0 0; + cispi(7/12)/√2 cispi(7/12)/√2 0 0], + [0 0 cispi(-11/12)/√2 cispi(-11/12)/√2; # --- + 0 0 cispi(-5/12)/√2 cispi(7/12)/√2; + cispi(-7/12)/√2 cispi(11/12)/√2 0 0; + cispi(-7/12)/√2 cispi(-1/12)/√2 0 0], + [0 0 cispi(1/12)/√2 cispi(-11/12)/√2; # --- + 0 0 cispi(7/12)/√2 cispi(7/12)/√2; + cispi(-7/12)/√2 cispi(-1/12)/√2 0 0; + cispi(-7/12)/√2 cispi(11/12)/√2 0 0], + [0 0 cispi(7/12)/√2 cispi(-5/12)/√2; # --- + 0 0 cispi(1/12)/√2 cispi(1/12)/√2; + cispi(11/12)/√2 cispi(-7/12)/√2 0 0; + cispi(-1/12)/√2 cispi(-7/12)/√2 0 0], + [0 0 cispi(1/12)/√2 cispi(1/12)/√2; # --- + 0 0 cispi(-5/12)/√2 cispi(7/12)/√2; + cispi(-7/12)/√2 cispi(11/12)/√2 0 0; + cispi(5/12)/√2 cispi(11/12)/√2 0 0], + ] + ) +LGIRS_add[sgnum][klab] = assemble_lgirreps(sgnum, kv, klab, lgops, Psτs) \ No newline at end of file diff --git a/src/special_representation_domain_kpoints.jl b/src/special_representation_domain_kpoints.jl index 8a336576..f5e4c9f2 100644 --- a/src/special_representation_domain_kpoints.jl +++ b/src/special_representation_domain_kpoints.jl @@ -1,35 +1,7 @@ -# The basic goal of this endeavor is only to find the irreps that -# are missing in ISOTROPY but feature in the bandreps from Bilbao. -# There are 145 such irreps, across 20 space groups, they are: (... I manually pieced this table together) -# ┌───────┬─────────────────────────────────────────────────────────────────────────────┬───────────────┬────────────────────────────────┐ -# │ │ Missing │ Missing │ [NS≡nonsymmorph; S≡symmorph] │ -# │ SGs │ LGIrrep labels │ KVec labels │ Match method │ -# │───────┼─────────────────────────────────────────────────────────────────────────────┼───────────────┼────────────────────────────────│ -# │ 23 │ WA₁, WA₂, WA₃, WA₄ │ WA │ S: MonoOrthTetraCubic ┐ │ -# │ 24 │ WA₁ │ WA │ NS: Inherits from └ 23 │ -# │ 82 │ PA₁, PA₂, PA₃, PA₄ │ PA │ S: MonoOrthTetraCubic │ -# │ 121 │ PA₁, PA₂, PA₃, PA₄, PA₅ │ PA │ S: MonoOrthTetraCubic ┐ │ -# │ 122 │ PA₁, PA₂ │ PA │ NS: Inherits from └ 121 │ -# │ 143 │ HA₁, HA₂, HA₃, KA₁, KA₂, KA₃, PA₁, PA₂, PA₃ │ HA, KA, PA │ S: TriHex │ -# │ 144 │ HA₁, HA₂, HA₃, KA₁, KA₂, KA₃, PA₁, PA₂, PA₃ │ HA, KA, PA │ NS: Orphan (type b) ┐ │ -# │ 145 │ HA₁, HA₂, HA₃, KA₁, KA₂, KA₃, PA₁, PA₂, PA₃ │ HA, KA, PA │ NS: Orphan (type b) ┘ │ -# │ 150 │ HA₁, HA₂, HA₃, KA₁, KA₂, KA₃, PA₁, PA₂, PA₃ │ HA, KA, PA │ S: TriHex │ -# │ 152 │ HA₁, HA₂, HA₃, KA₁, KA₂, KA₃, PA₁, PA₂, PA₃ │ HA, KA, PA │ NS: Orphan (type b) ┐ │ -# │ 154 │ HA₁, HA₂, HA₃, KA₁, KA₂, KA₃, PA₁, PA₂, PA₃ │ HA, KA, PA │ NS: Orphan (type b) ┘ │ -# │ 157 │ HA₁, HA₂, HA₃, KA₁, KA₂, KA₃, PA₁, PA₂, PA₃ │ HA, KA, PA │ S: TriHex ───────┐ │ -# │ 159 │ HA₁, HA₂, HA₃, KA₁, KA₂, KA₃, PA₁, PA₂, PA₃ │ HA, KA, PA │ NS: Inherits from └ 157 │ -# │ 174 │ HA₁, HA₂, HA₃, HA₄, HA₅, HA₆, KA₁, KA₂, KA₃, KA₄, KA₅, KA₆, PA₁, PA₂, PA₃ │ HA, KA, PA │ S: TriHex │ -# │ 189 │ HA₁, HA₂, HA₃, HA₄, HA₅, HA₆, KA₁, KA₂, KA₃, KA₄, KA₅, KA₆, PA₁, PA₂, PA₃ │ HA, KA, PA │ S: TriHex ───────┐ │ -# │ 190 │ HA₁, HA₂, HA₃, KA₁, KA₂, KA₃, KA₄, KA₅, KA₆, PA₁, PA₂, PA₃ │ HA, KA, PA │ NS: Inherits from └ 189 │ -# │ 197 │ PA₁, PA₂, PA₃, PA₄ │ PA │ S: MonoOrthTetraCubic ┐ │ -# │ 199 │ PA₁, PA₂, PA₃ │ PA │ NS: Inherits from └ 197 │ -# │ 217 │ PA₁, PA₂, PA₃, PA₄, PA₅ │ PA │ S: MonoOrthTetraCubic ┐ │ -# │ 220 │ PA₁, PA₂, PA₃ │ PA │ NS: Inherits from └ 217 │ -# └───────┴─────────────────────────────────────────────────────────────────────────────┴───────────────┴────────────────────────────────┘ -# Of course, in principle, we might consider trying to create ALL the missing points from Φ-Ω, -# but for what we need, this is sufficient. -# Of these space groups, only sg 82 has a nontrivial symmetry indicator classification for -# bosons with TR. +# The basic goal of this endeavor is only to find the k-points and irreps that +# are missing in ISOTROPY still belong to representation domain Φ (ISOTROPY all points from +# the basic domain Ω and some - but not all - from Φ). +# TODO: Unfortunately, it doesn't currently work. # --- STRUCTS --- diff --git a/src/symops.jl b/src/symops.jl index 18b4c0b1..bfd73bea 100644 --- a/src/symops.jl +++ b/src/symops.jl @@ -379,7 +379,8 @@ function check_multtable_vs_ir(lgir::LGIrrep{D}, αβγ=nothing) where D primitive_ops = primitivize.(ops, cntr) # must do multiplication table in primitive basis, cf. choices in `compose` check_multtable_vs_ir(MultTable(primitive_ops), lgir, αβγ) end -function check_multtable_vs_ir(mt::MultTable, ir::AbstractIrrep, αβγ=nothing) +function check_multtable_vs_ir(mt::MultTable, ir::AbstractIrrep, αβγ=nothing; + verbose::Bool=false) havewarned = false Ds = ir(αβγ) ops = operations(ir) @@ -419,19 +420,17 @@ function check_multtable_vs_ir(mt::MultTable, ir::AbstractIrrep, αβγ=nothing) end if !match checked[i,j] = false - if !havewarned - if verbose - println("""Provided irreps do not match group multiplication table for group $(num(ir)) in irrep $(label(ir)): - First failure at (row,col) = ($(i),$(j)); - Expected idx $(mtidx), got idx $(findall(≈(Dⁱʲ), Ds))""") - print("Expected irrep = ") - if ir isa LGIrrep - println(cis(ϕ)*Ds[mtidx]) - else - println(Dⁱʲ) - end - println("Got irrep = $(Dⁱʲ)") + if !havewarned && verbose + println("""Provided irreps do not match group multiplication table for group $(num(ir)) in irrep $(label(ir)): + First failure at (row,col) = ($(i),$(j)); + Expected idx $(mtidx), got idx $(findall(≈(Dⁱʲ), Ds))""") + print("Expected irrep = ") + if ir isa LGIrrep + println(cis(ϕ)*Ds[mtidx]) + else + println(Dⁱʲ) end + println("Got irrep = $(Dⁱʲ)") havewarned = true end end diff --git a/test/bandrep.jl b/test/bandrep.jl index fa4cc61a..d60c6ac1 100644 --- a/test/bandrep.jl +++ b/test/bandrep.jl @@ -7,7 +7,7 @@ end @testset "k-vectors required by BandRepSet analysis" begin allpaths = false spinful = false -verbose = false +debug = false @testset "Complex (no TR) irreps" begin # --- test complex-form irreps (not assuming time-reversal symmetry) --- @@ -21,35 +21,20 @@ for (sgnum, lgirsd) in enumerate(LGIRS) for (iridx_BRS, irlab_BRS) in enumerate(irlabs_BRS) klab = klabel(irlab_BRS) - if irlab_BRS ∉ irlabs_ISO - if verbose - @info "Cannot find complex irrep $(irlab_BRS) in ISOTROPY dataset (sgnum = $sgnum)" - end - @test_broken false - kidx_BRS = findfirst(==(klab), klabs_BRS) - - # test that for each of the (P,K,W,H)A k-label variants, that the associated k-vector is - # just equal to minus the kvector in the (P,K,W,H) variant (i.e. without the 'A' postscript) - @test -BRS.kvs[kidx_BRS] == kvec(first(lgirsd[klab[1:1]])) - - # TODO: to get the irreps of these variants, we need to follow the prescription - # detailed in CDML p. 69-73 (though that won't work, presumably, for sgnum=205) - # This is the subject of Cracknell & Davies 1976b (On the completeness of tables - # of irreducible representations of the classical space groups) - else - kidx_BRS = findfirst(==(klab), klabs_BRS) + @test irlab_BRS ∈ irlabs_ISO + if debug && irlab_BRS ∉ irlabs_ISO + @info "Cannot find complex irrep $(irlab_BRS) in ISOTROPY dataset (sgnum = $sgnum)" + end - # test that ISOTROPY's labelling & representation of k-vectors agree with BCD - @test BRS.kvs[kidx_BRS] == kvec(first(lgirsd[klab])) - if verbose - if BRS.kvs[kidx_BRS] ≠ kvec(first(lgirsd[klab])) - println("Different definitions of k-point labels in space group ", sgnum) - println(" BRS, ", klab, ": ",string(BRS.kvs[kidx_BRS])) - println(" ISO, ", klab, ": ",string(kvec(first(lgirsd[klab])))) - println() - end - end + # test that ISOTROPY's labelling & representation of k-vectors agree with BCD + kidx_BRS = findfirst(==(klab), klabs_BRS) + @test BRS.kvs[kidx_BRS] == kvec(first(lgirsd[klab])) + if debug && BRS.kvs[kidx_BRS] ≠ kvec(first(lgirsd[klab])) + println("Different definitions of k-point labels in space group ", sgnum) + println(" BRS, ", klab, ": ",string(BRS.kvs[kidx_BRS])) + println(" ISO, ", klab, ": ",string(kvec(first(lgirsd[klab]))), "\n") end + end end end @@ -74,18 +59,14 @@ for (sgnum, lgirsd) in enumerate(LGIRS) for (iridx_BRS, irlab_BRS) in enumerate(irlabs_BRS) klab = klabel(irlab_BRS) - if irlab_BRS ∉ realirlabs_ISO - if verbose - @info "Cannot find real irrep $(irlab_BRS) in ISOTROPY dataset (sgnum = $sgnum)" - end - @test_broken false - - else - kidx_BRS = findfirst(==(klab), klabs_BRS) - - # test that ISOTROPY's labelling & representation of k-vectors agree with BCD - @test BRS.kvs[kidx_BRS] == kvec(first(lgirsd[klab])) + @test irlab_BRS ∈ realirlabs_ISO + if debug && irlab_BRS ∉ realirlabs_ISO + @info "Cannot find real irrep $(irlab_BRS) in ISOTROPY dataset (sgnum = $sgnum)" end + + # test that ISOTROPY's labelling & representation of k-vectors agree with BCD + kidx_BRS = findfirst(==(klab), klabs_BRS) + @test BRS.kvs[kidx_BRS] == kvec(first(lgirsd[klab])) end end end diff --git a/test/parsed_vs_loaded_littlegroup_irreps.jl b/test/parsed_vs_loaded_littlegroup_irreps.jl index 4fa6ed39..f19ca14c 100644 --- a/test/parsed_vs_loaded_littlegroup_irreps.jl +++ b/test/parsed_vs_loaded_littlegroup_irreps.jl @@ -10,12 +10,31 @@ if !isdefined(Main, :LGIRS) end @testset "Test equivalence of parsed and loaded LGIrreps" begin - for sgnum in 1:230 + addition_klabs = ("WA", "HA", "KA", "PA") + for sgnum in 1:MAX_SGNUM[3] lgirsd′ = LGIRS′[sgnum] # parsed variant - lgirsd = LGIRS[sgnum] # loaded variant + lgirsd = LGIRS[sgnum] # loaded variant; may contain more irreps than parsed ISOTROPY (cf. `manual_lgirrep_additions.jl`) + + # test we have same k-points in `lgirsd` and `lgirsd′` (or, possibly more in + # k-points `lgirsd`, if it contains manual additions) + klabs = sort!(collect(keys(lgirsd))) + klabs′ = sort!(collect(keys(lgirsd′))) + if klabs == klabs′ + @test length(lgirsd) == length(lgirsd′) + else + # in case loaded irreps contain manually added 'xA'-type k-points (either "HA", + # "HA", "KA", or "PA", see `addition_klabs`) from Φ-Ω + extra_klabidxs = findall(klab -> klab ∉ klabs′, klabs)::Vector{Int} + extra_klabs = klabs[extra_klabidxs] + @test length(lgirsd) > length(lgirsd′) && all(∈(addition_klabs), extra_klabs) + end - @test length(lgirsd) == length(lgirsd′) for (kidx, (klab, lgirs)) in enumerate(lgirsd) + if !haskey(lgirsd′, klab) && klab ∈ addition_klabs + # `lgirs` is a manual addition that is not in ISOTROPY; nothing to compare + continue + end + lgirs′ = lgirsd′[klab] @test length(lgirs) == length(lgirs′) for (iridx, lgir) in enumerate(lgirs)