Skip to content

Commit 3cd41a2

Browse files
add Adjoint and Transpose to all the harmonic plans
TODO: the accompanying synthesis and analysis
1 parent c3da771 commit 3cd41a2

File tree

1 file changed

+32
-42
lines changed

1 file changed

+32
-42
lines changed

src/libfasttransforms.jl

Lines changed: 32 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -833,68 +833,58 @@ for (fJ, fC) in ((:lmul!, :ft_mpfr_trmm_ptr),
833833
end
834834
end
835835

836-
for (fJ, fC, K) in ((:lmul!, :ft_execute_sph2fourier, SPHERE),
837-
(:ldiv!, :ft_execute_fourier2sph, SPHERE),
838-
(:lmul!, :ft_execute_sphv2fourier, SPHEREV),
839-
(:ldiv!, :ft_execute_fourier2sphv, SPHEREV))
836+
for (fJ, fC, T, N, K) in ((:lmul!, :ft_execute_sph2fourier, Float64, 2, SPHERE),
837+
(:ldiv!, :ft_execute_fourier2sph, Float64, 2, SPHERE),
838+
(:lmul!, :ft_execute_sphv2fourier, Float64, 2, SPHEREV),
839+
(:ldiv!, :ft_execute_fourier2sphv, Float64, 2, SPHEREV),
840+
(:lmul!, :ft_execute_spinsph2fourier, Complex{Float64}, 2, SPINSPHERE),
841+
(:ldiv!, :ft_execute_fourier2spinsph, Complex{Float64}, 2, SPINSPHERE),
842+
(:lmul!, :ft_execute_disk2cxf, Float64, 2, DISK),
843+
(:ldiv!, :ft_execute_cxf2disk, Float64, 2, DISK),
844+
(:lmul!, :ft_execute_rectdisk2cheb, Float64, 2, RECTDISK),
845+
(:ldiv!, :ft_execute_cheb2rectdisk, Float64, 2, RECTDISK),
846+
(:lmul!, :ft_execute_tri2cheb, Float64, 2, TRIANGLE),
847+
(:ldiv!, :ft_execute_cheb2tri, Float64, 2, TRIANGLE))
840848
@eval begin
841-
function $fJ(p::FTPlan{Float64, 2, $K}, x::Matrix{Float64})
849+
function $fJ(p::FTPlan{$T, $N, $K}, x::Array{$T, $N})
842850
checksize(p, x)
843-
ccall(($(string(fC)), libfasttransforms), Cvoid, (Cint, Ptr{ft_plan_struct}, Ptr{Float64}, Cint, Cint), 'N', p, x, size(x, 1), size(x, 2))
851+
ccall(($(string(fC)), libfasttransforms), Cvoid, (Cint, Ptr{ft_plan_struct}, Ptr{$T}, Cint, Cint), 'N', p, x, size(x)...)
844852
return x
845853
end
846-
function $fJ(p::AdjointFTPlan{Float64, FTPlan{Float64, 2, $K}}, x::Matrix{Float64})
854+
function $fJ(p::AdjointFTPlan{$T, FTPlan{$T, $N, $K}}, x::Array{$T, $N})
847855
checksize(p, x)
848-
ccall(($(string(fC)), libfasttransforms), Cvoid, (Cint, Ptr{ft_plan_struct}, Ptr{Float64}, Cint, Cint), 'T', p, x, size(x, 1), size(x, 2))
856+
ccall(($(string(fC)), libfasttransforms), Cvoid, (Cint, Ptr{ft_plan_struct}, Ptr{$T}, Cint, Cint), 'T', p, x, size(x)...)
849857
return x
850858
end
851-
function $fJ(p::TransposeFTPlan{Float64, FTPlan{Float64, 2, $K}}, x::Matrix{Float64})
859+
function $fJ(p::TransposeFTPlan{$T, FTPlan{$T, $N, $K}}, x::Array{$T, $N})
852860
checksize(p, x)
853-
ccall(($(string(fC)), libfasttransforms), Cvoid, (Cint, Ptr{ft_plan_struct}, Ptr{Float64}, Cint, Cint), 'T', p, x, size(x, 1), size(x, 2))
861+
ccall(($(string(fC)), libfasttransforms), Cvoid, (Cint, Ptr{ft_plan_struct}, Ptr{$T}, Cint, Cint), 'T', p, x, size(x)...)
854862
return x
855863
end
856864
end
857865
end
858866

859-
for (fJ, fC, K) in ((:lmul!, :ft_execute_disk2cxf, DISK),
860-
(:ldiv!, :ft_execute_cxf2disk, DISK),
861-
(:lmul!, :ft_execute_rectdisk2cheb, RECTDISK),
862-
(:ldiv!, :ft_execute_cheb2rectdisk, RECTDISK),
863-
(:lmul!, :ft_execute_tri2cheb, TRIANGLE),
864-
(:ldiv!, :ft_execute_cheb2tri, TRIANGLE))
867+
for (fJ, fC) in ((:lmul!, :ft_execute_tet2cheb),
868+
(:ldiv!, :ft_execute_cheb2tet))
865869
@eval begin
866-
function $fJ(p::FTPlan{Float64, 2, $K}, x::Matrix{Float64})
870+
function $fJ(p::FTPlan{Float64, 3, TETRAHEDRON}, x::Array{Float64, 3})
867871
checksize(p, x)
868-
ccall(($(string(fC)), libfasttransforms), Cvoid, (Ptr{ft_plan_struct}, Ptr{Float64}, Cint, Cint), p, x, size(x, 1), size(x, 2))
872+
ccall(($(string(fC)), libfasttransforms), Cvoid, (Cint, Ptr{ft_plan_struct}, Ptr{Float64}, Cint, Cint, Cint), 'N', p, x, size(x)...)
873+
return x
874+
end
875+
function $fJ(p::AdjointFTPlan{Float64, FTPlan{Float64, 3, TETRAHEDRON}}, x::Array{Float64, 3})
876+
checksize(p, x)
877+
ccall(($(string(fC)), libfasttransforms), Cvoid, (Cint, Ptr{ft_plan_struct}, Ptr{Float64}, Cint, Cint, Cint), 'T', p, x, size(x)...)
878+
return x
879+
end
880+
function $fJ(p::TransposeFTPlan{Float64, FTPlan{Float64, 3, TETRAHEDRON}}, x::Array{Float64, 3})
881+
checksize(p, x)
882+
ccall(($(string(fC)), libfasttransforms), Cvoid, (Cint, Ptr{ft_plan_struct}, Ptr{Float64}, Cint, Cint, Cint), 'T', p, x, size(x)...)
869883
return x
870884
end
871885
end
872886
end
873887

874-
function lmul!(p::FTPlan{Float64, 3, TETRAHEDRON}, x::Array{Float64, 3})
875-
checksize(p, x)
876-
ccall((:ft_execute_tet2cheb, libfasttransforms), Cvoid, (Ptr{ft_plan_struct}, Ptr{Float64}, Cint, Cint, Cint), p, x, size(x, 1), size(x, 2), size(x, 3))
877-
return x
878-
end
879-
880-
function ldiv!(p::FTPlan{Float64, 3, TETRAHEDRON}, x::Array{Float64, 3})
881-
checksize(p, x)
882-
ccall((:ft_execute_cheb2tet, libfasttransforms), Cvoid, (Ptr{ft_plan_struct}, Ptr{Float64}, Cint, Cint, Cint), p, x, size(x, 1), size(x, 2), size(x, 3))
883-
return x
884-
end
885-
886-
function lmul!(p::FTPlan{Complex{Float64}, 2, SPINSPHERE}, x::Matrix{Complex{Float64}})
887-
checksize(p, x)
888-
ccall((:ft_execute_spinsph2fourier, libfasttransforms), Cvoid, (Ptr{ft_plan_struct}, Ptr{Complex{Float64}}, Cint, Cint), p, x, size(x, 1), size(x, 2))
889-
return x
890-
end
891-
892-
function ldiv!(p::FTPlan{Complex{Float64}, 2, SPINSPHERE}, x::Matrix{Complex{Float64}})
893-
checksize(p, x)
894-
ccall((:ft_execute_fourier2spinsph, libfasttransforms), Cvoid, (Ptr{ft_plan_struct}, Ptr{Complex{Float64}}, Cint, Cint), p, x, size(x, 1), size(x, 2))
895-
return x
896-
end
897-
898888
function execute_sph_polar_rotation!(x::Matrix{Float64}, α)
899889
ccall((:ft_execute_sph_polar_rotation, libfasttransforms), Cvoid, (Ptr{Float64}, Cint, Cint, Float64, Float64), x, size(x, 1), size(x, 2), sin(α), cos(α))
900890
return x

0 commit comments

Comments
 (0)