! File: fft25t.i90 ! Public domain 2004 James Van Buskirk subroutine fft25t(h) ! 332 adds, 156 muls complex(wp), intent(inout) :: h(0:24) real(wp) xr1, xi1, xr2, xi2, xr3, xi3, xr4, xi4, xr5, xi5 real(wp) xr6, xi6, xr7, xi7, xr8, xi8, xr9, xi9, xra, xia real(wp) xrb, xib, xrc, xic, xrd, xid real(wp) yr1, yi1, yr2, yi2, yr3, yi3, yr4, yi4, yr5, yi5 real(wp) yr6, yi6, yr7, yi7, yr8, yi8, yr9, yi9, yra, yia real(wp) yrb, yib, yrc, yic real(wp) xr36, xi36, xr3_6, xi3_6, xr45, xi45, xr4_5, xi4_5 real(wp) xr8b, xi8b, xr8_b, xi8_b, xr9a, xi9a, xr9_a, xi9_a real(wp) xr3645, xi3645, pr0, pi0, pr12, pi12 real(wp) pr1, pi1, pr2, pi2, pr3, pi3, pr4, pi4 real(wp) xr8b9a, xi8b9a, pr5, pi5, pr67, pi67 real(wp) pr6, pi6, pr7, pi7, pr8, pi8, pr9, pi9 real(wp) xrcd, xicd, ur27, ui27, ur2, ui2, ur7, ui7 real(wp) sr1cd, si1cd, sr1_cd, si1_cd, sr1, si1 real(wp) srcd, sicd, src, sic, srd, sid real(wp) ur3, ui3, ur5, ui5, ur4, ui4, ur6, ui6 real(wp) ur8, ui8, ura, uia, ur9, ui9, urb, uib real(wp) ur34, ui34, sr2, si2, sr3645, si3645 real(wp) sr36, si36, sr45, si45, sr3_6, si3_6, sr4_5, si4_5 real(wp) sr3, si3, sr4, si4, sr5, si5, sr6, si6 real(wp) ur89, ui89, sr7, si7, sr8b9a, si8b9a real(wp) sr8b, si8b, sr9a, si9a, sr8_b, si8_b, sr9_a, si9_a real(wp) sr8, si8, sr9, si9, sra, sia, srb, sib real(wp) yr25, yi25, yr2_5, yi2_5, yr34, yi34, yr3_4, yi3_4 real(wp) yr7a, yi7a, yr7_a, yi7_a, yr89, yi89, yr8_9, yi8_9 real(wp) yr2534, yi2534, qr0, qi0, qr12, qi12 real(wp) qr1, qi1, qr2, qi2, qr3, qi3, qr4, qi4 real(wp) yr7a89, yi7a89, qr5, qi5, qr67, qi67 real(wp) qr6, qi6, qr7, qi7, qr8, qi8, qr9, qi9 real(wp) vr1, vi1, vr6, vi6 real(wp) trb, tib, trc, tic real(wp) vr2, vi2, vr4, vi4, vr3, vi3, vr5, vi5 real(wp) vr7, vi7, vr9, vi9, vr8, vi8, vra, via real(wp) vr23, vi23, tr1, ti1, tr2534, ti2534 real(wp) tr25, ti25, tr34, ti34, tr2_5, ti2_5, tr3_4, ti3_4 real(wp) tr2, ti2, tr3, ti3, tr4, ti4, tr5, ti5 real(wp) vr78, vi78, tr6, ti6, tr7a89, ti7a89 real(wp) tr7a, ti7a, tr89, ti89, tr7_a, ti7_a, tr8_9, ti8_9 real(wp) tr7, ti7, tr8, ti8, tr9, ti9, tra, tia real(wp), parameter :: dc1 = 1.2107289514107888993627104693309198_wp real(wp), parameter :: dc2 = 0.26443531693220165729089750809848914_wp real(wp), parameter :: dc3 = -0.87609169947355083820449802970686972_wp real(wp), parameter :: dc4 = 1.0953833500548294841351448799025784_wp real(wp), parameter :: dc5 = 0.51225519037648662951596556189640068_wp real(wp), parameter :: dc6 = -0.79262683824181941363213182409353896_wp real(wp), parameter :: dc7 = 0.66978349372374577283913595983455021_wp real(wp), parameter :: dc8 = 0.89778529042811259728528068717899865_wp real(wp), parameter :: dc9 = -0.48465988907923281603184546684791001_wp real(wp), parameter :: dc10 = 0.30901699437494742410229341718281908_wp real(wp), parameter :: dc11 = -1.1180339887498948482045868343656382_wp real(wp), parameter :: ds1 = 0.31086235895606848530285468250805980_wp real(wp), parameter :: ds2 = -1.0299075612128052551052021096521023_wp real(wp), parameter :: ds3 = -0.22494211610520521203265749522902808_wp real(wp), parameter :: ds4 = 0.60219209262714409373398937859016165_wp real(wp), parameter :: ds5 = -0.93178873217950622524787497899622260_wp real(wp), parameter :: ds6 = -0.43575029177628645807873322346511171_wp real(wp), parameter :: ds7 = 1.0554099068775188481856975799583515_wp real(wp), parameter :: ds8 = -0.56975187035695780615901817528590165_wp real(wp), parameter :: ds9 = -0.76370178302924491955160002057244332_wp real(wp), parameter :: ds10 = 0.95105651629515357211643933337938224_wp real(wp), parameter :: ds11 = 0.58778525229247312916870595463907273_wp real(wp), parameter :: cc1 = -0.27639320225002103035908263312687237_wp real(wp), parameter :: cc2 = -0.89442719099991587856366946749251043_wp real(wp), parameter :: cs1 = 0.61803398874989484820458683436563806_wp xr1 = real(h(0)) xi1 = aimag(h(0)) xr2 = real(h(1))+real(h(24)) xi2 = aimag(h(1))+aimag(h(24)) xr3 = real(h(6))+real(h(19)) xi3 = aimag(h(6))+aimag(h(19)) xr4 = real(h(11))+real(h(14)) xi4 = aimag(h(11))+aimag(h(14)) xr5 = real(h(16))+real(h(9)) xi5 = aimag(h(16))+aimag(h(9)) xr6 = real(h(21))+real(h(4)) xi6 = aimag(h(21))+aimag(h(4)) xr7 = real(h(2))+real(h(23)) xi7 = aimag(h(2))+aimag(h(23)) xr8 = real(h(7))+real(h(18)) xi8 = aimag(h(7))+aimag(h(18)) xr9 = real(h(12))+real(h(13)) xi9 = aimag(h(12))+aimag(h(13)) xra = real(h(17))+real(h(8)) xia = aimag(h(17))+aimag(h(8)) xrb = real(h(22))+real(h(3)) xib = aimag(h(22))+aimag(h(3)) xrc = real(h(5))+real(h(20)) xic = aimag(h(5))+aimag(h(20)) xrd = real(h(10))+real(h(15)) xid = aimag(h(10))+aimag(h(15)) yr1 = real(h(1))-real(h(24)) yi1 = aimag(h(1))-aimag(h(24)) yr2 = real(h(6))-real(h(19)) yi2 = aimag(h(6))-aimag(h(19)) yr3 = real(h(11))-real(h(14)) yi3 = aimag(h(11))-aimag(h(14)) yr4 = real(h(16))-real(h(9)) yi4 = aimag(h(16))-aimag(h(9)) yr5 = real(h(21))-real(h(4)) yi5 = aimag(h(21))-aimag(h(4)) yr6 = real(h(2))-real(h(23)) yi6 = aimag(h(2))-aimag(h(23)) yr7 = real(h(7))-real(h(18)) yi7 = aimag(h(7))-aimag(h(18)) yr8 = real(h(12))-real(h(13)) yi8 = aimag(h(12))-aimag(h(13)) yr9 = real(h(17))-real(h(8)) yi9 = aimag(h(17))-aimag(h(8)) yra = real(h(22))-real(h(3)) yia = aimag(h(22))-aimag(h(3)) yrb = real(h(5))-real(h(20)) yib = aimag(h(5))-aimag(h(20)) yrc = real(h(10))-real(h(15)) yic = aimag(h(10))-aimag(h(15)) xr36 = xr3+xr6 xi36 = xi3+xi6 xr3_6 = xr3-xr6 xi3_6 = xi3-xi6 xr45 = xr4+xr5 xi45 = xi4+xi5 xr4_5 = xr4-xr5 xi4_5 = xi4-xi5 xr8b = xr8+xrb xi8b = xi8+xib xr8_b = xr8-xrb xi8_b = xi8-xib xr9a = xr9+xra xi9a = xi9+xia xr9_a = xr9-xra xi9_a = xi9-xia xr3645 = xr36+xr45 xi3645 = xi36+xi45 pr0 = xr2+xr3645 pi0 = xi2+xi3645 pr12 = cc2*xr2+cc1*xr3645 pi12 = cc2*xi2+cc1*xi3645 pr1 = pr12+xr45 pi1 = pi12+xi45 pr2 = pr12+xr36 pi2 = pi12+xi36 pr3 = xr3_6+cs1*xr4_5 pi3 = xi3_6+cs1*xi4_5 pr4 = cs1*xr3_6-xr4_5 pi4 = cs1*xi3_6-xi4_5 xr8b9a = xr8b+xr9a xi8b9a = xi8b+xi9a pr5 = xr7+xr8b9a pi5 = xi7+xi8b9a pr67 = cc2*xr7+cc1*xr8b9a pi67 = cc2*xi7+cc1*xi8b9a pr6 = pr67+xr9a pi6 = pi67+xi9a pr7 = pr67+xr8b pi7 = pi67+xi8b pr8 = xr8_b+cs1*xr9_a pi8 = xi8_b+cs1*xi9_a pr9 = cs1*xr8_b-xr9_a pi9 = cs1*xi8_b-xi9_a xrcd = xrc+xrd xicd = xic+xid ur27 = xr1+dc10*xrcd ui27 = xi1+dc10*xicd ur2 = ur27+dc11*xrd ui2 = ui27+dc11*xid ur7 = ur27+dc11*xrc ui7 = ui27+dc11*xic sr1cd = xr1+xrcd si1cd = xi1+xicd sr1_cd = pr0+pr5 si1_cd = pi0+pi5 sr1 = sr1cd+sr1_cd si1 = si1cd+si1_cd srcd = sr1cd+dc10*sr1_cd sicd = si1cd+dc10*si1_cd src = srcd+dc11*pr5 sic = sicd+dc11*pi5 srd = srcd+dc11*pr0 sid = sicd+dc11*pi0 ur3 = dc1*pr1+dc2*pr3 ui3 = dc1*pi1+dc2*pi3 ur5 = dc2*pr1+dc3*pr3 ui5 = dc2*pi1+dc3*pi3 ur4 = dc4*pr6+dc5*pr8 ui4 = dc4*pi6+dc5*pi8 ur6 = dc5*pr6+dc6*pr8 ui6 = dc5*pi6+dc6*pi8 ur8 = dc4*pr2+dc5*pr4 ui8 = dc4*pi2+dc5*pi4 ura = dc5*pr2+dc6*pr4 uia = dc5*pi2+dc6*pi4 ur9 = dc7*pr7+dc8*pr9 ui9 = dc7*pi7+dc8*pi9 urb = dc8*pr7+dc9*pr9 uib = dc8*pi7+dc9*pi9 ur34 = ur3+ur4 ui34 = ui3+ui4 sr2 = ur2+cc2*ur34 si2 = ui2+cc2*ui34 sr3645 = ur2+cc1*ur34 si3645 = ui2+cc1*ui34 sr36 = sr3645+ur4 si36 = si3645+ui4 sr45 = sr3645+ur3 si45 = si3645+ui3 sr3_6 = ur5+cs1*ur6 si3_6 = ui5+cs1*ui6 sr4_5 = cs1*ur5-ur6 si4_5 = cs1*ui5-ui6 sr3 = sr36+sr3_6 si3 = si36+si3_6 sr6 = sr36-sr3_6 si6 = si36-si3_6 sr4 = sr45+sr4_5 si4 = si45+si4_5 sr5 = sr45-sr4_5 si5 = si45-si4_5 ur89 = ur8+ur9 ui89 = ui8+ui9 sr7 = ur7+cc2*ur89 si7 = ui7+cc2*ui89 sr8b9a = ur7+cc1*ur89 si8b9a = ui7+cc1*ui89 sr8b = sr8b9a+ur9 si8b = si8b9a+ui9 sr9a = sr8b9a+ur8 si9a = si8b9a+ui8 sr8_b = ura+cs1*urb si8_b = uia+cs1*uib sr9_a = cs1*ura-urb si9_a = cs1*uia-uib sr8 = sr8b+sr8_b si8 = si8b+si8_b srb = sr8b-sr8_b sib = si8b-si8_b sr9 = sr9a+sr9_a si9 = si9a+si9_a sra = sr9a-sr9_a sia = si9a-si9_a yr25 = yr2+yr5 yi25 = yi2+yi5 yr2_5 = yr2-yr5 yi2_5 = yi2-yi5 yr34 = yr3+yr4 yi34 = yi3+yi4 yr3_4 = yr3-yr4 yi3_4 = yi3-yi4 yr7a = yr7+yra yi7a = yi7+yia yr7_a = yr7-yra yi7_a = yi7-yia yr89 = yr8+yr9 yi89 = yi8+yi9 yr8_9 = yr8-yr9 yi8_9 = yi8-yi9 yr2534 = yr25+yr34 yi2534 = yi25+yi34 qr0 = yr1+yr2534 qi0 = yi1+yi2534 qr12 = cc2*yr1+cc1*yr2534 qi12 = cc2*yi1+cc1*yi2534 qr1 = qr12+yr34 qi1 = qi12+yi34 qr2 = qr12+yr25 qi2 = qi12+yi25 qr3 = yr2_5+cs1*yr3_4 qi3 = yi2_5+cs1*yi3_4 qr4 = cs1*yr2_5-yr3_4 qi4 = cs1*yi2_5-yi3_4 yr7a89 = yr7a+yr89 yi7a89 = yi7a+yi89 qr5 = yr6+yr7a89 qi5 = yi6+yi7a89 qr67 = cc2*yr6+cc1*yr7a89 qi67 = cc2*yi6+cc1*yi7a89 qr6 = qr67+yr89 qi6 = qi67+yi89 qr7 = qr67+yr7a qi7 = qi67+yi7a qr8 = yr7_a+cs1*yr8_9 qi8 = yi7_a+cs1*yi8_9 qr9 = cs1*yr7_a-yr8_9 qi9 = cs1*yi7_a-yi8_9 vr1 = ds10*yrb+ds11*yrc vi1 = ds10*yib+ds11*yic vr6 = ds11*yrb-ds10*yrc vi6 = ds11*yib-ds10*yic trb = ds10*qr0+ds11*qr5 tib = ds10*qi0+ds11*qi5 trc = ds11*qr0-ds10*qr5 tic = ds11*qi0-ds10*qi5 vr2 = ds1*qr1+ds2*qr3 vi2 = ds1*qi1+ds2*qi3 vr4 = ds2*qr1+ds3*qr3 vi4 = ds2*qi1+ds3*qi3 vr3 = ds4*qr6+ds5*qr8 vi3 = ds4*qi6+ds5*qi8 vr5 = ds5*qr6+ds6*qr8 vi5 = ds5*qi6+ds6*qi8 vr7 = ds4*qr2+ds5*qr4 vi7 = ds4*qi2+ds5*qi4 vr9 = ds5*qr2+ds6*qr4 vi9 = ds5*qi2+ds6*qi4 vr8 = ds7*qr7+ds8*qr9 vi8 = ds7*qi7+ds8*qi9 vra = ds8*qr7+ds9*qr9 via = ds8*qi7+ds9*qi9 vr23 = vr2+vr3 vi23 = vi2+vi3 tr1 = vr1+cc2*vr23 ti1 = vi1+cc2*vi23 tr2534 = vr1+cc1*vr23 ti2534 = vi1+cc1*vi23 tr25 = tr2534+vr3 ti25 = ti2534+vi3 tr34 = tr2534+vr2 ti34 = ti2534+vi2 tr2_5 = vr4+cs1*vr5 ti2_5 = vi4+cs1*vi5 tr3_4 = cs1*vr4-vr5 ti3_4 = cs1*vi4-vi5 tr2 = tr25+tr2_5 ti2 = ti25+ti2_5 tr5 = tr25-tr2_5 ti5 = ti25-ti2_5 tr3 = tr34+tr3_4 ti3 = ti34+ti3_4 tr4 = tr34-tr3_4 ti4 = ti34-ti3_4 vr78 = vr7+vr8 vi78 = vi7+vi8 tr6 = vr6+cc2*vr78 ti6 = vi6+cc2*vi78 tr7a89 = vr6+cc1*vr78 ti7a89 = vi6+cc1*vi78 tr7a = tr7a89+vr8 ti7a = ti7a89+vi8 tr89 = tr7a89+vr7 ti89 = ti7a89+vi7 tr7_a = vr9+cs1*vra ti7_a = vi9+cs1*via tr8_9 = cs1*vr9-vra ti8_9 = cs1*vi9-via tr7 = tr7a+tr7_a ti7 = ti7a+ti7_a tra = tr7a-tr7_a tia = ti7a-ti7_a tr8 = tr89+tr8_9 ti8 = ti89+ti8_9 tr9 = tr89-tr8_9 ti9 = ti89-ti8_9 h(0) = cmplx(sr1,si1,wp) h(1) = cmplx(sr2+ti1,si2-tr1,wp) h(2) = cmplx(sr7+ti6,si7-tr6,wp) h(3) = cmplx(srb-tia,sib+tra,wp) h(4) = cmplx(sr6-ti5,si6+tr5,wp) h(5) = cmplx(src+tib,sic-trb,wp) h(6) = cmplx(sr3+ti2,si3-tr2,wp) h(7) = cmplx(sr8+ti7,si8-tr7,wp) h(8) = cmplx(sra-ti9,sia+tr9,wp) h(9) = cmplx(sr5-ti4,si5+tr4,wp) h(10) = cmplx(srd+tic,sid-trc,wp) h(11) = cmplx(sr4+ti3,si4-tr3,wp) h(12) = cmplx(sr9+ti8,si9-tr8,wp) h(13) = cmplx(sr9-ti8,si9+tr8,wp) h(14) = cmplx(sr4-ti3,si4+tr3,wp) h(15) = cmplx(srd-tic,sid+trc,wp) h(16) = cmplx(sr5+ti4,si5-tr4,wp) h(17) = cmplx(sra+ti9,sia-tr9,wp) h(18) = cmplx(sr8-ti7,si8+tr7,wp) h(19) = cmplx(sr3-ti2,si3+tr2,wp) h(20) = cmplx(src-tib,sic+trb,wp) h(21) = cmplx(sr6+ti5,si6-tr5,wp) h(22) = cmplx(srb+tia,sib-tra,wp) h(23) = cmplx(sr7-ti6,si7+tr6,wp) h(24) = cmplx(sr2-ti1,si2+tr1,wp) end subroutine fft25t