35 lines
1.2 KiB
Julia
35 lines
1.2 KiB
Julia
# 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
|