# compile using # gfortran -shared -fPIC osbrac.f90 -o osbrac.so # gfortran -shared -fPIC allosbrac.f90 -o allosbrac.so function cal_BRAC(Emax, Λ) LMIN = Λ LMAX = Λ NQMAX = 2 * Emax CO = 1/sqrt(2) SI = 1/sqrt(2) # 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) BRAC = 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) @ccall "OSBRACKETS/allosbrac.so".allosbrac_(NQMAX::Ref{Int32},LMIN::Ref{Int32},LMAX::Ref{Int32},CO::Ref{Float64},SI::Ref{Float64},BRAC::Ptr{Array{Float64}})::Cvoid return BRAC end function get_bracket(BRAC, Emax, Λ, n1′, l1′, n2′, l2′, n1, l1, n2, l2) # BRAC(NP,N1P,MP,N1,N2,N,M,L) Nq = l1 + l2 + 2 * (n1 + n2) Nq′ = l1′ + l2′ + 2 * (n1′ + n2′) if Nq ≠ Nq′; return 0; end ϵ = (2 * Emax - Λ) % 2 NP = (l1′ - l2′ + Λ - ϵ) ÷ 2 N1P = n1′ MP = (l1′ + l2′ - Λ - ϵ) ÷ 2 N1 = n1 N2 = n2 N = (l1 - l2 + Λ - ϵ) ÷ 2 M = (l1 + l2 - Λ - ϵ) ÷ 2 return BRAC[1 + NP, 1 + N1P, 1 + MP, 1 + N1, 1 + N2, 1 + N, 1 + M, 1] end