diff --git a/src/basisselectors.jl b/src/basisselectors.jl index b8ad3dab..05740634 100644 --- a/src/basisselectors.jl +++ b/src/basisselectors.jl @@ -128,7 +128,7 @@ maxorder(Bsel::SimpleSparseBasis, args...) = """ `AbstractSparseBasis`: Super-type for sparse basis selection as sub-levelsets of the levelset function `level` and corresponding (possibly order-dependent) -levels provided in the dictionary `maxdegs::Dict{Any, Float64}`. In the default +levels provided in the dictionary `maxlevels::Dict{Any, Float64}`. In the default implementation the levelset function and the degree function are identical. Basis functions are selected in two steps. First, "admissible" basis @@ -183,15 +183,15 @@ function SparseBasis(; maxorder::Integer = nothing, p = 1, weight = Dict(:l => 1.0, :n => 1.0), default_maxdeg = nothing, - maxdegs = nothing ) - if (default_maxdeg != nothing) && (maxdegs == nothing ) + maxlevels = nothing ) + if (default_maxdeg != nothing) && (maxlevels == nothing ) return SparseBasis(maxorder, weight, Dict{Any, Float64}("default" => default_maxdeg), p) - elseif (default_maxdeg == nothing) && (maxdegs != nothing) - SparseBasis(maxorder, weight, maxdegs, p) + elseif (default_maxdeg == nothing) && (maxlevels != nothing) + SparseBasis(maxorder, weight, maxlevels, p) else - error("""Either both or neither optional arguments `maxdegs` and + error("""Either both or neither optional arguments `maxlevels` and `default_maxdeg` were provided. To avoid ambiguity ensure that exactly one of these arguments is provided.""") end @@ -282,10 +282,87 @@ cat_weighted_degree(bb::Prodb, Bsel::CategorySparseBasis, basis::OneParticleBasi ) -# --------------------------- + # --------------------------- # Some useful filters struct NoConstant end (::NoConstant)(bb) = (length(bb) > 0) + + +""" +`EvenL`: selects all basis functions where the sum `L = sum_i l_i` of the degrees `l_i` of the spherical harmonics is even. +""" +struct EvenL + isym::Symbol + categories +end + +function (f::ACE.EvenL)(bb) + if isempty(bb) + return true + else + suml(s) = sum( [getl(O3(), b) for b in bb if getproperty(b, f.isym) == s]) + return all(iseven(suml(s)) for s in f.categories) + end +end + + + +""" +`DownsetIntersection`: Basis selector whose set of admissible specifications is the intersection +of the sets of admissible specifications of the sparse basis selectors contained in the lists `DBsels` and `ABsels`. +""" +struct DownsetIntersection <: DownsetBasisSelector + DBsels::Vector{DownsetBasisSelector} + ABsels::Vector{AbstractBasisSelector} + maxorder::Int +end + +maxlevel(Bsel::DownsetIntersection, basis::OneParticleBasis) = 1.0 + +maxlevel(bb::Prodb, Bsel::DownsetIntersection, basis::OneParticleBasis) = 1.0 + + +maxorder(Bsel::DownsetIntersection) = Bsel.maxorder + +const MAXORDER = 10000 +function Base.intersect(Bsel1::DownsetIntersection,Bsel2::DownsetBasisSelector) + return DownsetIntersection(vcat(Bsel1.DBsels,[Bsel2]), Bsel1.ABsels, minimum([maxorder(Bsel1),maxorder(Bsel2)])) +end + +function Base.intersect(Bsel1::DownsetIntersection,Bsel2::AbstractBasisSelector) + return DownsetIntersection(Bsel1.DBsels, vcat(Bsel1.ABsels,[Bsel2]), minimum([maxorder(Bsel1),maxorder(Bsel2)])) +end + +function Base.intersect(Bsel1::DownsetBasisSelector, Bsel2::AbstractBasisSelector) + Bsel = DownsetIntersection(Vector{DownsetBasisSelector}([]), Vector{AbstractBasisSelector}([]), MAXORDER) + return intersect(intersect(Bsel, Bsel1), Bsel2) +end + +function Base.intersect(Bsel1::DownsetBasisSelector, Bsel2::DownsetBasisSelector) + Bsel = DownsetIntersection(Vector{DownsetBasisSelector}([]), Vector{AbstractBasisSelector}([]), MAXORDER) + return intersect(intersect(Bsel, Bsel1), Bsel2) +end + +Base.intersect(Bsel1::AbstractBasisSelector, Bsel2::DownsetBasisSelector) = intersect(Bsel2,Bsel1) +Base.intersect(Bsel1::AbstractBasisSelector, Bsel2::DownsetIntersection) = intersect(Bsel2,Bsel1) + +function Base.intersect(Bsel1::DownsetIntersection, Bsel2::DownsetIntersection) + Bsel = deepcopy(Bsel1) + for b in Bsel2 + Bsel = intersect(Bsel, b) + end + return Bsel +end + +function level(bb, Bsel::DownsetIntersection, basis::OneParticleBasis) + return maximum([ level(bb, bsel, basis)/maxlevel(bsel,basis) for bsel in Bsel.DBsels]) + #return maximum([ level(bb, bsel, basis)/maxlevel(length(bb),bsel,basis) for bsel in Bsel.DBsels]) +end + +function filter(bb, Bsel::DownsetIntersection, basis::OneParticleBasis) + return all([filter(bb, bsel, basis) for bsel in Bsel.DBsels]) && all([filter(bb, bsel, basis) for bsel in Bsel.ABsels]) +end + diff --git a/src/bonds.jl b/src/bonds.jl index 005cb9e1..5ce1f5a5 100644 --- a/src/bonds.jl +++ b/src/bonds.jl @@ -42,7 +42,7 @@ cutoff_env(env::CylindricalBondEnvelope) = sqrt(env.rcut^2 + (env.r0cut + env.zc cutoff_radialbasis(env::CylindricalBondEnvelope) = sqrt(env.rcut^2 + (env.zcut + env.floppy * env.λ * env.r0cut)^2) struct EllipsoidBondEnvelope{T} <: BondEnvelope{T} - r0cut::T + r0cut::T # bond-length cutoff rcut::T zcut::T # must satisfy zcut >= r0cut/2 p0::Int diff --git a/src/cov_coeffs_dict.jl b/src/cov_coeffs_dict.jl new file mode 100644 index 00000000..36b637b5 --- /dev/null +++ b/src/cov_coeffs_dict.jl @@ -0,0 +1,29 @@ +crmatrices=Dict( +(l=1, m=-1, mu=-1, i=1) => SVector{3,ComplexF64}(0.1666666666666667+0.0im, 0.0+0.1666666666666667im, 0.0+0.0im), +(l=1, m=-1, mu=0, i=1) => SVector{3,ComplexF64}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=-1, mu=1, i=1) => SVector{3,ComplexF64}(-0.1666666666666667+0.0im, 0.0+-0.1666666666666667im, 0.0+0.0im), +(l=1, m=0, mu=-1, i=1) => SVector{3,ComplexF64}(0.0+0.0im, 0.0+0.0im, -0.2357022603955158+0.0im), +(l=1, m=0, mu=0, i=1) => SVector{3,ComplexF64}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=0, mu=1, i=1) => SVector{3,ComplexF64}(0.0+0.0im, 0.0+0.0im, 0.2357022603955158+0.0im), +(l=1, m=1, mu=-1, i=1) => SVector{3,ComplexF64}(-0.1666666666666667+0.0im, 0.0+0.1666666666666667im, 0.0+0.0im), +(l=1, m=1, mu=0, i=1) => SVector{3,ComplexF64}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=1, mu=1, i=1) => SVector{3,ComplexF64}(0.1666666666666667+0.0im, 0.0+-0.1666666666666667im, 0.0+0.0im), +(l=1, m=-1, mu=-1, i=2) => SVector{3,ComplexF64}(0.0+-0.1666666666666667im, 0.1666666666666667+0.0im, 0.0+0.0im), +(l=1, m=-1, mu=0, i=2) => SVector{3,ComplexF64}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=-1, mu=1, i=2) => SVector{3,ComplexF64}(0.0+-0.1666666666666667im, 0.1666666666666667+0.0im, 0.0+0.0im), +(l=1, m=0, mu=-1, i=2) => SVector{3,ComplexF64}(0.0+0.0im, 0.0+0.0im, 0.0+0.2357022603955158im), +(l=1, m=0, mu=0, i=2) => SVector{3,ComplexF64}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=0, mu=1, i=2) => SVector{3,ComplexF64}(0.0+0.0im, 0.0+0.0im, 0.0+0.2357022603955158im), +(l=1, m=1, mu=-1, i=2) => SVector{3,ComplexF64}(0.0+0.1666666666666667im, 0.1666666666666667+0.0im, 0.0+0.0im), +(l=1, m=1, mu=0, i=2) => SVector{3,ComplexF64}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=1, mu=1, i=2) => SVector{3,ComplexF64}(0.0+0.1666666666666667im, 0.1666666666666667+0.0im, 0.0+0.0im), +(l=1, m=-1, mu=-1, i=3) => SVector{3,ComplexF64}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=-1, mu=0, i=3) => SVector{3,ComplexF64}(-0.2357022603955158+0.0im, 0.0+-0.2357022603955158im, 0.0+0.0im), +(l=1, m=-1, mu=1, i=3) => SVector{3,ComplexF64}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=0, mu=-1, i=3) => SVector{3,ComplexF64}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=0, mu=0, i=3) => SVector{3,ComplexF64}(0.0+0.0im, 0.0+0.0im, 0.3333333333333333+0.0im), +(l=1, m=0, mu=1, i=3) => SVector{3,ComplexF64}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=1, mu=-1, i=3) => SVector{3,ComplexF64}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=1, mu=0, i=3) => SVector{3,ComplexF64}(0.2357022603955158+0.0im, 0.0+-0.2357022603955158im, 0.0+0.0im), +(l=1, m=1, mu=1, i=3) => SVector{3,ComplexF64}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im) +) diff --git a/src/equi_coeffs_dict.jl b/src/equi_coeffs_dict.jl new file mode 100644 index 00000000..167f08ff --- /dev/null +++ b/src/equi_coeffs_dict.jl @@ -0,0 +1,317 @@ +mrmatrices=Dict( +(l=0, m=0, mu=0, i=1, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.3333333333333333+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.3333333333333333+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.3333333333333333+0.0im), +(l=0, m=0, mu=0, i=1, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=0, m=0, mu=0, i=1, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=0, m=0, mu=0, i=2, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=0, m=0, mu=0, i=2, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.3333333333333333+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.3333333333333333+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.3333333333333333+0.0im), +(l=0, m=0, mu=0, i=2, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=0, m=0, mu=0, i=3, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=0, m=0, mu=0, i=3, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=0, m=0, mu=0, i=3, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.3333333333333333+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.3333333333333333+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.3333333333333333+0.0im), +(l=1, m=-1, mu=-1, i=1, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=-1, mu=0, i=1, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=-1, mu=1, i=1, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=0, mu=-1, i=1, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=0, mu=0, i=1, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=0, mu=1, i=1, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=1, mu=-1, i=1, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=1, mu=0, i=1, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=1, mu=1, i=1, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=-1, mu=-1, i=1, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=-1, mu=0, i=1, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+-0.1178511301977579im, 0.0+0.0im, 0.0+0.0im, 0.1178511301977579+0.0im, 0.0+0.1178511301977579im, -0.1178511301977579+0.0im, 0.0+0.0im), +(l=1, m=-1, mu=1, i=1, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=0, mu=-1, i=1, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=0, mu=0, i=1, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, -0.1666666666666667+0.0im, 0.0+0.0im, 0.1666666666666667+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=0, mu=1, i=1, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=1, mu=-1, i=1, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=1, mu=0, i=1, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+-0.1178511301977579im, 0.0+0.0im, 0.0+0.0im, -0.1178511301977579+0.0im, 0.0+0.1178511301977579im, 0.1178511301977579+0.0im, 0.0+0.0im), +(l=1, m=1, mu=1, i=1, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=-1, mu=-1, i=1, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, -0.0833333333333333+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+-0.0833333333333333im, 0.0833333333333333+0.0im, 0.0+0.0833333333333333im, 0.0+0.0im), +(l=1, m=-1, mu=0, i=1, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=-1, mu=1, i=1, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, -0.0833333333333333+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+-0.0833333333333333im, 0.0833333333333333+0.0im, 0.0+0.0833333333333333im, 0.0+0.0im), +(l=1, m=0, mu=-1, i=1, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.1178511301977579im, 0.0+0.0im, 0.0+-0.1178511301977579im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=0, mu=0, i=1, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=0, mu=1, i=1, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.1178511301977579im, 0.0+0.0im, 0.0+-0.1178511301977579im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=1, mu=-1, i=1, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, -0.0833333333333333+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0833333333333333im, 0.0833333333333333+0.0im, 0.0+-0.0833333333333333im, 0.0+0.0im), +(l=1, m=1, mu=0, i=1, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=1, mu=1, i=1, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, -0.0833333333333333+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0833333333333333im, 0.0833333333333333+0.0im, 0.0+-0.0833333333333333im, 0.0+0.0im), +(l=1, m=-1, mu=-1, i=2, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=-1, mu=0, i=2, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.1178511301977579im, 0.0+0.0im, 0.0+0.0im, -0.1178511301977579+0.0im, 0.0+-0.1178511301977579im, 0.1178511301977579+0.0im, 0.0+0.0im), +(l=1, m=-1, mu=1, i=2, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=0, mu=-1, i=2, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=0, mu=0, i=2, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.1666666666666667+0.0im, 0.0+0.0im, -0.1666666666666667+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=0, mu=1, i=2, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=1, mu=-1, i=2, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=1, mu=0, i=2, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.1178511301977579im, 0.0+0.0im, 0.0+0.0im, 0.1178511301977579+0.0im, 0.0+-0.1178511301977579im, -0.1178511301977579+0.0im, 0.0+0.0im), +(l=1, m=1, mu=1, i=2, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=-1, mu=-1, i=2, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=-1, mu=0, i=2, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=-1, mu=1, i=2, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=0, mu=-1, i=2, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=0, mu=0, i=2, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=0, mu=1, i=2, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=1, mu=-1, i=2, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=1, mu=0, i=2, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=1, mu=1, i=2, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=-1, mu=-1, i=2, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0833333333333333im, 0.0+0.0im, 0.0+0.0im, -0.0833333333333333+0.0im, 0.0+-0.0833333333333333im, 0.0833333333333333+0.0im, 0.0+0.0im), +(l=1, m=-1, mu=0, i=2, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=-1, mu=1, i=2, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+-0.0833333333333333im, 0.0+0.0im, 0.0+0.0im, 0.0833333333333333+0.0im, 0.0+0.0833333333333333im, -0.0833333333333333+0.0im, 0.0+0.0im), +(l=1, m=0, mu=-1, i=2, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.1178511301977579+0.0im, 0.0+0.0im, -0.1178511301977579+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=0, mu=0, i=2, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=0, mu=1, i=2, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, -0.1178511301977579+0.0im, 0.0+0.0im, 0.1178511301977579+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=1, mu=-1, i=2, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0833333333333333im, 0.0+0.0im, 0.0+0.0im, 0.0833333333333333+0.0im, 0.0+-0.0833333333333333im, -0.0833333333333333+0.0im, 0.0+0.0im), +(l=1, m=1, mu=0, i=2, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=1, mu=1, i=2, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+-0.0833333333333333im, 0.0+0.0im, 0.0+0.0im, -0.0833333333333333+0.0im, 0.0+0.0833333333333333im, 0.0833333333333333+0.0im, 0.0+0.0im), +(l=1, m=-1, mu=-1, i=3, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0833333333333333+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0833333333333333im, -0.0833333333333333+0.0im, 0.0+-0.0833333333333333im, 0.0+0.0im), +(l=1, m=-1, mu=0, i=3, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=-1, mu=1, i=3, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0833333333333333+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0833333333333333im, -0.0833333333333333+0.0im, 0.0+-0.0833333333333333im, 0.0+0.0im), +(l=1, m=0, mu=-1, i=3, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+-0.1178511301977579im, 0.0+0.0im, 0.0+0.1178511301977579im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=0, mu=0, i=3, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=0, mu=1, i=3, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+-0.1178511301977579im, 0.0+0.0im, 0.0+0.1178511301977579im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=1, mu=-1, i=3, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0833333333333333+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+-0.0833333333333333im, -0.0833333333333333+0.0im, 0.0+0.0833333333333333im, 0.0+0.0im), +(l=1, m=1, mu=0, i=3, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=1, mu=1, i=3, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0833333333333333+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+-0.0833333333333333im, -0.0833333333333333+0.0im, 0.0+0.0833333333333333im, 0.0+0.0im), +(l=1, m=-1, mu=-1, i=3, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+-0.0833333333333333im, 0.0+0.0im, 0.0+0.0im, 0.0833333333333333+0.0im, 0.0+0.0833333333333333im, -0.0833333333333333+0.0im, 0.0+0.0im), +(l=1, m=-1, mu=0, i=3, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=-1, mu=1, i=3, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0833333333333333im, 0.0+0.0im, 0.0+0.0im, -0.0833333333333333+0.0im, 0.0+-0.0833333333333333im, 0.0833333333333333+0.0im, 0.0+0.0im), +(l=1, m=0, mu=-1, i=3, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, -0.1178511301977579+0.0im, 0.0+0.0im, 0.1178511301977579+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=0, mu=0, i=3, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=0, mu=1, i=3, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.1178511301977579+0.0im, 0.0+0.0im, -0.1178511301977579+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=1, mu=-1, i=3, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+-0.0833333333333333im, 0.0+0.0im, 0.0+0.0im, -0.0833333333333333+0.0im, 0.0+0.0833333333333333im, 0.0833333333333333+0.0im, 0.0+0.0im), +(l=1, m=1, mu=0, i=3, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=1, mu=1, i=3, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0833333333333333im, 0.0+0.0im, 0.0+0.0im, 0.0833333333333333+0.0im, 0.0+-0.0833333333333333im, -0.0833333333333333+0.0im, 0.0+0.0im), +(l=1, m=-1, mu=-1, i=3, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=-1, mu=0, i=3, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=-1, mu=1, i=3, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=0, mu=-1, i=3, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=0, mu=0, i=3, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=0, mu=1, i=3, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=1, mu=-1, i=3, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=1, mu=0, i=3, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=1, m=1, mu=1, i=3, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-2, mu=-2, i=1, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.05+0.0im, 0.0+0.05im, 0.0+0.0im, 0.0+0.05im, -0.05+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-2, mu=-1, i=1, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-2, mu=0, i=1, j=1) => SMatrix{3, 3, ComplexF64, 9}(-0.04082482904638631+0.0im, 0.0+-0.04082482904638631im, 0.0+0.0im, 0.0+-0.04082482904638631im, 0.04082482904638631+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-2, mu=1, i=1, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-2, mu=2, i=1, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.05+0.0im, 0.0+0.05im, 0.0+0.0im, 0.0+0.05im, -0.05+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-1, mu=-2, i=1, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, -0.05+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+-0.05im, -0.05+0.0im, 0.0+-0.05im, 0.0+0.0im), +(l=2, m=-1, mu=-1, i=1, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-1, mu=0, i=1, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.04082482904638631+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.04082482904638631im, 0.04082482904638631+0.0im, 0.0+0.04082482904638631im, 0.0+0.0im), +(l=2, m=-1, mu=1, i=1, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-1, mu=2, i=1, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, -0.05+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+-0.05im, -0.05+0.0im, 0.0+-0.05im, 0.0+0.0im), +(l=2, m=0, mu=-2, i=1, j=1) => SMatrix{3, 3, ComplexF64, 9}(-0.04082482904638631+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, -0.04082482904638631+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0816496580927726+0.0im), +(l=2, m=0, mu=-1, i=1, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=0, mu=0, i=1, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.03333333333333333+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.03333333333333333+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, -0.06666666666666666+0.0im), +(l=2, m=0, mu=1, i=1, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=0, mu=2, i=1, j=1) => SMatrix{3, 3, ComplexF64, 9}(-0.04082482904638631+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, -0.04082482904638631+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0816496580927726+0.0im), +(l=2, m=1, mu=-2, i=1, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.05+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+-0.05im, 0.05+0.0im, 0.0+-0.05im, 0.0+0.0im), +(l=2, m=1, mu=-1, i=1, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=1, mu=0, i=1, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, -0.04082482904638631+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.04082482904638631im, -0.04082482904638631+0.0im, 0.0+0.04082482904638631im, 0.0+0.0im), +(l=2, m=1, mu=1, i=1, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=1, mu=2, i=1, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.05+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+-0.05im, 0.05+0.0im, 0.0+-0.05im, 0.0+0.0im), +(l=2, m=2, mu=-2, i=1, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.05+0.0im, 0.0+-0.05im, 0.0+0.0im, 0.0+-0.05im, -0.05+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=2, mu=-1, i=1, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=2, mu=0, i=1, j=1) => SMatrix{3, 3, ComplexF64, 9}(-0.04082482904638631+0.0im, 0.0+0.04082482904638631im, 0.0+0.0im, 0.0+0.04082482904638631im, 0.04082482904638631+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=2, mu=1, i=1, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=2, mu=2, i=1, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.05+0.0im, 0.0+-0.05im, 0.0+0.0im, 0.0+-0.05im, -0.05+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-2, mu=-2, i=1, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+-0.05im, 0.05+0.0im, 0.0+0.0im, 0.05+0.0im, 0.0+0.05im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-2, mu=-1, i=1, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-2, mu=0, i=1, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-2, mu=1, i=1, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-2, mu=2, i=1, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.05im, -0.05+0.0im, 0.0+0.0im, -0.05+0.0im, 0.0+-0.05im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-1, mu=-2, i=1, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.05im, 0.0+0.0im, 0.0+0.0im, -0.05+0.0im, 0.0+0.05im, -0.05+0.0im, 0.0+0.0im), +(l=2, m=-1, mu=-1, i=1, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-1, mu=0, i=1, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-1, mu=1, i=1, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-1, mu=2, i=1, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+-0.05im, 0.0+0.0im, 0.0+0.0im, 0.05+0.0im, 0.0+-0.05im, 0.05+0.0im, 0.0+0.0im), +(l=2, m=0, mu=-2, i=1, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.04082482904638631im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.04082482904638631im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+-0.0816496580927726im), +(l=2, m=0, mu=-1, i=1, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=0, mu=0, i=1, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=0, mu=1, i=1, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=0, mu=2, i=1, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+-0.04082482904638631im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+-0.04082482904638631im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0816496580927726im), +(l=2, m=1, mu=-2, i=1, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+-0.05im, 0.0+0.0im, 0.0+0.0im, -0.05+0.0im, 0.0+-0.05im, -0.05+0.0im, 0.0+0.0im), +(l=2, m=1, mu=-1, i=1, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=1, mu=0, i=1, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=1, mu=1, i=1, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=1, mu=2, i=1, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.05im, 0.0+0.0im, 0.0+0.0im, 0.05+0.0im, 0.0+0.05im, 0.05+0.0im, 0.0+0.0im), +(l=2, m=2, mu=-2, i=1, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+-0.05im, -0.05+0.0im, 0.0+0.0im, -0.05+0.0im, 0.0+0.05im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=2, mu=-1, i=1, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=2, mu=0, i=1, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=2, mu=1, i=1, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=2, mu=2, i=1, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.05im, 0.05+0.0im, 0.0+0.0im, 0.05+0.0im, 0.0+-0.05im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-2, mu=-2, i=1, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-2, mu=-1, i=1, j=3) => SMatrix{3, 3, ComplexF64, 9}(-0.05+0.0im, 0.0+-0.05im, 0.0+0.0im, 0.0+-0.05im, 0.05+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-2, mu=0, i=1, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-2, mu=1, i=1, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.05+0.0im, 0.0+0.05im, 0.0+0.0im, 0.0+0.05im, -0.05+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-2, mu=2, i=1, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-1, mu=-2, i=1, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-1, mu=-1, i=1, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.05+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.05im, 0.05+0.0im, 0.0+0.05im, 0.0+0.0im), +(l=2, m=-1, mu=0, i=1, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-1, mu=1, i=1, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, -0.05+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+-0.05im, -0.05+0.0im, 0.0+-0.05im, 0.0+0.0im), +(l=2, m=-1, mu=2, i=1, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=0, mu=-2, i=1, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=0, mu=-1, i=1, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.04082482904638631+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.04082482904638631+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, -0.0816496580927726+0.0im), +(l=2, m=0, mu=0, i=1, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=0, mu=1, i=1, j=3) => SMatrix{3, 3, ComplexF64, 9}(-0.04082482904638631+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, -0.04082482904638631+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0816496580927726+0.0im), +(l=2, m=0, mu=2, i=1, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=1, mu=-2, i=1, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=1, mu=-1, i=1, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, -0.05+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.05im, -0.05+0.0im, 0.0+0.05im, 0.0+0.0im), +(l=2, m=1, mu=0, i=1, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=1, mu=1, i=1, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.05+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+-0.05im, 0.05+0.0im, 0.0+-0.05im, 0.0+0.0im), +(l=2, m=1, mu=2, i=1, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=2, mu=-2, i=1, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=2, mu=-1, i=1, j=3) => SMatrix{3, 3, ComplexF64, 9}(-0.05+0.0im, 0.0+0.05im, 0.0+0.0im, 0.0+0.05im, 0.05+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=2, mu=0, i=1, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=2, mu=1, i=1, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.05+0.0im, 0.0+-0.05im, 0.0+0.0im, 0.0+-0.05im, -0.05+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=2, mu=2, i=1, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-2, mu=-2, i=2, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+-0.05im, 0.05+0.0im, 0.0+0.0im, 0.05+0.0im, 0.0+0.05im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-2, mu=-1, i=2, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-2, mu=0, i=2, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-2, mu=1, i=2, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-2, mu=2, i=2, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.05im, -0.05+0.0im, 0.0+0.0im, -0.05+0.0im, 0.0+-0.05im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-1, mu=-2, i=2, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.05im, 0.0+0.0im, 0.0+0.0im, -0.05+0.0im, 0.0+0.05im, -0.05+0.0im, 0.0+0.0im), +(l=2, m=-1, mu=-1, i=2, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-1, mu=0, i=2, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-1, mu=1, i=2, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-1, mu=2, i=2, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+-0.05im, 0.0+0.0im, 0.0+0.0im, 0.05+0.0im, 0.0+-0.05im, 0.05+0.0im, 0.0+0.0im), +(l=2, m=0, mu=-2, i=2, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.04082482904638631im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.04082482904638631im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+-0.0816496580927726im), +(l=2, m=0, mu=-1, i=2, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=0, mu=0, i=2, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=0, mu=1, i=2, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=0, mu=2, i=2, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+-0.04082482904638631im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+-0.04082482904638631im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0816496580927726im), +(l=2, m=1, mu=-2, i=2, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+-0.05im, 0.0+0.0im, 0.0+0.0im, -0.05+0.0im, 0.0+-0.05im, -0.05+0.0im, 0.0+0.0im), +(l=2, m=1, mu=-1, i=2, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=1, mu=0, i=2, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=1, mu=1, i=2, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=1, mu=2, i=2, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.05im, 0.0+0.0im, 0.0+0.0im, 0.05+0.0im, 0.0+0.05im, 0.05+0.0im, 0.0+0.0im), +(l=2, m=2, mu=-2, i=2, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+-0.05im, -0.05+0.0im, 0.0+0.0im, -0.05+0.0im, 0.0+0.05im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=2, mu=-1, i=2, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=2, mu=0, i=2, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=2, mu=1, i=2, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=2, mu=2, i=2, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.05im, 0.05+0.0im, 0.0+0.0im, 0.05+0.0im, 0.0+-0.05im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-2, mu=-2, i=2, j=2) => SMatrix{3, 3, ComplexF64, 9}(-0.05+0.0im, 0.0+-0.05im, 0.0+0.0im, 0.0+-0.05im, 0.05+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-2, mu=-1, i=2, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-2, mu=0, i=2, j=2) => SMatrix{3, 3, ComplexF64, 9}(-0.04082482904638631+0.0im, 0.0+-0.04082482904638631im, 0.0+0.0im, 0.0+-0.04082482904638631im, 0.04082482904638631+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-2, mu=1, i=2, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-2, mu=2, i=2, j=2) => SMatrix{3, 3, ComplexF64, 9}(-0.05+0.0im, 0.0+-0.05im, 0.0+0.0im, 0.0+-0.05im, 0.05+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-1, mu=-2, i=2, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.05+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.05im, 0.05+0.0im, 0.0+0.05im, 0.0+0.0im), +(l=2, m=-1, mu=-1, i=2, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-1, mu=0, i=2, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.04082482904638631+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.04082482904638631im, 0.04082482904638631+0.0im, 0.0+0.04082482904638631im, 0.0+0.0im), +(l=2, m=-1, mu=1, i=2, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-1, mu=2, i=2, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.05+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.05im, 0.05+0.0im, 0.0+0.05im, 0.0+0.0im), +(l=2, m=0, mu=-2, i=2, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.04082482904638631+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.04082482904638631+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, -0.0816496580927726+0.0im), +(l=2, m=0, mu=-1, i=2, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=0, mu=0, i=2, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.03333333333333333+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.03333333333333333+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, -0.06666666666666666+0.0im), +(l=2, m=0, mu=1, i=2, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=0, mu=2, i=2, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.04082482904638631+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.04082482904638631+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, -0.0816496580927726+0.0im), +(l=2, m=1, mu=-2, i=2, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, -0.05+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.05im, -0.05+0.0im, 0.0+0.05im, 0.0+0.0im), +(l=2, m=1, mu=-1, i=2, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=1, mu=0, i=2, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, -0.04082482904638631+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.04082482904638631im, -0.04082482904638631+0.0im, 0.0+0.04082482904638631im, 0.0+0.0im), +(l=2, m=1, mu=1, i=2, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=1, mu=2, i=2, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, -0.05+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.05im, -0.05+0.0im, 0.0+0.05im, 0.0+0.0im), +(l=2, m=2, mu=-2, i=2, j=2) => SMatrix{3, 3, ComplexF64, 9}(-0.05+0.0im, 0.0+0.05im, 0.0+0.0im, 0.0+0.05im, 0.05+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=2, mu=-1, i=2, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=2, mu=0, i=2, j=2) => SMatrix{3, 3, ComplexF64, 9}(-0.04082482904638631+0.0im, 0.0+0.04082482904638631im, 0.0+0.0im, 0.0+0.04082482904638631im, 0.04082482904638631+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=2, mu=1, i=2, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=2, mu=2, i=2, j=2) => SMatrix{3, 3, ComplexF64, 9}(-0.05+0.0im, 0.0+0.05im, 0.0+0.0im, 0.0+0.05im, 0.05+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-2, mu=-2, i=2, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-2, mu=-1, i=2, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.05im, -0.05+0.0im, 0.0+0.0im, -0.05+0.0im, 0.0+-0.05im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-2, mu=0, i=2, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-2, mu=1, i=2, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.05im, -0.05+0.0im, 0.0+0.0im, -0.05+0.0im, 0.0+-0.05im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-2, mu=2, i=2, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-1, mu=-2, i=2, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-1, mu=-1, i=2, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+-0.05im, 0.0+0.0im, 0.0+0.0im, 0.05+0.0im, 0.0+-0.05im, 0.05+0.0im, 0.0+0.0im), +(l=2, m=-1, mu=0, i=2, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-1, mu=1, i=2, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+-0.05im, 0.0+0.0im, 0.0+0.0im, 0.05+0.0im, 0.0+-0.05im, 0.05+0.0im, 0.0+0.0im), +(l=2, m=-1, mu=2, i=2, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=0, mu=-2, i=2, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=0, mu=-1, i=2, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+-0.04082482904638631im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+-0.04082482904638631im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0816496580927726im), +(l=2, m=0, mu=0, i=2, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=0, mu=1, i=2, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+-0.04082482904638631im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+-0.04082482904638631im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0816496580927726im), +(l=2, m=0, mu=2, i=2, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=1, mu=-2, i=2, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=1, mu=-1, i=2, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.05im, 0.0+0.0im, 0.0+0.0im, 0.05+0.0im, 0.0+0.05im, 0.05+0.0im, 0.0+0.0im), +(l=2, m=1, mu=0, i=2, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=1, mu=1, i=2, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.05im, 0.0+0.0im, 0.0+0.0im, 0.05+0.0im, 0.0+0.05im, 0.05+0.0im, 0.0+0.0im), +(l=2, m=1, mu=2, i=2, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=2, mu=-2, i=2, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=2, mu=-1, i=2, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.05im, 0.05+0.0im, 0.0+0.0im, 0.05+0.0im, 0.0+-0.05im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=2, mu=0, i=2, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=2, mu=1, i=2, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.05im, 0.05+0.0im, 0.0+0.0im, 0.05+0.0im, 0.0+-0.05im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=2, mu=2, i=2, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-2, mu=-2, i=3, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-2, mu=-1, i=3, j=1) => SMatrix{3, 3, ComplexF64, 9}(-0.05+0.0im, 0.0+-0.05im, 0.0+0.0im, 0.0+-0.05im, 0.05+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-2, mu=0, i=3, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-2, mu=1, i=3, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.05+0.0im, 0.0+0.05im, 0.0+0.0im, 0.0+0.05im, -0.05+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-2, mu=2, i=3, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-1, mu=-2, i=3, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-1, mu=-1, i=3, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.05+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.05im, 0.05+0.0im, 0.0+0.05im, 0.0+0.0im), +(l=2, m=-1, mu=0, i=3, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-1, mu=1, i=3, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, -0.05+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+-0.05im, -0.05+0.0im, 0.0+-0.05im, 0.0+0.0im), +(l=2, m=-1, mu=2, i=3, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=0, mu=-2, i=3, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=0, mu=-1, i=3, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.04082482904638631+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.04082482904638631+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, -0.0816496580927726+0.0im), +(l=2, m=0, mu=0, i=3, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=0, mu=1, i=3, j=1) => SMatrix{3, 3, ComplexF64, 9}(-0.04082482904638631+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, -0.04082482904638631+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0816496580927726+0.0im), +(l=2, m=0, mu=2, i=3, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=1, mu=-2, i=3, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=1, mu=-1, i=3, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, -0.05+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.05im, -0.05+0.0im, 0.0+0.05im, 0.0+0.0im), +(l=2, m=1, mu=0, i=3, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=1, mu=1, i=3, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.05+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+-0.05im, 0.05+0.0im, 0.0+-0.05im, 0.0+0.0im), +(l=2, m=1, mu=2, i=3, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=2, mu=-2, i=3, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=2, mu=-1, i=3, j=1) => SMatrix{3, 3, ComplexF64, 9}(-0.05+0.0im, 0.0+0.05im, 0.0+0.0im, 0.0+0.05im, 0.05+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=2, mu=0, i=3, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=2, mu=1, i=3, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.05+0.0im, 0.0+-0.05im, 0.0+0.0im, 0.0+-0.05im, -0.05+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=2, mu=2, i=3, j=1) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-2, mu=-2, i=3, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-2, mu=-1, i=3, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.05im, -0.05+0.0im, 0.0+0.0im, -0.05+0.0im, 0.0+-0.05im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-2, mu=0, i=3, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-2, mu=1, i=3, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.05im, -0.05+0.0im, 0.0+0.0im, -0.05+0.0im, 0.0+-0.05im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-2, mu=2, i=3, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-1, mu=-2, i=3, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-1, mu=-1, i=3, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+-0.05im, 0.0+0.0im, 0.0+0.0im, 0.05+0.0im, 0.0+-0.05im, 0.05+0.0im, 0.0+0.0im), +(l=2, m=-1, mu=0, i=3, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-1, mu=1, i=3, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+-0.05im, 0.0+0.0im, 0.0+0.0im, 0.05+0.0im, 0.0+-0.05im, 0.05+0.0im, 0.0+0.0im), +(l=2, m=-1, mu=2, i=3, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=0, mu=-2, i=3, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=0, mu=-1, i=3, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+-0.04082482904638631im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+-0.04082482904638631im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0816496580927726im), +(l=2, m=0, mu=0, i=3, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=0, mu=1, i=3, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+-0.04082482904638631im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+-0.04082482904638631im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0816496580927726im), +(l=2, m=0, mu=2, i=3, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=1, mu=-2, i=3, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=1, mu=-1, i=3, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.05im, 0.0+0.0im, 0.0+0.0im, 0.05+0.0im, 0.0+0.05im, 0.05+0.0im, 0.0+0.0im), +(l=2, m=1, mu=0, i=3, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=1, mu=1, i=3, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.05im, 0.0+0.0im, 0.0+0.0im, 0.05+0.0im, 0.0+0.05im, 0.05+0.0im, 0.0+0.0im), +(l=2, m=1, mu=2, i=3, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=2, mu=-2, i=3, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=2, mu=-1, i=3, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.05im, 0.05+0.0im, 0.0+0.0im, 0.05+0.0im, 0.0+-0.05im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=2, mu=0, i=3, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=2, mu=1, i=3, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.05im, 0.05+0.0im, 0.0+0.0im, 0.05+0.0im, 0.0+-0.05im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=2, mu=2, i=3, j=2) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-2, mu=-2, i=3, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-2, mu=-1, i=3, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-2, mu=0, i=3, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0816496580927726+0.0im, 0.0+0.0816496580927726im, 0.0+0.0im, 0.0+0.0816496580927726im, -0.0816496580927726+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-2, mu=1, i=3, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-2, mu=2, i=3, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-1, mu=-2, i=3, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-1, mu=-1, i=3, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-1, mu=0, i=3, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, -0.0816496580927726+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+-0.0816496580927726im, -0.0816496580927726+0.0im, 0.0+-0.0816496580927726im, 0.0+0.0im), +(l=2, m=-1, mu=1, i=3, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=-1, mu=2, i=3, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=0, mu=-2, i=3, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=0, mu=-1, i=3, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=0, mu=0, i=3, j=3) => SMatrix{3, 3, ComplexF64, 9}(-0.06666666666666666+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, -0.06666666666666666+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.1333333333333333+0.0im), +(l=2, m=0, mu=1, i=3, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=0, mu=2, i=3, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=1, mu=-2, i=3, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=1, mu=-1, i=3, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=1, mu=0, i=3, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0816496580927726+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+-0.0816496580927726im, 0.0816496580927726+0.0im, 0.0+-0.0816496580927726im, 0.0+0.0im), +(l=2, m=1, mu=1, i=3, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=1, mu=2, i=3, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=2, mu=-2, i=3, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=2, mu=-1, i=3, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=2, mu=0, i=3, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0816496580927726+0.0im, 0.0+-0.0816496580927726im, 0.0+0.0im, 0.0+-0.0816496580927726im, -0.0816496580927726+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=2, mu=1, i=3, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im), +(l=2, m=2, mu=2, i=3, j=3) => SMatrix{3, 3, ComplexF64, 9}(0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im, 0.0+0.0im) +) diff --git a/src/properties.jl b/src/properties.jl index acc7a69a..a0be4270 100644 --- a/src/properties.jl +++ b/src/properties.jl @@ -214,9 +214,14 @@ end coco_init(phi::EuclideanVector{CT}, l, m, μ, T, A) where {CT<:Real} = ( (l == 1 && abs(m) <= 1 && abs(μ) <= 1) - ? [EuclideanVector(rmatrices[m,μ][:,k]) for k=1:3] + ? [EuclideanVector(conj(crmatrices[(l=l,m=-m,mu=-μ,i=i)])) for i=1:3] : coco_zeros(phi, l, m, μ, T, A) ) +#coco_init(phi::EuclideanVector{CT}, l, m, μ, T, A) where {CT<:Real} = ( +# (l == 1 && abs(m) <= 1 && abs(μ) <= 1) +# ? [EuclideanVector(rmatrices[m,μ][:,k]) for k=1:3] +# : coco_zeros(phi, l, m, μ, T, A) ) + # coco_init(phi::EuclideanVector{CT} # this is not needed, since the EuclideanVector should never give us # a constant basis anyhow. Still ... this could become a problem if we @@ -238,18 +243,100 @@ coco_filter(::EuclideanVector, ll, mm, kk) = coco_dot(u1::EuclideanVector, u2::EuclideanVector) = dot(u1.val, u2.val) -rmatrices = Dict( - (-1,-1) => SMatrix{3, 3, ComplexF64, 9}(1/6, 1im/6, 0, -1im/6, 1/6, 0, 0, 0, 0), - (-1,0) => SMatrix{3, 3, ComplexF64, 9}(0, 0, 0, 0, 0, 0, 1/(3*sqrt(2)), 1im/(3*sqrt(2)), 0), - (-1,1) => SMatrix{3, 3, ComplexF64, 9}(-1/6, -1im/6, 0, -1im/6, 1/6, 0, 0, 0, 0), - (0,-1) => SMatrix{3, 3, ComplexF64, 9}(0, 0, 1/(3*sqrt(2)), 0, 0, -1im/(3*sqrt(2)), 0, 0, 0), - (0,0) => SMatrix{3, 3, ComplexF64, 9}(0, 0, 0, 0, 0, 0, 0, 0, 1/3), - (0,1) => SMatrix{3, 3, ComplexF64, 9}(0, 0, -1/(3*sqrt(2)), 0, 0, -1im/(3*sqrt(2)), 0, 0, 0), - (1,-1) => SMatrix{3, 3, ComplexF64, 9}(-1/6, 1im/6, 0, 1im/6, 1/6, 0, 0, 0, 0), - (1,0) => SMatrix{3, 3, ComplexF64, 9}(0, 0, 0, 0, 0, 0, -1/(3*sqrt(2)), 1im/(3*sqrt(2)), 0), - (1,1) => SMatrix{3, 3, ComplexF64, 9}(1/6, -1im/6, 0, 1im/6, 1/6, 0, 0, 0, 0) - ) +include("cov_coeffs_dict.jl") + +#---------------------- Equivariant matrices + +struct EuclideanMatrix{T} <: AbstractProperty + val::SMatrix{3, 3, T, 9} +end + +function Base.show(io::IO, φ::EuclideanMatrix) + # println(io, "3x3 $(typeof(φ)):") + println(io, "e[ $(φ.val[1,1]), $(φ.val[1,2]), $(φ.val[1,3]);") + println(io, " $(φ.val[2,1]), $(φ.val[2,2]), $(φ.val[2,3]);") + print(io, " $(φ.val[3,1]), $(φ.val[3,2]), $(φ.val[3,3]) ]") +end + +real(φ::EuclideanMatrix) = EuclideanMatrix(real.(φ.val)) +complex(φ::EuclideanMatrix) = EuclideanMatrix(complex(φ.val)) +complex(::Type{EuclideanMatrix{T}}) where {T} = EuclideanMatrix{complex(T)} + ++(x::SMatrix{3}, y::EuclideanMatrix) = EuclideanMatrix(x + y.val) +Base.convert(::Type{SMatrix{3, 3, T, 9}}, φ::EuclideanMatrix) where {T} = convert(SMatrix{3, 3, T, 9}, φ.val) + +isrealB(::EuclideanMatrix{T}) where {T} = (T == real(T)) +isrealAA(::EuclideanMatrix) = false + + +#fltype(::EuclideanMatrix{T}) where {T} = T + +EuclideanMatrix{T}() where {T <: Number} = EuclideanMatrix{T}(zero(SMatrix{3, 3, T, 9})) +EuclideanMatrix(T::DataType=Float64) = EuclideanMatrix{T}() + + +function filter(φ::EuclideanMatrix, grp::O3, bb::Array) + if length(bb) == 0 # no zero-correlations allowed + return false + end + if length(bb) == 1 #MS: Not sure if this should be here + return true + end + suml = sum( getl(grp, bi) for bi in bb ) + if haskey(bb[1], msym(grp)) # depends on context whether m come along? + summ = sum( getm(grp, bi) for bi in bb ) + return iseven(suml) && abs(summ) <= 2 + end + return iseven(suml) +end + +rot3Dcoeffs(::EuclideanMatrix,T=Float64) = Rot3DCoeffsEquiv{T,1}(Dict[], ClebschGordan(T)) + +write_dict(φ::EuclideanMatrix{T}) where {T} = + Dict("__id__" => "ACE_EuclideanMatrix", + "valr" => write_dict(real.(Matrix(φ.val))), + "vali" => write_dict(imag.(Matrix(φ.val))), + "T" => write_dict(T) ) + +function read_dict(::Val{:ACE_EuclideanMatrix}, D::Dict) + T = read_dict(D["T"]) + valr = SMatrix{3, 3, T, 9}(read_dict(D["valr"])) + vali = SMatrix{3, 3, T, 9}(read_dict(D["vali"])) + return EuclideanMatrix{T}(valr + im * vali) +end + +# differentiation - cf #27 +# *(φ::EuclideanMatrix, dAA::SVector) = φ.val * dAA' + +#coco_init(phi::EuclideanMatrix{CT}, l, m, μ, T, A) where {CT<:Real} = ( +# (l <= 2 && abs(m) <= l && abs(μ) <= l) +# ? vec([EuclideanMatrix(conj.(transpose(mrmatrices[(m,μ,i,j)]))) for i=1:3 for j=1:3]) +# : coco_zeros(phi, l, m, μ, T, A) ) +coco_init(phi::EuclideanMatrix{CT}, l, m, μ, T, A) where {CT<:Real} = ( + (l <= 2 && abs(m) <= l && abs(μ) <= l) + ? vec([EuclideanMatrix(conj.(mrmatrices[(l=l,m=-m,mu=-μ,i=i,j=j)])) for i=1:3 for j=1:3]) + : coco_zeros(phi, l, m, μ, T, A) ) + +#coco_init(::EuclideanMatrix{CT}) where {CT<:Real} = [EuclideanMatrix(SMatrix{3,3,Complex{CT},9}([1.0,0,0,0,1.0,0,0,0,1.0]))] +coco_type(φ::EuclideanMatrix) = typeof(complex(φ)) +coco_type(::Type{EuclideanMatrix{T}}) where {T} = EuclideanMatrix{complex(T)} + +# This is slightly different from implementation in EuclideanVector! +coco_zeros(φ::EuclideanMatrix, ll, mm, kk, T, A) = zeros(typeof(complex(φ)), 9) +#EuclideanMatrix.(zeros(SMatrix{3, 3, Complex{T}, 9},9)) + +coco_filter(::EuclideanMatrix, ll, mm) = + iseven(sum(ll)) && (abs(sum(mm)) <= 2) + +coco_filter(::EuclideanMatrix, ll, mm, kk) = + abs(sum(mm)) <= 2 && + abs(sum(kk)) <= 2 && + iseven(sum(ll)) + +coco_dot(u1::EuclideanMatrix, u2::EuclideanMatrix) = sum(transpose(conj.( u1.val)) * u2.val) +#dot(u1.val, u2.val) +include("equi_coeffs_dict.jl") # --------------------- # some codes to help convert from svector, smatrix to spherical ... diff --git a/src/utils.jl b/src/utils.jl index d2a5ee35..d9e7ba3d 100644 --- a/src/utils.jl +++ b/src/utils.jl @@ -74,7 +74,7 @@ BondBasisSelector(Bsel::ACE.SparseBasis; weight_cat = Dict(:bond => bond_weight, :env=> env_weight) ) -function SymmetricBond_basis(ϕ::ACE.AbstractProperty, env::ACE.BondEnvelope, Bsel::ACE.SparseBasis; RnYlm = nothing, kwargs...) +function SymmetricBond_basis(ϕ::ACE.AbstractProperty, env::ACE.BondEnvelope, Bsel::ACE.SparseBasis; RnYlm = nothing, bondsymmetry=nothing, kwargs...) BondSelector = BondBasisSelector(Bsel; kwargs...) if RnYlm === nothing RnYlm = RnYlm_1pbasis(; r0 = ACE.cutoff_radialbasis(env), @@ -85,9 +85,16 @@ function SymmetricBond_basis(ϕ::ACE.AbstractProperty, env::ACE.BondEnvelope, Bs kwargs... ) end + filterfun = _->true + if bondsymmetry == "Invariant" + filterfun = ACE.EvenL(:be, [:bond]) + end + if bondsymmetry == "Covariant" + filterfun = x -> !(ACE.EvenL(:be, [:bond])(x)) + end Bc = ACE.Categorical1pBasis([:bond, :env]; varsym = :be, idxsym = :be ) B1p = Bc * RnYlm * env - return ACE.SymmetricBasis(ϕ, B1p, BondSelector) + return ACE.SymmetricBasis(ϕ, B1p, BondSelector; filterfun = filterfun) end # invariant_basis(; kwargs...) = diff --git a/test/runtests.jl b/test/runtests.jl index c1dc0d42..d4c119de 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -27,6 +27,7 @@ using ACE, Test, Printf, LinearAlgebra, StaticArrays, BenchmarkTools # @testset "Clebsch-Gordan" begin include("test_cg.jl") end @testset "SymmetricBasis" begin include("test_symmbasis.jl") end @testset "EuclideanVector" begin include("test_euclvec.jl") end + @testset "EuclideanMatrix" begin include("test_EuclideanMatrix.jl") end @testset "Multiple SH Bases" begin include("test_multish.jl") end # Model tests @@ -35,11 +36,12 @@ using ACE, Test, Printf, LinearAlgebra, StaticArrays, BenchmarkTools @testset "AD-LinearACEModel" begin include("test_admodel.jl") end # Experimental material + @testset "Bonds" begin include("test_bonds.jl") end + @testset "Bond BasisSelectors" begin include("test_bondbasisselectors.jl") end @testset "Sparsification" begin include("test_sparsify.jl") end @testset "XScal1pBasis" begin include("test_xscal1p.jl") end # @testset "Multipliers" begin include("test_multiplier.jl") end # @testset "Bonds" begin include("test_bonds.jl") end - # @testset "BasisSelectors" begin include("test_basisselectors.jl") end end diff --git a/test/test_BasisSelectorIntersection.jl b/test/test_BasisSelectorIntersection.jl new file mode 100644 index 00000000..b0af562a --- /dev/null +++ b/test/test_BasisSelectorIntersection.jl @@ -0,0 +1,45 @@ +using ACE, Test, ACEbase, ACEbase.Testing, StaticArrays +using ACE.Random: rand_rot, rand_refl +using Random: shuffle + + +r0cut = 2.0 +rcut = 1.0 +zcut = 2.0 +env = ACE.EllipsoidBondEnvelope(r0cut, rcut, zcut;floppy=false, λ= .5) + + +@info( "Very basic test for intersection") +for maxorder = [1,2,3,4] + + Bsel = ACE.SparseBasis(; maxorder=maxorder, p = 2, default_maxdeg = 4) + + + RnYlm = ACE.Utils.RnYlm_1pbasis(; r0 = ACE.cutoff_radialbasis(env), + rin = 0.0, + trans = PolyTransform(1, ACE.cutoff_radialbasis(env)), + pcut = 0, + pin = 0, Bsel = Bsel + ) + + basis = ACE.Utils.SymmetricBond_basis(ACE.Invariant(), env, Bsel;RnYlm=RnYlm ) + + Bsel2 = ACE.CategorySparseBasis(:be, [:bond, :env]; maxorder = ACE.maxorder(Bsel), + p = Bsel.p, + weight = Bsel.weight, + maxlevels = Bsel.maxlevels, + minorder_dict = Dict( :bond => 1), + maxorder_dict = Dict( :bond => 1), + weight_cat = Dict(:bond => 1.0, :env=> 1.0) + ) + + + BselIntersection = intersect(Bsel,Bsel2) + + Bc = ACE.Categorical1pBasis([:bond, :env]; varsym = :be, idxsym = :be ) + B1p = Bc * RnYlm * env + basis2 = ACE.SymmetricBasis(ACE.Invariant(), B1p, BselIntersection;) + + print_tf(@test length(basis) == length(basis2)) + +end \ No newline at end of file diff --git a/test/test_EuclideanMatrix.jl b/test/test_EuclideanMatrix.jl new file mode 100644 index 00000000..d1c940e9 --- /dev/null +++ b/test/test_EuclideanMatrix.jl @@ -0,0 +1,147 @@ +using ACE, StaticArrays +using Random, Printf, Test, LinearAlgebra, ACE.Testing +using ACE: evaluate, evaluate_d, SymmetricBasis, PIBasis, EuclideanMatrix +using ACE.Random: rand_rot, rand_refl +using ACEbase.Testing: fdtest + +## construct the 1p-basis +maxdeg = 6 +ord = 3 +Bsel = SimpleSparseBasis(ord, maxdeg) + +B1p = ACE.Utils.RnYlm_1pbasis(; maxdeg=maxdeg) + +# generate a configuration +nX = 10 +Xs = rand(PositionState{Float64}, B1p.bases[1], nX) +cfg = ACEConfig(Xs) + +## + +@info("SymmetricBasis construction and evaluation: EuclideanMatrix") + + +φ = ACE.EuclideanMatrix(Float64) +pibasis = PIBasis(B1p, Bsel; property = φ) +basis = SymmetricBasis(φ, pibasis) +@time SymmetricBasis(φ, pibasis) + +BB = evaluate(basis, cfg) + +Iz = findall(iszero, sum(norm, basis.A2Bmap, dims=1)[:]) +if !isempty(Iz) + @warn("The A2B map for EuclideanMatrix has $(length(Iz))/$(length(basis.pibasis)) zero-columns!!!!") +end + +## + +@info("Test FIO") +using ACEbase.Testing: test_fio + +println(@test(all(test_fio(basis; warntype = false)))) + +## + +@info("Test equivariance properties for real version") + +tol = 1e-12 + +## +# for (b1, b2) in zip(BB_rot, BB) +#print_tf(@test all([ norm(Q' * b1 * Q - b2) < tol +# for (b1, b2) in zip(BB_rot, BB) ])) +## +@info("check for rotation, permutation and inversion equivariance") +for ntest = 1:30 + local Xs, BB + Xs = rand(PositionState{Float64}, B1p.bases[1], nX) + BB = evaluate(basis, ACEConfig(Xs)) + Q = rand([-1,1]) * ACE.Random.rand_rot() + Xs_rot = Ref(Q) .* shuffle(Xs) + BB_rot = evaluate(basis, ACEConfig(Xs_rot)) + print_tf(@test all([ norm(Q' * b1 * Q - b2) < tol + for (b1, b2) in zip(BB_rot, BB) ])) +end +println() + +@info("Check for some non-symmetric matrix functions") +for ntest = 1:30 + local Xs, BB + Xs = rand(PositionState{Float64}, B1p.bases[1], nX) + BB = evaluate(basis, ACEConfig(Xs)) + print_tf(@test any([ b.val != transpose(b.val) + for b in BB ])) +end +println() + +## + +imtol = 5.0 +@info("Check magnitude of complex part") +for ntest = 1:30 + local Xs, BB + Xs = rand(PositionState{Float64}, B1p.bases[1], nX) + BB = evaluate(basis, ACEConfig(Xs)) + for (i,b) in enumerate(BB) + if norm(imag(b.val)) > imtol + @warn( "Large imaginary part for $(ACE.get_spec(basis)[i]), $(norm(imag(b.val)))") + end + end + #println(maximum([ norm(imag(b.val))/ norm(real(b.val)) for b in BBs ])) + #print_tf(@test all([ norm(imag(b.val)) < .1 for b in BB ])) +end +println() +print(ACE.get_spec(basis)[1]) +## + +@info("Test equivariance properties for complex version") + +basis = SymmetricBasis(φ, pibasis; isreal=false) +# a stupid but necessary test +BB = evaluate(basis, cfg) +BB1 = basis.A2Bmap * evaluate(basis.pibasis, cfg) +println(@test isapprox(BB, BB1, rtol=1e-10)) # MS: This test will fail for isreal=true + + +@info("check for rotation, permutation and inversion equivariance") +for ntest = 1:30 + local Xs, BB + Xs = rand(PositionState{Float64}, B1p.bases[1], nX) + BB = evaluate(basis, ACEConfig(Xs)) + Q = rand([-1,1]) * ACE.Random.rand_rot() + Xs_rot = Ref(Q) .* shuffle(Xs) + BB_rot = evaluate(basis, ACEConfig(Xs_rot)) + print_tf(@test all([ norm(Q' * b1 * Q - b2) < tol + for (b1, b2) in zip(BB_rot, BB) ])) +end +println() + +# ## keep for further profiling +# +# φ = ACE.EuclideanVector(Complex{Float64}) +# pibasis = PIBasis(B1p, ord, maxdeg; property = φ, isreal = false) +# basis = SymmetricBasis(pibasis, φ) +# @time SymmetricBasis(pibasis, φ); +# +# Profile.clear(); # Profile.init(; delay = 0.0001) +# @profile SymmetricBasis(pibasis, φ); +# ProfileView.view() + +## + +#= +@info(" ... derivatives") +_rrval(x::ACE.XState) = x.rr +for ntest = 1:30 + Us = randn(SVector{3,Float64 }, length(Xs)) + C = randn(typeof(φ.val), length(basis)) + F = t -> sum( sum(c .* b.val) + for (c, b) in zip(C, ACE.evaluate(basis, ACEConfig(Xs + t[1] * Us))) ) + dF = t -> [ sum( sum(c .* db) + for (c, db) in zip(C, _rrval.(ACE.evaluate_d(basis, ACEConfig(Xs + t[1] * Us))) * Us) ) ] + print_tf(@test fdtest(F, dF, [0.0], verbose=false)) +end +println() +=# + +## diff --git a/test/test_basisselectors.jl b/test/test_basisselectors.jl deleted file mode 100644 index ea74f095..00000000 --- a/test/test_basisselectors.jl +++ /dev/null @@ -1,72 +0,0 @@ -using ACE, Test, ACEbase, ACEbase.Testing, StaticArrays -using ACE.Random: rand_rot, rand_refl -using Random: shuffle - -## -#= -@info("Rudimentary tests for sparse basis selectors and intersections of such") -r0cut = 2.0 -rcut = 1.0 -zcut = 2.0 -env = ACE.EllipsoidBondEnvelope(r0cut, rcut, zcut;floppy=false, λ= .5) - -maxorder = 3 -dmaxdeg = 4 -Bsel_p2 = ACE.SparseBasis(maxorder; p = 2, default_maxdeg = dmaxdeg) -Bsel_p1 = ACE.SparseBasis(maxorder; p = 1, default_maxdeg = dmaxdeg) - -Bsel_intesect = ACE.intersect(Bsel_p1,Bsel_p2) -B1p = ACE.Utils.RnYlm_1pbasis(; maxdeg=dmaxdeg) -basis_intersect_inv = ACE.SymmetricBasis(ACE.Invariant(), B1p, Bsel_intesect) -=# - -@info("Test bond basis selectors") - -r0cut = 2.0 -rcut = 1.0 -zcut = 2.0 -env = ACE.EllipsoidBondEnvelope(r0cut, rcut, zcut;floppy=false, λ= .5) - -maxorder = 3 -Bsel = ACE.SparseBasis(; maxorder=maxorder, p = 2, default_maxdeg = 4) - -## - -@info("Test invariance") - - -basis_inv = ACE.Utils.SymmetricBond_basis(ACE.Invariant(), env, Bsel; ) -@show length(basis_inv) - -rr0 = SVector{3}(rand(Float64,3)) -cfg = [ ACE.State(rr = SVector{3}(rand(Float64,3)), rr0 = rr0, - be = rand([:bond,:env])) - for _ = 1:10 ] |> ACEConfig -B1_inv = ACE.evaluate(basis_inv, cfg) - -for ntest = 1:30 - Q = rand_refl() * rand_rot() - Xs2 = ACE.shuffle([ ACE.State(rr = Q * X.rr, rr0 = Q * X.rr0, be = X.be) for X in cfg.Xs ]) - B2_inv = ACE.evaluate(basis_inv, ACEConfig(Xs2)) - print_tf(@test isapprox(B1_inv, B2_inv, rtol=1e-10)) -end -println() -@info("Test Euclidian covariance") - -basis_cov = ACE.Utils.SymmetricBond_basis(ACE.EuclideanVector(), env, Bsel; ) -@show length(basis_cov) - -rr0 = SVector{3}(rand(Float64,3)) -cfg = [ ACE.State(rr = SVector{3}(rand(Float64,3)), rr0 = rr0, - be = rand([:bond,:env])) - for _ = 1:10 ] |> ACEConfig -B1_cov = ACE.evaluate(basis_cov, cfg) - - -for ntest = 1:30 - Q = rand_refl() * rand_rot() - Xs2 = ACE.shuffle([ ACE.State(rr = Q * X.rr, rr0 = Q * X.rr0, be = X.be) for X in cfg.Xs ]) - B2_cov = ACE.evaluate(basis_cov, ACEConfig(Xs2)) - print_tf(@test isapprox( map(x->Q*x, B1_cov), B2_cov, rtol=1e-10)) -end -println() \ No newline at end of file diff --git a/test/test_bondbasisselectors.jl b/test/test_bondbasisselectors.jl new file mode 100644 index 00000000..22ca02b1 --- /dev/null +++ b/test/test_bondbasisselectors.jl @@ -0,0 +1,170 @@ +using ACE, Test, ACEbase, ACEbase.Testing, StaticArrays +using ACE.Random: rand_rot, rand_refl +using Random: shuffle +## +#= +@info("Rudimentary tests for sparse basis selectors and intersections of such") +r0cut = 2.0 +rcut = 1.0 +zcut = 2.0 +env = ACE.EllipsoidBondEnvelope(r0cut, rcut, zcut;floppy=false, λ= .5) + +maxorder = 3 +dmaxdeg = 4 +Bsel_p2 = ACE.SparseBasis(maxorder; p = 2, default_maxdeg = dmaxdeg) +Bsel_p1 = ACE.SparseBasis(maxorder; p = 1, default_maxdeg = dmaxdeg) + +Bsel_intesect = ACE.intersect(Bsel_p1,Bsel_p2) +B1p = ACE.Utils.RnYlm_1pbasis(; maxdeg=dmaxdeg) +basis_intersect_inv = ACE.SymmetricBasis(ACE.Invariant(), B1p, Bsel_intesect) +=# + +@info("Test bond basis selectors") + +r0cut = 2.0 +rcut = 1.0 +zcut = 2.0 +env = ACE.EllipsoidBondEnvelope(r0cut, rcut, zcut;floppy=false, λ= .5) + +maxorder = 3 +Bsel = ACE.SparseBasis(; maxorder=maxorder, p = 2, default_maxdeg = 4) + +## +@info("Test rotation-equivariance properties") + +tol = 10^-14 +for property in [ACE.Invariant(), ACE.EuclideanVector(), ACE.EuclideanMatrix()] + + basis = ACE.Utils.SymmetricBond_basis(property, env, Bsel; ) + @show length(basis) + + rr0 = SVector{3}(rand(Float64,3)) + cfg = [ ACE.State(rr = SVector{3}(rand(Float64,3)), rr0 = rr0, + be = rand([:bond,:env])) + for _ = 1:10 ] |> ACEConfig + B1 = ACE.evaluate(basis, cfg) + + println("------------------------------------------------------------") + @info("Test rotation-equivariance for property $(typeof(property)) with tol = $tol") + + for ntest = 1:30 + Q = rand_refl() * rand_rot() + Xs2 = ACE.shuffle([ ACE.State(rr = Q * X.rr, rr0 = Q * X.rr0, be = X.be) for X in cfg.Xs ]) + B2 = ACE.evaluate(basis, ACEConfig(Xs2)) + if property == ACE.Invariant() + print_tf(@test isapprox(B1, B2, rtol=tol)) + elseif property == ACE.EuclideanVector() + print_tf(@test isapprox( map(x->Q*x, B1), B2, rtol=tol)) + elseif property == ACE.EuclideanMatrix() + print_tf(@test isapprox( map(x->Q * x * Q', B1), B2, rtol=tol)) + end + end + println() +end + + +env0 = ACE.EllipsoidBondEnvelope(r0cut, rcut, zcut; p0=1, pr=1, floppy=false, λ= 0.0) + +maxorder = 2 +Bsel = ACE.SparseBasis(;maxorder=maxorder, p = 2, default_maxdeg = 5) + +RnYlm = ACE.Utils.RnYlm_1pbasis(; r0 = ACE.cutoff_radialbasis(env), + rin = 0.0, + trans = PolyTransform(1, ACE.cutoff_radialbasis(env)), + pcut = 0, + pin = 0, Bsel = Bsel + ) + +function get_config(X::Vector{SVector{3, Float64}}, k::Int, j::Int) + n = length(X) + Js = [i for i = 1:n if i != k] + Rs = [X[i] - X[k] for i = 1:n if i != k] + ba = (j=j,r= X[j] - X[k]) + config = [ ACE.State(rr = (j==ba.j ? ba.r : r-.5 * ba.r), rr0 = ba.r, be = (j==ba.j ? :bond : :env )) for (j,r) in zip(Js, Rs)] |> ACEConfig + return config +end + +n_particle = 11 +tol = 10^-14 +#env0 = ACE.EllipsoidBondEnvelope(r0cut, rcut, zcut;floppy=false, λ= 0.0) +@info("Test equivariance properties under bond symmetry constraints"); +for bs in ["Invariant", "Covariant"] + for property in [ACE.Invariant(), ACE.EuclideanVector(), ACE.EuclideanMatrix()] + + k= rand(1:n_particle) + j= rand([ i for i =1:n_particle if i != k]) + basis = ACE.Utils.SymmetricBond_basis(property, env0, Bsel; bondsymmetry="Invariant" ) + @show length(basis) + + rr0 = SVector{3}(rand(Float64,3)) + X = [ SVector{3}(rand(Float64,3)) for _ = 1:n_particle ] + cfg = get_config(X, k, j) + B1 = ACE.evaluate(basis, cfg) + + println("------------------------------------------------------------") + @info( string("Test rotation-equivariance for property $(typeof(property)) and bond symmetry of type ", bs)) + + for ntest = 1:30 + Q = rand_refl() * rand_rot() + X2 = [Q * x for x in X] + cfg2 = get_config(X2, k, j) + B2 = ACE.evaluate(basis, cfg2) + if property == ACE.Invariant() + print_tf(@test isapprox(B1, B2, rtol=tol)) + elseif property == ACE.EuclideanVector() + print_tf(@test isapprox( map(x->Q*x, B1), B2, rtol=tol)) + elseif property == ACE.EuclideanMatrix() + print_tf(@test isapprox( map(x->Q * x * Q', B1), B2, rtol=tol)) + end + end + println() + end +end + +@info("Test bond-symmetry conditions") + +tol = 10^-10 +for property in [ACE.Invariant(), ACE.EuclideanVector(), ACE.EuclideanMatrix()] + + println("------------------------------------------------------------") + @info("Test bond-symmetry conditions for property $(typeof(property)) and tolerance tol = $tol") + println() + basis_bondinv = ACE.Utils.SymmetricBond_basis(property, env0, Bsel; bondsymmetry="Invariant"); + #@show length(basis_bondinv ); + + @info("Test for invariance under bond inversion"); + for ntest = 1:300 + rr0 = SVector{3}(rand(Float64,3)); + randX = [ SVector{3}(rand(Float64,3)) for _ =1:10]; + cfg1 = vcat( [ ACE.State(rr = r-.5*rr0, rr0 = rr0, be = :env) for r in randX ] , [ACE.State(rr = rr0, rr0 = rr0, be = :bond)]) |> ACEConfig; + cfg2 = vcat( [ ACE.State(rr = r-.5*rr0, rr0 = -rr0, be = :env) for r in randX ] , [ACE.State(rr = -rr0, rr0 = -rr0, be = :bond)]) |> ACEConfig; + B1 = ACE.evaluate(basis_bondinv , cfg1); + B2 = ACE.evaluate(basis_bondinv, cfg2); + print_tf(@test all([ isapprox(b1.val,b2.val, rtol = tol) for (b1,b2) in zip(B1,B2)])); + end + println() + + + @info("Test for covariance under bond inversion"); + basis_bondcov = ACE.Utils.SymmetricBond_basis(property, env0, Bsel; bondsymmetry="Covariant"); + #@show length(basis_bondcov ); + for ntest = 1:300 + rr0 = SVector{3}(rand(Float64,3)); + randX = [ SVector{3}(rand(Float64,3)) for _ =1:10]; + cfg1 = vcat( [ ACE.State(rr = r-.5*rr0, rr0 = rr0, be = :env) for r in randX ] , [ACE.State(rr = rr0, rr0 = rr0, be = :bond)]) |> ACEConfig; + cfg2 = vcat( [ ACE.State(rr = r-.5*rr0, rr0 = -rr0, be = :env) for r in randX ] , [ACE.State(rr = -rr0, rr0 = -rr0, be = :bond)]) |> ACEConfig; + B1 = ACE.evaluate(basis_bondcov, cfg1); + B2 = ACE.evaluate(basis_bondcov, cfg2); + print_tf(@test all([ isapprox(b1.val,-b2.val, rtol = tol) for (b1,b2) in zip(B1,B2)])); + end + println() + + +end + + + + + + +