f0 = GET(f,0) f1 = GET(f,1) f2 = GET(f,2) f3 = GET(f,3) f4 = GET(f,4) f5 = GET(f,5) f6 = GET(f,6) f7 = GET(f,7) f8 = GET(f,8) f9 = GET(f,9) f10 = GET(f,10) f11 = GET(f,11) f12 = GET(f,12) f13 = GET(f,13) f14 = GET(f,14) f15 = GET(f,15) g = 1/f g0 = GET(g,0) g0fft = FFT((g0)) f0fft = FFT((f0)) f1fft = FFT((f1)) u1below = IFFT(-1*g0fft*f0fft) u1above = IFFT(-1*g0fft*f1fft) u1 = GET(u1below,1) + GET(u1above,1) kill(u1below) kill(u1above) u1fft = FFT((u1)) g1above = IFFT(+1*g0fft*u1fft) g1 = GET(g1above,1) kill(g1above) \\ 7.000000 overall iteration efficiency \\ 6.000000 for u, 5 ffts \\ 7.000000 for g, 7 ffts g1fft = FFT((g1)) f2fft = FFT((f2)) f3fft = FFT((f3)) u2below = IFFT(-1*g0fft*f1fft-1*g1fft*f0fft) u2above = IFFT(-1*g0fft*f2fft-1*g1fft*f1fft) u3above = IFFT(-1*g0fft*f3fft-1*g1fft*f2fft) u2 = GET(u2below,2) + GET(u2above,2) u3 = GET(u2above,3) + GET(u3above,3) kill(u2below) kill(u2above) kill(u3above) u2fft = FFT((u2)) u3fft = FFT((u3)) g2above = IFFT(+1*g0fft*u2fft) g3above = IFFT(+1*g0fft*u3fft+1*g1fft*u2fft) g2 = GET(g2above,2) g3 = GET(g2above,3) + GET(g3above,3) kill(g2above) kill(g3above) \\ 5.666667 overall iteration efficiency \\ 4.666667 for u, 13 ffts \\ 5.666667 for g, 17 ffts g2fft = FFT((g2)) g3fft = FFT((g3)) f4fft = FFT((f4)) f5fft = FFT((f5)) f6fft = FFT((f6)) f7fft = FFT((f7)) u4below = IFFT(-1*g0fft*f3fft-1*g1fft*f2fft-1*g2fft*f1fft-1*g3fft*f0fft) u4above = IFFT(-1*g0fft*f4fft-1*g1fft*f3fft-1*g2fft*f2fft-1*g3fft*f1fft) u5above = IFFT(-1*g0fft*f5fft-1*g1fft*f4fft-1*g2fft*f3fft-1*g3fft*f2fft) u6above = IFFT(-1*g0fft*f6fft-1*g1fft*f5fft-1*g2fft*f4fft-1*g3fft*f3fft) u7above = IFFT(-1*g0fft*f7fft-1*g1fft*f6fft-1*g2fft*f5fft-1*g3fft*f4fft) u4 = GET(u4below,4) + GET(u4above,4) u5 = GET(u4above,5) + GET(u5above,5) u6 = GET(u5above,6) + GET(u6above,6) u7 = GET(u6above,7) + GET(u7above,7) kill(u4below) kill(u4above) kill(u5above) kill(u6above) kill(u7above) u4fft = FFT((u4)) u5fft = FFT((u5)) u6fft = FFT((u6)) u7fft = FFT((u7)) g4above = IFFT(+1*g0fft*u4fft) g5above = IFFT(+1*g0fft*u5fft+1*g1fft*u4fft) g6above = IFFT(+1*g0fft*u6fft+1*g1fft*u5fft+1*g2fft*u4fft) g7above = IFFT(+1*g0fft*u7fft+1*g1fft*u6fft+1*g2fft*u5fft+1*g3fft*u4fft) g4 = GET(g4above,4) g5 = GET(g4above,5) + GET(g5above,5) g6 = GET(g5above,6) + GET(g6above,6) g7 = GET(g6above,7) + GET(g7above,7) kill(g4above) kill(g5above) kill(g6above) kill(g7above) \\ 5.142857 overall iteration efficiency \\ 4.142857 for u, 28 ffts \\ 5.142857 for g, 36 ffts g4fft = FFT((g4)) g5fft = FFT((g5)) g6fft = FFT((g6)) g7fft = FFT((g7)) f8fft = FFT((f8)) f9fft = FFT((f9)) f10fft = FFT((f10)) f11fft = FFT((f11)) f12fft = FFT((f12)) f13fft = FFT((f13)) f14fft = FFT((f14)) f15fft = FFT((f15)) u8below = IFFT(-1*g0fft*f7fft-1*g1fft*f6fft-1*g2fft*f5fft-1*g3fft*f4fft-1*g4fft*f3fft-1*g5fft*f2fft-1*g6fft*f1fft-1*g7fft*f0fft) u8above = IFFT(-1*g0fft*f8fft-1*g1fft*f7fft-1*g2fft*f6fft-1*g3fft*f5fft-1*g4fft*f4fft-1*g5fft*f3fft-1*g6fft*f2fft-1*g7fft*f1fft) u9above = IFFT(-1*g0fft*f9fft-1*g1fft*f8fft-1*g2fft*f7fft-1*g3fft*f6fft-1*g4fft*f5fft-1*g5fft*f4fft-1*g6fft*f3fft-1*g7fft*f2fft) u10above = IFFT(-1*g0fft*f10fft-1*g1fft*f9fft-1*g2fft*f8fft-1*g3fft*f7fft-1*g4fft*f6fft-1*g5fft*f5fft-1*g6fft*f4fft-1*g7fft*f3fft) u11above = IFFT(-1*g0fft*f11fft-1*g1fft*f10fft-1*g2fft*f9fft-1*g3fft*f8fft-1*g4fft*f7fft-1*g5fft*f6fft-1*g6fft*f5fft-1*g7fft*f4fft) u12above = IFFT(-1*g0fft*f12fft-1*g1fft*f11fft-1*g2fft*f10fft-1*g3fft*f9fft-1*g4fft*f8fft-1*g5fft*f7fft-1*g6fft*f6fft-1*g7fft*f5fft) u13above = IFFT(-1*g0fft*f13fft-1*g1fft*f12fft-1*g2fft*f11fft-1*g3fft*f10fft-1*g4fft*f9fft-1*g5fft*f8fft-1*g6fft*f7fft-1*g7fft*f6fft) u14above = IFFT(-1*g0fft*f14fft-1*g1fft*f13fft-1*g2fft*f12fft-1*g3fft*f11fft-1*g4fft*f10fft-1*g5fft*f9fft-1*g6fft*f8fft-1*g7fft*f7fft) u15above = IFFT(-1*g0fft*f15fft-1*g1fft*f14fft-1*g2fft*f13fft-1*g3fft*f12fft-1*g4fft*f11fft-1*g5fft*f10fft-1*g6fft*f9fft-1*g7fft*f8fft) u8 = GET(u8below,8) + GET(u8above,8) u9 = GET(u8above,9) + GET(u9above,9) u10 = GET(u9above,10) + GET(u10above,10) u11 = GET(u10above,11) + GET(u11above,11) u12 = GET(u11above,12) + GET(u12above,12) u13 = GET(u12above,13) + GET(u13above,13) u14 = GET(u13above,14) + GET(u14above,14) u15 = GET(u14above,15) + GET(u15above,15) kill(u8below) kill(u8above) kill(u9above) kill(u10above) kill(u11above) kill(u12above) kill(u13above) kill(u14above) kill(u15above) u8fft = FFT((u8)) u9fft = FFT((u9)) u10fft = FFT((u10)) u11fft = FFT((u11)) u12fft = FFT((u12)) u13fft = FFT((u13)) u14fft = FFT((u14)) u15fft = FFT((u15)) g8above = IFFT(+1*g0fft*u8fft) g9above = IFFT(+1*g0fft*u9fft+1*g1fft*u8fft) g10above = IFFT(+1*g0fft*u10fft+1*g1fft*u9fft+1*g2fft*u8fft) g11above = IFFT(+1*g0fft*u11fft+1*g1fft*u10fft+1*g2fft*u9fft+1*g3fft*u8fft) g12above = IFFT(+1*g0fft*u12fft+1*g1fft*u11fft+1*g2fft*u10fft+1*g3fft*u9fft+1*g4fft*u8fft) g13above = IFFT(+1*g0fft*u13fft+1*g1fft*u12fft+1*g2fft*u11fft+1*g3fft*u10fft+1*g4fft*u9fft+1*g5fft*u8fft) g14above = IFFT(+1*g0fft*u14fft+1*g1fft*u13fft+1*g2fft*u12fft+1*g3fft*u11fft+1*g4fft*u10fft+1*g5fft*u9fft+1*g6fft*u8fft) g15above = IFFT(+1*g0fft*u15fft+1*g1fft*u14fft+1*g2fft*u13fft+1*g3fft*u12fft+1*g4fft*u11fft+1*g5fft*u10fft+1*g6fft*u9fft+1*g7fft*u8fft) g8 = GET(g8above,8) g9 = GET(g8above,9) + GET(g9above,9) g10 = GET(g9above,10) + GET(g10above,10) g11 = GET(g10above,11) + GET(g11above,11) g12 = GET(g11above,12) + GET(g12above,12) g13 = GET(g12above,13) + GET(g13above,13) g14 = GET(g13above,14) + GET(g14above,14) g15 = GET(g14above,15) + GET(g15above,15) kill(g8above) kill(g9above) kill(g10above) kill(g11above) kill(g12above) kill(g13above) kill(g14above) kill(g15above) \\ 4.866667 overall iteration efficiency \\ 3.866667 for u, 57 ffts \\ 4.866667 for g, 73 ffts g - g0- g1- g2- g3- g4- g5- g6- g7- g8- g9- g10- g11- g12- g13- g14- g15