Added test for ALLOSBRAC

This commit is contained in:
Nuwan Yapa 2024-04-19 14:49:00 -04:00
parent c302ad51fa
commit c0e68bec0d
1 changed files with 48 additions and 2 deletions

View File

@ -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] return BRAC[N + 1, N1 + 1, M + 1, N1 + 1, N2 + 1]
end end
bracs = calculate_single_bracket.(n1, l1, n2, l2, N, L, n, l, Λ) println("OSBRAC results")
display(bracs) 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))