@@ -14,7 +14,7 @@ This is a Julia implementation of the stable recurrence described in:
14
14
15
15
Y.-l. Xu, Fast evaluation of Gaunt coefficients: recursive approach, *J. Comp. Appl. Math.*, **85**:53–65, 1997.
16
16
"""
17
- function gaunt {T} (:: Type{T} ,m:: Int ,n:: Int ,μ:: Int ,ν:: Int ;normalized:: Bool = false )
17
+ function gaunt {T} (:: Type{T} ,m:: Integer ,n:: Integer ,μ:: Integer ,ν:: Integer ;normalized:: Bool = false )
18
18
if normalized
19
19
normalizedgaunt (T,m,n,μ,ν)
20
20
else
24
24
doc"""
25
25
Calculates the Gaunt coefficients in 64-bit floating-point arithmetic.
26
26
"""
27
- gaunt (m:: Int ,n:: Int ,μ:: Int ,ν:: Int ;kwds... ) = gaunt (Float64,m,n,μ,ν;kwds... )
27
+ gaunt (m:: Integer ,n:: Integer ,μ:: Integer ,ν:: Integer ;kwds... ) = gaunt (Float64,m,n,μ,ν;kwds... )
28
28
29
- function normalization {T} (:: Type{T} ,m:: Int ,n:: Int ,μ:: Int ,ν:: Int )
29
+ gaunt {T} (:: Type{T} ,m:: Int32 ,n:: Int32 ,μ:: Int32 ,ν:: Int32 ;normalized:: Bool = false ) = gaunt (T,Int64 (m),Int64 (n),Int64 (μ),Int64 (ν);normalized= normalized)
30
+
31
+ function normalization {T} (:: Type{T} ,m:: Integer ,n:: Integer ,μ:: Integer ,ν:: Integer )
30
32
pochhammer (n+ one (T),n)* pochhammer (ν+ one (T),ν)/ pochhammer (n+ ν+ one (T),n+ ν)* gamma (n+ ν- m- μ+ one (T))/ gamma (n- m+ one (T))/ gamma (ν- μ+ one (T))
31
33
end
32
34
33
- normalization (:: Type{Float64} ,m:: Int ,n:: Int ,μ:: Int ,ν:: Int ) = normalization1 (Float64,n,ν)* normalization2 (Float64,n- m,ν- μ)
35
+ normalization (:: Type{Float64} ,m:: Integer ,n:: Integer ,μ:: Integer ,ν:: Integer ) = normalization1 (Float64,n,ν)* normalization2 (Float64,n- m,ν- μ)
34
36
35
- function normalization1 (:: Type{Float64} ,n:: Int ,ν:: Int )
37
+ function normalization1 (:: Type{Float64} ,n:: Integer ,ν:: Integer )
36
38
if n ≥ 8
37
39
if ν ≥ 8
38
40
return exp ((n+ 0.5 )* log1p (n/ (n+ 1 ))+ (ν+ 0.5 )* log1p (ν/ (ν+ 1 ))+ (n+ ν+ 0.5 )* log1p (- (n+ ν)/ (2 n+ 2 ν+ 1 ))+ n* log1p (- 2 ν/ (2 n+ 2 ν+ 1 ))+ ν* log1p (- 2 n/ (2 n+ 2 ν+ 1 )))* stirlingseries (2 n+ 1.0 )* stirlingseries (2 ν+ 1.0 )* stirlingseries (n+ ν+ 1.0 )/ stirlingseries (n+ 1.0 )/ stirlingseries (ν+ 1.0 )/ stirlingseries (2 n+ 2 ν+ 1.0 )
@@ -46,7 +48,7 @@ function normalization1(::Type{Float64},n::Int,ν::Int)
46
48
end
47
49
end
48
50
49
- function normalization2 (:: Type{Float64} ,nm:: Int ,νμ:: Int )
51
+ function normalization2 (:: Type{Float64} ,nm:: Integer ,νμ:: Integer )
50
52
if nm ≥ 8
51
53
if νμ ≥ 8
52
54
return edivsqrt2pi* exp ((nm+ 0.5 )* log1p (νμ/ (nm+ 1 ))+ (νμ+ 0.5 )* log1p (nm/ (νμ+ 1 )))/ sqrt (nm+ νμ+ 1.0 )* stirlingseries (nm+ νμ+ 1.0 )/ stirlingseries (nm+ 1.0 )/ stirlingseries (νμ+ 1.0 )
@@ -60,7 +62,7 @@ function normalization2(::Type{Float64},nm::Int,νμ::Int)
60
62
end
61
63
end
62
64
63
- function normalizedgaunt {T} (:: Type{T} ,m:: Int ,n:: Int ,μ:: Int ,ν:: Int )
65
+ function normalizedgaunt {T} (:: Type{T} ,m:: Integer ,n:: Integer ,μ:: Integer ,ν:: Integer )
64
66
qmax = min (n,ν,(n+ ν- abs (m+ μ))÷ 2 )
65
67
a = Vector {T} (qmax+ 1 )
66
68
a[1 ] = one (T)
@@ -106,15 +108,15 @@ function normalizedgaunt{T}(::Type{T},m::Int,n::Int,μ::Int,ν::Int)
106
108
a
107
109
end
108
110
109
- function secondinitialcondition {T} (:: Type{T} ,m:: Int ,n:: Int ,μ:: Int ,ν:: Int )
111
+ function secondinitialcondition {T} (:: Type{T} ,m:: Integer ,n:: Integer ,μ:: Integer ,ν:: Integer )
110
112
n₄ = n+ ν- m- μ
111
113
mn = m- n
112
114
μν = μ- ν
113
115
temp = 2 n+ 2 ν- one (T)
114
116
return (temp- 2 )/ 2 * (1 - temp/ n₄/ (n₄- 1 )* (mn* (mn+ one (T))/ (2 n- 1 )+ μν* (μν+ one (T))/ (2 ν- 1 )))
115
117
end
116
118
117
- function thirdinitialcondition {T} (:: Type{T} ,m:: Int ,n:: Int ,μ:: Int ,ν:: Int )
119
+ function thirdinitialcondition {T} (:: Type{T} ,m:: Integer ,n:: Integer ,μ:: Integer ,ν:: Integer )
118
120
n₄ = n+ ν- m- μ
119
121
mn = m- n
120
122
μν = μ- ν
@@ -124,14 +126,14 @@ function thirdinitialcondition{T}(::Type{T},m::Int,n::Int,μ::Int,ν::Int)
124
126
return temp* (temp- 6 )/ 4 * ( (temp- 2 )/ n₄/ (n₄- 1 )* temp2 + one (T)/ 2 )
125
127
end
126
128
127
- α {T} (:: Type{T} ,n:: Int ,ν:: Int ,p:: Int ) = (p^ 2 - (n+ ν+ 1 )^ 2 )* (p^ 2 - (n- ν)^ 2 )/ (4 p^ 2 - one (T))
128
- A {T} (:: Type{T} ,m:: Int ,n:: Int ,μ:: Int ,ν:: Int ,p:: Int ) = p* (p- one (T))* (m- μ)- (m+ μ)* (n- ν)* (n+ ν+ one (T))
129
+ α {T} (:: Type{T} ,n:: Integer ,ν:: Integer ,p:: Integer ) = (p^ 2 - (n+ ν+ 1 )^ 2 )* (p^ 2 - (n- ν)^ 2 )/ (4 p^ 2 - one (T))
130
+ A {T} (:: Type{T} ,m:: Integer ,n:: Integer ,μ:: Integer ,ν:: Integer ,p:: Integer ) = p* (p- one (T))* (m- μ)- (m+ μ)* (n- ν)* (n+ ν+ one (T))
129
131
130
- c₀ {T} (:: Type{T} ,m:: Int ,n:: Int ,μ:: Int ,ν:: Int ,p:: Int ,p₁:: Int ) = (p+ 2 )* (p+ 3 )* (p₁+ 1 )* (p₁+ 2 )* A (T,m,n,μ,ν,p+ 4 )* α (T,n,ν,p+ 1 )
131
- c₁ {T} (:: Type{T} ,m:: Int ,n:: Int ,μ:: Int ,ν:: Int ,p:: Int ,p₁:: Int ,p₂:: Int ) = A (T,m,n,μ,ν,p+ 2 )* A (T,m,n,μ,ν,p+ 3 )* A (T,m,n,μ,ν,p+ 4 ) + (p+ 1 )* (p+ 3 )* (p₁+ 2 )* (p₂+ 2 )* A (T,m,n,μ,ν,p+ 4 )* α (T,n,ν,p+ 2 ) + (p+ 2 )* (p+ 4 )* (p₁+ 3 )* (p₂+ 3 )* A (T,m,n,μ,ν,p+ 2 )* α (T,n,ν,p+ 3 )
132
- c₂ {T} (:: Type{T} ,m:: Int ,n:: Int ,μ:: Int ,ν:: Int ,p:: Int ,p₂:: Int ) = - (p+ 2 )* (p+ 3 )* (p₂+ 3 )* (p₂+ 4 )* A (T,m,n,μ,ν,p+ 2 )* α (T,n,ν,p+ 4 )
132
+ c₀ {T} (:: Type{T} ,m:: Integer ,n:: Integer ,μ:: Integer ,ν:: Integer ,p:: Integer ,p₁:: Integer ) = (p+ 2 )* (p+ 3 )* (p₁+ 1 )* (p₁+ 2 )* A (T,m,n,μ,ν,p+ 4 )* α (T,n,ν,p+ 1 )
133
+ c₁ {T} (:: Type{T} ,m:: Integer ,n:: Integer ,μ:: Integer ,ν:: Integer ,p:: Integer ,p₁:: Integer ,p₂:: Integer ) = A (T,m,n,μ,ν,p+ 2 )* A (T,m,n,μ,ν,p+ 3 )* A (T,m,n,μ,ν,p+ 4 ) + (p+ 1 )* (p+ 3 )* (p₁+ 2 )* (p₂+ 2 )* A (T,m,n,μ,ν,p+ 4 )* α (T,n,ν,p+ 2 ) + (p+ 2 )* (p+ 4 )* (p₁+ 3 )* (p₂+ 3 )* A (T,m,n,μ,ν,p+ 2 )* α (T,n,ν,p+ 3 )
134
+ c₂ {T} (:: Type{T} ,m:: Integer ,n:: Integer ,μ:: Integer ,ν:: Integer ,p:: Integer ,p₂:: Integer ) = - (p+ 2 )* (p+ 3 )* (p₂+ 3 )* (p₂+ 4 )* A (T,m,n,μ,ν,p+ 2 )* α (T,n,ν,p+ 4 )
133
135
134
- d₀ {T} (:: Type{T} ,m:: Int ,n:: Int ,μ:: Int ,ν:: Int ,p:: Int ,p₁:: Int ) = (p+ 2 )* (p+ 3 )* (p+ 5 )* (p₁+ 2 )* (p₁+ 4 )* A (T,m,n,μ,ν,p+ 6 )* α (T,n,ν,p+ 1 )
135
- d₁ {T} (:: Type{T} ,m:: Int ,n:: Int ,μ:: Int ,ν:: Int ,p:: Int ,p₁:: Int ,p₂:: Int ) = (p+ 5 )* (p₁+ 4 )* A (T,m,n,μ,ν,p+ 6 )* ( A (T,m,n,μ,ν,p+ 2 )* A (T,m,n,μ,ν,p+ 3 ) + (p+ 1 )* (p+ 3 )* (p₁+ 2 )* (p₂+ 2 )* α (T,n,ν,p+ 2 ) )
136
- d₂ {T} (:: Type{T} ,m:: Int ,n:: Int ,μ:: Int ,ν:: Int ,p:: Int ,p₁:: Int ,p₂:: Int ) = (p+ 2 )* (p₂+ 3 )* A (T,m,n,μ,ν,p+ 2 )* ( A (T,m,n,μ,ν,p+ 5 )* A (T,m,n,μ,ν,p+ 6 ) + (p+ 4 )* (p+ 6 )* (p₁+ 5 )* (p₂+ 5 )* α (T,n,ν,p+ 5 ) )
137
- d₃ {T} (:: Type{T} ,m:: Int ,n:: Int ,μ:: Int ,ν:: Int ,p:: Int ,p₂:: Int ) = - (p+ 2 )* (p+ 4 )* (p+ 5 )* (p₂+ 3 )* (p₂+ 5 )* (p₂+ 6 )* A (T,m,n,μ,ν,p+ 2 )* α (T,n,ν,p+ 6 )
136
+ d₀ {T} (:: Type{T} ,m:: Integer ,n:: Integer ,μ:: Integer ,ν:: Integer ,p:: Integer ,p₁:: Integer ) = (p+ 2 )* (p+ 3 )* (p+ 5 )* (p₁+ 2 )* (p₁+ 4 )* A (T,m,n,μ,ν,p+ 6 )* α (T,n,ν,p+ 1 )
137
+ d₁ {T} (:: Type{T} ,m:: Integer ,n:: Integer ,μ:: Integer ,ν:: Integer ,p:: Integer ,p₁:: Integer ,p₂:: Integer ) = (p+ 5 )* (p₁+ 4 )* A (T,m,n,μ,ν,p+ 6 )* ( A (T,m,n,μ,ν,p+ 2 )* A (T,m,n,μ,ν,p+ 3 ) + (p+ 1 )* (p+ 3 )* (p₁+ 2 )* (p₂+ 2 )* α (T,n,ν,p+ 2 ) )
138
+ d₂ {T} (:: Type{T} ,m:: Integer ,n:: Integer ,μ:: Integer ,ν:: Integer ,p:: Integer ,p₁:: Integer ,p₂:: Integer ) = (p+ 2 )* (p₂+ 3 )* A (T,m,n,μ,ν,p+ 2 )* ( A (T,m,n,μ,ν,p+ 5 )* A (T,m,n,μ,ν,p+ 6 ) + (p+ 4 )* (p+ 6 )* (p₁+ 5 )* (p₂+ 5 )* α (T,n,ν,p+ 5 ) )
139
+ d₃ {T} (:: Type{T} ,m:: Integer ,n:: Integer ,μ:: Integer ,ν:: Integer ,p:: Integer ,p₂:: Integer ) = - (p+ 2 )* (p+ 4 )* (p+ 5 )* (p₂+ 3 )* (p₂+ 5 )* (p₂+ 6 )* A (T,m,n,μ,ν,p+ 2 )* α (T,n,ν,p+ 6 )
0 commit comments