! File: fft27a.i90 ! Public domain 2004 James Van Buskirk subroutine fft27a(h) ! 368 adds, 152 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, xr1_e, xi1_e real(wp) sr1e, si1e, sr1, si1, sre, sie real(wp) ur258, ui258, ur2, ui2, ur5, ui5, ur8, ui8 real(wp) ur3, ui3, ur4, ui4, ur6, ui6 real(wp) ur7, ui7, ur9, ui9, ura, uia real(wp) srbcd, sibcd, urb, uib, urc, uic, ur_d, ui_d 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) vr147, vi147, vr1, vi1, vr4, vi4, vr7, vi7 real(wp) vr2, vi2, vr3, vi3, vr5, vi5 real(wp) vr6, vi6, vr8, vi8, vr9, vi9 real(wp) trabc, tiabc, vrb, vib, vrc, vic, vr_a, vi_a 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), parameter :: half = 0.50000000000000000000000000000000000_wp real(wp), parameter :: dc1 = -0.57642814744875870894356548634397085_wp real(wp), parameter :: dc2 = 0.37534932178512936778775671736975588_wp real(wp), parameter :: dc3 = -0.16990116397762442780123070654139485_wp real(wp), parameter :: dc4 = 1.5592192877587242400451696503448437_wp real(wp), parameter :: dc5 = -0.35375451960733467391558398434425275_wp real(wp), parameter :: dc6 = 1.3055319888412227506469061880579815_wp real(wp), parameter :: dc7 = 0.23463617422271728795511750546719294_wp real(wp), parameter :: dc8 = 1.4944842775136313798912828514190466_wp real(wp), parameter :: dc9 = 3.4444779501914135581371229812285541E-0002_wp real(wp), parameter :: dc10 = 1.6248417289466432889811189425899489_wp real(wp), parameter :: dc11 = 0.52938463881364237539017828848881944_wp real(wp), parameter :: dc12 = 0.73046346447727171654598705746303349_wp real(wp), parameter :: dc13 = -0.93969262078590838405410927732473143_wp real(wp), parameter :: dc14 = 1.7057370639048864192565019278801480_wp real(wp), parameter :: dc15 = 1.1133407984528387329058259040940457_wp real(wp), parameter :: dc16 = 0.76604444311897803520239265055541608_wp real(wp), parameter :: dc17 = -0.55667039922641936645291295204702315_wp real(wp), parameter :: dc18 = -0.29619813272602384317533801189305085_wp real(wp), parameter :: r3 = 0.86602540378443864676372317075293616_wp real(wp), parameter :: ds1 = -0.13661598058179370950469763186607038_wp real(wp), parameter :: ds2 = -1.5837233190535240903375586753824913_wp real(wp), parameter :: ds3 = -0.56750940943792405345618398900616916_wp real(wp), parameter :: ds4 = -0.46679961156758019097844394968917870_wp real(wp), parameter :: ds5 = -0.47517478382056093164794148757277248_wp real(wp), parameter :: ds6 = -0.97193255465116944918491955594364809_wp real(wp), parameter :: ds7 = -0.54394779259379259520491653846635096_wp real(wp), parameter :: ds8 = 0.64465759046413645768265657778334321_wp real(wp), parameter :: ds9 = -0.59139402473021103647230321846204473_wp real(wp), parameter :: ds10 = 9.4636253899602518935325150091169794E-0002_wp real(wp), parameter :: ds11 = -0.26586695828869437347734159549943322_wp real(wp), parameter :: ds12 = 1.4544723413466234263649147117491282_wp real(wp), parameter :: ds13 = -0.98480775301220805936674302458952306_wp real(wp), parameter :: ds14 = 1.6275953626987473856893864344967864_wp real(wp), parameter :: ds15 = 1.3268278963378767924108426392717827_wp real(wp), parameter :: ds16 = 0.34202014332566873304409961468225881_wp real(wp), parameter :: ds17 = -0.81379768134937369284469321724839351_wp real(wp), parameter :: ds18 = 0.15038373318043529663927189761250216_wp real(wp), parameter :: cc1 = -1.2931284138572722560360728515498211_wp real(wp), parameter :: cc2 = 2.8793852415718167681082185546494632_wp real(wp), parameter :: cc3 = -1.6880592574919707136031902007405558_wp real(wp), parameter :: cc4 = 0.84402962874598535680159510037027790_wp real(wp), parameter :: cs1 = -0.39493084363469845756711734919073458_wp real(wp), parameter :: cs2 = 0.18479253090409537270135204757220363_wp real(wp), parameter :: cs3 = -0.53208888623795607040478530111083331_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 pr142 = cc3*xr2+cc1*xr396a47+cc4*xr58 pi142 = cc3*xi2+cc1*xi396a47+cc4*xi58 pr0 = xr258+xr396a47 pi0 = xi258+xi396a47 pr1 = pr142+xr94+cc2*xr67 pi1 = pi142+xi94+cc2*xi67 pr4 = pr142+cc2*xr3a+xr67 pi4 = pi142+cc2*xi3a+xi67 pr2 = pr142+xr3a+cc2*xr94 pi2 = pi142+xi3a+cc2*xi94 pr3 = xr258-half*xr396a47 pi3 = xi258-half*xi396a47 pr7 = xr3_a+xr9_4+xr6_7 pi7 = xi3_a+xi9_4+xi6_7 pr586 = cs1*pr7+cs3*xr5_8 pi586 = cs1*pi7+cs3*xi5_8 pr5 = pr586+xr9_4+cs2*xr6_7 pi5 = pi586+xi9_4+cs2*xi6_7 pr8 = pr586+cs2*xr3_a+xr6_7 pi8 = pi586+cs2*xi3_a+xi6_7 pr6 = pr586+xr3_a+cs2*xr9_4 pi6 = pi586+xi3_a+cs2*xi9_4 xrbcd = xrb+xrc+xrd xibcd = xib+xic+xid xr1e = xr1+xre xi1e = xi1+xie xr1_e = xr1-half*xre xi1_e = xi1-half*xie sr1e = xr1e+xrbcd si1e = xi1e+xibcd sr1 = sr1e+pr0 si1 = si1e+pi0 sre = sr1e-half*pr0 sie = si1e-half*pi0 ur258 = dc13*xrbcd+xr1_e ui258 = dc13*xibcd+xi1_e ur2 = ur258+dc14*xrb+dc15*xrd ui2 = ui258+dc14*xib+dc15*xid ur5 = ur258+dc15*xrc+dc14*xrd ui5 = ui258+dc15*xic+dc14*xid ur8 = ur258+dc15*xrb+dc14*xrc ui8 = ui258+dc15*xib+dc14*xic 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 srbcd = xr1e-half*xrbcd sibcd = xi1e-half*xibcd urb = dc16*pr3+dc17*pr7 uib = dc16*pi3+dc17*pi7 urc = dc13*pr3+dc18*pr7 uic = dc13*pi3+dc18*pi7 ur_d = urb+urc ui_d = uib+uic srb = srbcd+urb sib = sibcd+uib src = srbcd+urc sic = sibcd+uic srd = srbcd-ur_d sid = sibcd-ui_d sr2 = ur2+ur3 si2 = ui2+ui3 sr3 = ur2-ur3+ur4 si3 = ui2-ui3+ui4 sr4 = ur2-ur4 si4 = ui2-ui4 sr5 = ur5+ur6 si5 = ui5+ui6 sr6 = ur5-ur6+ur7 si6 = ui5-ui6+ui7 sr7 = ur5-ur7 si7 = ui5-ui7 sr8 = ur8+ur9 si8 = ui8+ui9 sr9 = ur8-ur9+ura si9 = ui8-ui9+uia sra = ur8-ura sia = ui8-uia 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 qr142 = cc3*yr1+cc1*yr285936+cc4*yr47 qi142 = cc3*yi1+cc1*yi285936+cc4*yi47 qr0 = yr147+yr285936 qi0 = yi147+yi285936 qr1 = qr142+yr83+cc2*yr56 qi1 = qi142+yi83+cc2*yi56 qr4 = qr142+cc2*yr29+yr56 qi4 = qi142+cc2*yi29+yi56 qr2 = qr142+yr29+cc2*yr83 qi2 = qi142+yi29+cc2*yi83 qr3 = yr147-half*yr285936 qi3 = yi147-half*yi285936 qr7 = yr2_9+yr8_3+yr5_6 qi7 = yi2_9+yi8_3+yi5_6 qr586 = cs1*qr7+cs3*yr4_7 qi586 = cs1*qi7+cs3*yi4_7 qr5 = qr586+yr8_3+cs2*yr5_6 qi5 = qi586+yi8_3+cs2*yi5_6 qr8 = qr586+cs2*yr2_9+yr5_6 qi8 = qi586+cs2*yi2_9+yi5_6 qr6 = qr586+yr2_9+cs2*yr8_3 qi6 = qi586+yi2_9+cs2*yi8_3 yrabc = yra+yrb+yrc yiabc = yia+yib+yic trd = r3*qr0 tid = r3*qi0 vr147 = ds13*yrabc+r3*yrd vi147 = ds13*yiabc+r3*yid vr1 = vr147+ds14*yra+ds15*yrb vi1 = vi147+ds14*yia+ds15*yib vr4 = vr147+ds15*yra+ds14*yrc vi4 = vi147+ds15*yia+ds14*yic vr7 = vr147+ds14*yrb+ds15*yrc vi7 = vi147+ds14*yib+ds15*yic 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 trabc = r3*yrabc tiabc = r3*yiabc vrb = ds16*qr3+ds17*qr7 vib = ds16*qi3+ds17*qi7 vrc = ds13*qr3+ds18*qr7 vic = ds13*qi3+ds18*qi7 vr_a = vrb+vrc vi_a = vib+vic tra = trabc-vr_a tia = tiabc-vi_a trb = trabc+vrb tib = tiabc+vib trc = trabc+vrc tic = tiabc+vic tr1 = vr1+vr2 ti1 = vi1+vi2 tr2 = vr1-vr2+vr3 ti2 = vi1-vi2+vi3 tr3 = vr1-vr3 ti3 = vi1-vi3 tr4 = vr4+vr5 ti4 = vi4+vi5 tr5 = vr4-vr5+vr6 ti5 = vi4-vi5+vi6 tr6 = vr4-vr6 ti6 = vi4-vi6 tr7 = vr7+vr8 ti7 = vi7+vi8 tr8 = vr7-vr8+vr9 ti8 = vi7-vi8+vi9 tr9 = vr7-vr9 ti9 = vi7-vi9 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 fft27a