diff --git a/test/OSBRACKETS.jl b/test/OSBRACKETS.jl index 748b673..35dd266 100644 --- a/test/OSBRACKETS.jl +++ b/test/OSBRACKETS.jl @@ -43,5 +43,51 @@ function calculate_single_bracket(n1′, l1′, n2′, l2′, n1, l1, n2, l2, Λ return BRAC[N′ + 1, N1′ + 1, M′ + 1, N1 + 1, N2 + 1] end -bracs = calculate_single_bracket.(n1, l1, n2, l2, N, L, n, l, Λ) -display(bracs) +println("OSBRAC results") +osbracs = calculate_single_bracket.(n1, l1, n2, l2, N, L, n, l, Λ) +display(osbracs) + +function calculate_all_brackets(n1′, l1′, n2′, l2′, n1, l1, n2, l2, Λ) # Efros notation -- DON'T CONFUSE + Emax = max(maximum(l1′ + l2′ + 2 * (n1′ + n2′)), maximum(l1 + l2 + 2 * (n1 + n2))) + + LMIN = minimum(Λ) + LMAX = maximum(Λ) + CO = 1/sqrt(2) + SI = 1/sqrt(2) + + BRACs = Vector{Any}(undef, 2) # two arrays for both parities + for parity in 1:2 + NQMAX = Emax - mod1(Emax, 2) + parity + # dimensions BRAC(0:LMAX,0:(NQMAX-LMIN)/2,0:(NQMAX-LMIN)/2,0:(NQMAX-LMIN)/2,0:(NQMAX-LMIN)/2,0:LMAX,0:(NQMAX-LMIN)/2,LMIN:LMAX) + BRACs[parity] = zeros(Float64, 1 + LMAX, 1 + (NQMAX - LMIN) ÷ 2, 1 + (NQMAX - LMIN) ÷ 2, 1 + (NQMAX - LMIN) ÷ 2, 1 + (NQMAX - LMIN) ÷ 2, 1 + LMAX, 1 + (NQMAX-LMIN) ÷ 2, 1 + LMAX-LMIN) + @ccall "../OSBRACKETS/allosbrac.so".allosbrac_(NQMAX::Ref{Int32},LMIN::Ref{Int32},LMAX::Ref{Int32},CO::Ref{Float64},SI::Ref{Float64},BRACs[parity]::Ptr{Array{Float64}})::Cvoid + end + + out = Float64[] + + for (Λ, n1′, l1′, n2′, l2′, n1, l1, n2, l2) in zip(Λ, n1′, l1′, n2′, l2′, n1, l1, n2, l2) + # BRAC(NP,N1P,MP,N1,N2,N,M,L) + + Nq = l1 + l2 + 2 * (l1 + l2) + ϵ = (Nq - Λ) % 2 + NP = (l1′ - l2′ + Λ - ϵ) ÷ 2 + N1P = n1′ + MP = (l1′ + l2′ - Λ - ϵ) ÷ 2 + N1 = n1 + N2 = n2 + N = (l1 - l2 + Λ - ϵ) ÷ 2 + M = (l1 + l2 - Λ - ϵ) ÷ 2 + + parity = mod1(l1 + l2, 2) + push!(out, BRACs[parity][1 + NP, 1 + N1P, 1 + MP, 1 + N1, 1 + N2, 1 + N, 1 + M, 1 + LMIN + Λ]) + end + + return out +end + +println("ALLOSBRAC results") +allosbracs = calculate_all_brackets(n1, l1, n2, l2, N, L, n, l, Λ) +display(allosbracs) + +println("Difference") +display(abs.(allosbracs - osbracs))