@@ -7,14 +7,17 @@ immutable IPaduaTransformPlan{IDCTPLAN,T}
7
7
idctplan:: IDCTPLAN
8
8
end
9
9
10
- function plan_ipaduatransform {T} (v:: AbstractVector{T} )
11
- N= length (v)
10
+ function plan_ipaduatransform {T} (:: Type{T} ,N:: Integer )
12
11
n= Int (cld (- 3 + sqrt (1 + 8 N),2 ))
13
- @assert N== div ((n+ 1 )* (n+ 2 ),2 )
12
+ if N ≠ div ((n+ 1 )* (n+ 2 ),2 )
13
+ error (" Padua transforms can only be applied to vectors of length (n+1)*(n+2)/2." )
14
+ end
14
15
IPaduaTransformPlan (Array {T} (n+ 2 ,n+ 1 ),Array {T} (N),
15
16
FFTW. plan_r2r! (Array {T} (n+ 2 ,n+ 1 ),FFTW. REDFT00))
16
17
end
17
18
19
+ plan_ipaduatransform {T} (v:: AbstractVector{T} ) = plan_ipaduatransform (eltype (v),length (v))
20
+
18
21
"""
19
22
Inverse Padua Transform maps the 2D Chebyshev coefficients to the values of the interpolation polynomial at the Padua points.
20
23
"""
@@ -80,14 +83,17 @@ immutable PaduaTransformPlan{DCTPLAN,T}
80
83
dctplan:: DCTPLAN
81
84
end
82
85
83
- function plan_paduatransform {T} (v:: AbstractVector{T} )
84
- N= length (v)
86
+ function plan_paduatransform {T} (:: Type{T} ,N:: Integer )
85
87
n= Int (cld (- 3 + sqrt (1 + 8 N),2 ))
86
- @assert N== div ((n+ 1 )* (n+ 2 ),2 )
88
+ if N ≠ ((n+ 1 )* (n+ 2 ))÷ 2
89
+ error (" Padua transforms can only be applied to vectors of length (n+1)*(n+2)/2." )
90
+ end
87
91
PaduaTransformPlan (Array {T} (n+ 2 ,n+ 1 ),Array {T} (N),
88
92
FFTW. plan_r2r! (Array {T} (n+ 2 ,n+ 1 ),FFTW. REDFT00))
89
93
end
90
94
95
+ plan_paduatransform {T} (v:: AbstractVector{T} ) = plan_paduatransform (eltype (v),length (v))
96
+
91
97
"""
92
98
Padua Transform maps from interpolant values at the Padua points to the 2D Chebyshev coefficients.
93
99
"""
@@ -169,3 +175,5 @@ function paduapoints{T}(::Type{T},n::Integer)
169
175
end
170
176
return MM
171
177
end
178
+
179
+ paduapoints (n:: Integer ) = paduapoints (Float64,n)
0 commit comments