! File: fft27t.i90 ! Public domain 2004 James Van Buskirk subroutine fft27t(h) ! 380 adds, 124 muls complex(wp), intent(inout) :: h(0:26) 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, xre, xie 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, yrd, yid real(wp) xr3a, xi3a, xr3_a, xi3_a real(wp) xr94, xi94, xr9_4, xi9_4 real(wp) xr67, xi67, xr6_7, xi6_7 real(wp) xr58, xi58, xr5_8, xi5_8 real(wp) yr29, yi29, yr2_9, yi2_9 real(wp) yr83, yi83, yr8_3, yi8_3 real(wp) yr56, yi56, yr5_6, yi5_6 real(wp) yr47, yi47, yr4_7, yi4_7 real(wp) xr396a47, xi396a47, xr258, xi258, pr142, pi142 real(wp) pr0, pi0, pr1, pi1, pr4, pi4, pr2, pi2, pr3, pi3 real(wp) pr7, pi7, pr586, pi586 real(wp) pr5, pi5, pr8, pi8, pr6, pi6 real(wp) yr285936, yi285936, yr147, yi147, qr142, qi142 real(wp) qr0, qi0, qr1, qi1, qr4, qi4, qr2, qi2, qr3, qi3 real(wp) qr7, qi7, qr586, qi586 real(wp) qr5, qi5, qr8, qi8, qr6, qi6 real(wp) xrbcd, xibcd, xr1e, xi1e real(wp) sr1e, si1e, sr1, si1, sre, sie real(wp) ur2, ui2, ur5, ui5, ur8, ui8 real(wp) ur3, ui3, ur4, ui4, ur6, ui6 real(wp) ur7, ui7, ur9, ui9, ura, uia real(wp) urb, uib, urc, uic, urd, uid real(wp) srb, sib, src, sic, srd, sid real(wp) sr2, si2, sr3, si3, sr4, si4 real(wp) sr5, si5, sr6, si6, sr7, si7 real(wp) sr8, si8, sr9, si9, sra, sia real(wp) yrabc, yiabc real(wp) trd, tid real(wp) vr1, vi1, vr4, vi4, vr7, vi7 real(wp) vr2, vi2, vr3, vi3, vr5, vi5 real(wp) vr6, vi6, vr8, vi8, vr9, vi9 real(wp) vra, via, vrb, vib, vrc, vic real(wp) tra, tia, trb, tib, trc, tic real(wp) tr1, ti1, tr2, ti2, tr3, ti3 real(wp) tr4, ti4, tr5, ti5, tr6, ti6 real(wp) tr7, ti7, tr8, ti8, tr9, ti9 real(wp) xr3a_94, xi3a_94, xr94_67, xi94_67 real(wp) pr1_4, pi1_4, pr4_2, pi4_2 real(wp) xr34_9a, xi34_9a, xr79_46, xi79_46 real(wp) pr5_8, pi5_8, pr8_6, pi8_6 real(wp) xrb_c, xib_c, xrc_d, xic_d real(wp) sr258, si258, sr2_5, si2_5, sr5_8, si5_8 real(wp) yr29_83, yi29_83, yr83_56, yi83_56 real(wp) qr1_4, qi1_4, qr4_2, qi4_2 real(wp) yr23_89, yi23_89, yr68_35, yi68_35 real(wp) qr5_8, qi5_8, qr8_6, qi8_6 real(wp) yra_b, yia_b, yrb_c, yib_c real(wp) tr147, ti147, tr1_4, ti1_4, tr4_7, ti4_7 real(wp), parameter :: half = 0.50000000000000000000000000000000000_wp real(wp), parameter :: dc1 = 0.74539561601309920652221317372530749_wp real(wp), parameter :: dc2 = -0.14823702431031304167036101314134772_wp real(wp), parameter :: dc3 = 0.21970402268688979797889138920491935_wp real(wp), parameter :: dc4 = -0.61578378872604662167493478081466396_wp real(wp), parameter :: dc5 = 0.45745002083467400514706857796881122_wp real(wp), parameter :: dc6 = -0.51559484974514983368581659481588413_wp real(wp), parameter :: dc7 = -0.30341470380616099754464700684974935_wp real(wp), parameter :: dc8 = -0.59021793651725125064792718001690654_wp real(wp), parameter :: dc9 = -4.4541523082973710438876419516790012E-0002_wp real(wp), parameter :: dc10 = -0.64170011478575987529072858010074892_wp real(wp), parameter :: dc11 = -0.68456231830949033126446428219722059_wp real(wp), parameter :: dc12 = -0.28848255227033350756842089058747534_wp real(wp), parameter :: dc13 = 0.76604444311897803520239265055541666_wp real(wp), parameter :: dc14 = -0.17364817766693034885171662676931448_wp real(wp), parameter :: dc15 = -0.93969262078590838405410927732473123_wp real(wp), parameter :: dc16 = -0.55667039922641936645291295204702315_wp real(wp), parameter :: dc17 = -0.85286853195244320962825096394007399_wp real(wp), parameter :: r3 = 0.86602540378443864676372317075293616_wp real(wp), parameter :: ds1 = 0.17666200627729080614912727860039091_wp real(wp), parameter :: ds2 = 0.62546118647775297893416761333353415_wp real(wp), parameter :: ds3 = 0.73386254247554002501087089468238537_wp real(wp), parameter :: ds4 = 0.18435356440473398974809052063225121_wp real(wp), parameter :: ds5 = 0.61446201450685419324900952903810861_wp real(wp), parameter :: ds6 = 0.38384614376441401479881117974516886_wp real(wp), parameter :: ds7 = 0.70339434625797552361120755084494837_wp real(wp), parameter :: ds8 = -0.25459516605751335082616721611180600_wp real(wp), parameter :: ds9 = 0.76474841716404624053523565479886999_wp real(wp), parameter :: ds10 = -3.7374775590997544548059237135055261E-0002_wp real(wp), parameter :: ds11 = 0.34380011806891691815438153301084783_wp real(wp), parameter :: ds12 = -0.57441598881135709660457988230378796_wp real(wp), parameter :: ds13 = 0.64278760968653932632264340990726338_wp real(wp), parameter :: ds14 = 0.98480775301220805936674302458952306_wp real(wp), parameter :: ds15 = 0.34202014332566873304409961468225968_wp real(wp), parameter :: ds16 = 0.66341394816893839620542131963589127_wp real(wp), parameter :: ds17 = -0.15038373318043529663927189761250221_wp real(wp), parameter :: cc1 = 0.22668159690567746581165180818809266_wp real(wp), parameter :: cc2 = -1.2266815969056774658116518081880926_wp real(wp), parameter :: cc3 = 1.3054072893322786045931334929227409_wp real(wp), parameter :: cc4 = -0.65270364466613930229656674646137046_wp real(wp), parameter :: cs1 = 0.53208888623795607040478530111083360_wp real(wp), parameter :: cs2 = -1.5320888862379560704047853011108335_wp real(wp), parameter :: cs3 = 1.3472963553338606977034332535386297_wp xr1 = real(h(0)) xi1 = aimag(h(0)) xr2 = real(h(1))+real(h(26)) xi2 = aimag(h(1))+aimag(h(26)) xr3 = real(h(4))+real(h(23)) xi3 = aimag(h(4))+aimag(h(23)) xr4 = real(h(7))+real(h(20)) xi4 = aimag(h(7))+aimag(h(20)) xr5 = real(h(10))+real(h(17)) xi5 = aimag(h(10))+aimag(h(17)) xr6 = real(h(13))+real(h(14)) xi6 = aimag(h(13))+aimag(h(14)) xr7 = real(h(16))+real(h(11)) xi7 = aimag(h(16))+aimag(h(11)) xr8 = real(h(19))+real(h(8)) xi8 = aimag(h(19))+aimag(h(8)) xr9 = real(h(22))+real(h(5)) xi9 = aimag(h(22))+aimag(h(5)) xra = real(h(25))+real(h(2)) xia = aimag(h(25))+aimag(h(2)) xrb = real(h(3))+real(h(24)) xib = aimag(h(3))+aimag(h(24)) xrc = real(h(12))+real(h(15)) xic = aimag(h(12))+aimag(h(15)) xrd = real(h(21))+real(h(6)) xid = aimag(h(21))+aimag(h(6)) xre = real(h(9))+real(h(18)) xie = aimag(h(9))+aimag(h(18)) yr1 = real(h(1))-real(h(26)) yi1 = aimag(h(1))-aimag(h(26)) yr2 = real(h(4))-real(h(23)) yi2 = aimag(h(4))-aimag(h(23)) yr3 = real(h(7))-real(h(20)) yi3 = aimag(h(7))-aimag(h(20)) yr4 = real(h(10))-real(h(17)) yi4 = aimag(h(10))-aimag(h(17)) yr5 = real(h(13))-real(h(14)) yi5 = aimag(h(13))-aimag(h(14)) yr6 = real(h(16))-real(h(11)) yi6 = aimag(h(16))-aimag(h(11)) yr7 = real(h(19))-real(h(8)) yi7 = aimag(h(19))-aimag(h(8)) yr8 = real(h(22))-real(h(5)) yi8 = aimag(h(22))-aimag(h(5)) yr9 = real(h(25))-real(h(2)) yi9 = aimag(h(25))-aimag(h(2)) yra = real(h(3))-real(h(24)) yia = aimag(h(3))-aimag(h(24)) yrb = real(h(12))-real(h(15)) yib = aimag(h(12))-aimag(h(15)) yrc = real(h(21))-real(h(6)) yic = aimag(h(21))-aimag(h(6)) yrd = real(h(9))-real(h(18)) yid = aimag(h(9))-aimag(h(18)) xr3a = xr3+xra xi3a = xi3+xia xr3_a = xr3-xra xi3_a = xi3-xia xr94 = xr9+xr4 xi94 = xi9+xi4 xr9_4 = xr9-xr4 xi9_4 = xi9-xi4 xr67 = xr6+xr7 xi67 = xi6+xi7 xr6_7 = xr6-xr7 xi6_7 = xi6-xi7 xr58 = xr5+xr8 xi58 = xi5+xi8 xr5_8 = xr5-xr8 xi5_8 = xi5-xi8 xr396a47 = xr3a+xr94+xr67 xi396a47 = xi3a+xi94+xi67 xr258 = xr2+xr58 xi258 = xi2+xi58 xr3a_94 = xr3a-xr94 xi3a_94 = xi3a-xi94 xr94_67 = xr94-xr67 xi94_67 = xi94-xi67 pr1_4 = xr3a_94-cc2*xr94_67 pi1_4 = xi3a_94-cc2*xi94_67 pr4_2 = xr94_67-cc1*xr3a_94 pi4_2 = xi94_67-cc1*xi3a_94 pr142 = cc3*xr2+cc4*xr58 pi142 = cc3*xi2+cc4*xi58 pr0 = xr258+xr396a47 pi0 = xi258+xi396a47 pr1 = pr142+pr1_4 pi1 = pi142+pi1_4 pr4 = pr142-pr1_4+pr4_2 pi4 = pi142-pi1_4+pi4_2 pr2 = pr142-pr4_2 pi2 = pi142-pi4_2 pr3 = xr258-half*xr396a47 pi3 = xi258-half*xi396a47 pr7 = xr3_a+xr9_4+xr6_7 pi7 = xi3_a+xi9_4+xi6_7 pr586 = cs3*xr5_8 pi586 = cs3*xi5_8 xr34_9a = xr3_a-xr9_4 xi34_9a = xi3_a-xi9_4 xr79_46 = xr9_4-xr6_7 xi79_46 = xi9_4-xi6_7 pr5_8 = xr34_9a-cs1*xr79_46 pi5_8 = xi34_9a-cs1*xi79_46 pr8_6 = xr79_46-cs2*xr34_9a pi8_6 = xi79_46-cs2*xi34_9a pr5 = pr586+pr5_8 pi5 = pi586+pi5_8 pr8 = pr586-pr5_8+pr8_6 pi8 = pi586-pi5_8+pi8_6 pr6 = pr586-pr8_6 pi6 = pi586-pi8_6 xrbcd = xrb+xrc+xrd xibcd = xib+xic+xid xrb_c = xrb-xrc xib_c = xib-xic xrc_d = xrc-xrd xic_d = xic-xid xr1e = xr1+xre xi1e = xi1+xie ur2 = xr1-half*xre ui2 = xi1-half*xie sr1e = xr1e+xrbcd si1e = xi1e+xibcd sr1 = sr1e+pr0 si1 = si1e+pi0 sre = sr1e-half*pr0 sie = si1e-half*pi0 ur5 = dc13*xrb_c+dc14*xrc_d ui5 = dc13*xib_c+dc14*xic_d ur8 = dc14*xrb_c+dc15*xrc_d ui8 = dc14*xib_c+dc15*xic_d ur3 = dc1*pr1+dc2*pr5 ui3 = dc1*pi1+dc2*pi5 ur4 = dc3*pr1+dc4*pr5 ui4 = dc3*pi1+dc4*pi5 ur6 = dc5*pr4+dc6*pr8 ui6 = dc5*pi4+dc6*pi8 ur7 = dc7*pr4+dc8*pr8 ui7 = dc7*pi4+dc8*pi8 ur9 = dc9*pr2+dc10*pr6 ui9 = dc9*pi2+dc10*pi6 ura = dc11*pr2+dc12*pr6 uia = dc11*pi2+dc12*pi6 urb = xr1e-half*xrbcd uib = xi1e-half*xibcd urc = dc13*pr3+dc16*pr7 uic = dc13*pi3+dc16*pi7 urd = dc14*pr3+dc17*pr7 uid = dc14*pi3+dc17*pi7 sr258 = ur2+ur5 si258 = ui2+ui5 sr2_5 = ur2-ur5+ur8 si2_5 = ui2-ui5+ui8 sr5_8 = ur2-ur8 si5_8 = ui2-ui8 sr2 = sr258+ur3 si2 = si258+ui3 sr3 = sr258-ur3+ur4 si3 = si258-ui3+ui4 sr4 = sr258-ur4 si4 = si258-ui4 sr5 = sr2_5+ur6 si5 = si2_5+ui6 sr6 = sr2_5-ur6+ur7 si6 = si2_5-ui6+ui7 sr7 = sr2_5-ur7 si7 = si2_5-ui7 sr8 = sr5_8+ur9 si8 = si5_8+ui9 sr9 = sr5_8-ur9+ura si9 = si5_8-ui9+uia sra = sr5_8-ura sia = si5_8-uia srb = urb+urc sib = uib+uic src = urb-urc+urd sic = uib-uic+uid srd = urb-urd sid = uib-uid yr29 = yr2+yr9 yi29 = yi2+yi9 yr2_9 = yr2-yr9 yi2_9 = yi2-yi9 yr83 = yr8+yr3 yi83 = yi8+yi3 yr8_3 = yr8-yr3 yi8_3 = yi8-yi3 yr56 = yr5+yr6 yi56 = yi5+yi6 yr5_6 = yr5-yr6 yi5_6 = yi5-yi6 yr47 = yr4+yr7 yi47 = yi4+yi7 yr4_7 = yr4-yr7 yi4_7 = yi4-yi7 yr285936 = yr29+yr83+yr56 yi285936 = yi29+yi83+yi56 yr147 = yr1+yr47 yi147 = yi1+yi47 yr29_83 = yr29-yr83 yi29_83 = yi29-yi83 yr83_56 = yr83-yr56 yi83_56 = yi83-yi56 qr1_4 = yr29_83-cc2*yr83_56 qi1_4 = yi29_83-cc2*yi83_56 qr4_2 = yr83_56-cc1*yr29_83 qi4_2 = yi83_56-cc1*yi29_83 qr142 = cc3*yr1+cc4*yr47 qi142 = cc3*yi1+cc4*yi47 qr0 = yr147+yr285936 qi0 = yi147+yi285936 qr1 = qr142+qr1_4 qi1 = qi142+qi1_4 qr4 = qr142-qr1_4+qr4_2 qi4 = qi142-qi1_4+qi4_2 qr2 = qr142-qr4_2 qi2 = qi142-qi4_2 qr3 = yr147-half*yr285936 qi3 = yi147-half*yi285936 qr7 = yr2_9+yr8_3+yr5_6 qi7 = yi2_9+yi8_3+yi5_6 qr586 = cs3*yr4_7 qi586 = cs3*yi4_7 yr23_89 = yr2_9-yr8_3 yi23_89 = yi2_9-yi8_3 yr68_35 = yr8_3-yr5_6 yi68_35 = yi8_3-yi5_6 qr5_8 = yr23_89-cs1*yr68_35 qi5_8 = yi23_89-cs1*yi68_35 qr8_6 = yr68_35-cs2*yr23_89 qi8_6 = yi68_35-cs2*yi23_89 qr5 = qr586+qr5_8 qi5 = qi586+qi5_8 qr8 = qr586-qr5_8+qr8_6 qi8 = qi586-qi5_8+qi8_6 qr6 = qr586-qr8_6 qi6 = qi586-qi8_6 yrabc = yra+yrb+yrc yiabc = yia+yib+yic yra_b = yra-yrb yia_b = yia-yib yrb_c = yrb-yrc yib_c = yib-yic vr1 = r3*yrd vi1 = r3*yid trd = r3*qr0 tid = r3*qi0 vr4 = ds13*yra_b+ds14*yrb_c vi4 = ds13*yia_b+ds14*yib_c vr7 = ds14*yra_b+ds15*yrb_c vi7 = ds14*yia_b+ds15*yib_c vr2 = ds1*qr1+ds2*qr5 vi2 = ds1*qi1+ds2*qi5 vr3 = ds3*qr1+ds4*qr5 vi3 = ds3*qi1+ds4*qi5 vr5 = ds5*qr4+ds6*qr8 vi5 = ds5*qi4+ds6*qi8 vr6 = ds7*qr4+ds8*qr8 vi6 = ds7*qi4+ds8*qi8 vr8 = ds9*qr2+ds10*qr6 vi8 = ds9*qi2+ds10*qi6 vr9 = ds11*qr2+ds12*qr6 vi9 = ds11*qi2+ds12*qi6 vra = r3*yrabc via = r3*yiabc vrb = ds13*qr3+ds16*qr7 vib = ds13*qi3+ds16*qi7 vrc = ds14*qr3+ds17*qr7 vic = ds14*qi3+ds17*qi7 tr147 = vr1+vr4 ti147 = vi1+vi4 tr1_4 = vr1-vr4+vr7 ti1_4 = vi1-vi4+vi7 tr4_7 = vr1-vr7 ti4_7 = vi1-vi7 tr1 = tr147+vr2 ti1 = ti147+vi2 tr2 = tr147-vr2+vr3 ti2 = ti147-vi2+vi3 tr3 = tr147-vr3 ti3 = ti147-vi3 tr4 = tr1_4+vr5 ti4 = ti1_4+vi5 tr5 = tr1_4-vr5+vr6 ti5 = ti1_4-vi5+vi6 tr6 = tr1_4-vr6 ti6 = ti1_4-vi6 tr7 = tr4_7+vr8 ti7 = ti4_7+vi8 tr8 = tr4_7-vr8+vr9 ti8 = ti4_7-vi8+vi9 tr9 = tr4_7-vr9 ti9 = ti4_7-vi9 tra = vra+vrb tia = via+vib trb = vra-vrb+vrc tib = via-vib+vic trc = vra-vrc tic = via-vic h(0) = cmplx(sr1,si1,wp) h(1) = cmplx(sr2+ti1,si2-tr1,wp) h(2) = cmplx(sra-ti9,sia+tr9,wp) h(3) = cmplx(srb+tia,sib-tra,wp) h(4) = cmplx(sr5+ti4,si5-tr4,wp) h(5) = cmplx(sr7-ti6,si7+tr6,wp) h(6) = cmplx(srd-tic,sid+trc,wp) h(7) = cmplx(sr8+ti7,si8-tr7,wp) h(8) = cmplx(sr4-ti3,si4+tr3,wp) h(9) = cmplx(sre+tid,sie-trd,wp) h(10) = cmplx(sr3+ti2,si3-tr2,wp) h(11) = cmplx(sr9-ti8,si9+tr8,wp) h(12) = cmplx(src+tib,sic-trb,wp) h(13) = cmplx(sr6+ti5,si6-tr5,wp) h(14) = cmplx(sr6-ti5,si6+tr5,wp) h(15) = cmplx(src-tib,sic+trb,wp) h(16) = cmplx(sr9+ti8,si9-tr8,wp) h(17) = cmplx(sr3-ti2,si3+tr2,wp) h(18) = cmplx(sre-tid,sie+trd,wp) h(19) = cmplx(sr4+ti3,si4-tr3,wp) h(20) = cmplx(sr8-ti7,si8+tr7,wp) h(21) = cmplx(srd+tic,sid-trc,wp) h(22) = cmplx(sr7+ti6,si7-tr6,wp) h(23) = cmplx(sr5-ti4,si5+tr4,wp) h(24) = cmplx(srb-tia,sib+tra,wp) h(25) = cmplx(sra+ti9,sia-tr9,wp) h(26) = cmplx(sr2-ti1,si2+tr1,wp) end subroutine fft27t