* FFTPACK code obtained by Chris Biemesderfer from Argonne National Lab * math library over Arpanet (via netlib@argonne). Written at NCAR by * Paul Swarztrauber in Apr 85. * Caveat receptor. (Jack) dongarra@anl-mcs, (Eric Grosse) research!ehg * Compliments of netlib Fri Jun 12 13:42:13 CDT 1987 * * Array size declarations changed from (1) to (*) for dummy arguments * by PEH on 15-Feb-1993. * * The forward and backward Fourier transform routines are CFFTF and CFFTB * respectively. Before using either of these, an array WSAVE of trig * coefficients must first be computed by calling CFFTI. This array needs * to be recomputed only if the number of points to be transformed is changed. * The length of this array is 15 + 4*N. * * Usage is as follows: * * call cffti (n, wsave) * call cfftf (n, c, wsave) * call cfftb (n, c, wsave) * * integer n ! length of array c * real wsave(15+4*n) ! work array of trig coefficients * complex c(n) ! array to be transformed in-place * * The length N is input to all routines. The work array WSAVE is output * from CFFTI and input to CFFTF & CFFTB. The complex array C is both * input and output for CFFTF & CFFTB. * * This file contains the following subroutines, of which the first three * are the high-level routines: * * cffti * cfftf * cfftb * cffti1 * cfftf1 * cfftb1 * passf * passf2 * passf3 * passf4 * passf5 * passb * passb2 * passb3 * passb4 * passb5 subroutine cffti (n,wsave) dimension wsave(*) if (n .eq. 1) return iw1 = n+n+1 iw2 = iw1+n+n call cffti1 (n,wsave(iw1),wsave(iw2)) return end subroutine cfftf (n,c,wsave) dimension c(*) ,wsave(*) if (n .eq. 1) return iw1 = n+n+1 iw2 = iw1+n+n call cfftf1 (n,c,wsave,wsave(iw1),wsave(iw2)) return end subroutine cfftb (n,c,wsave) dimension c(*) ,wsave(*) if (n .eq. 1) return iw1 = n+n+1 iw2 = iw1+n+n call cfftb1 (n,c,wsave,wsave(iw1),wsave(iw2)) return end subroutine cffti1 (n,wa,ifac) dimension wa(*) ,ifac(*) ,ntryh(4) data ntryh(1),ntryh(2),ntryh(3),ntryh(4)/3,4,2,5/ nl = n nf = 0 j = 0 101 j = j+1 if (j-4) 102,102,103 102 ntry = ntryh(j) go to 104 103 ntry = ntry+2 104 nq = nl/ntry nr = nl-ntry*nq if (nr) 101,105,101 105 nf = nf+1 ifac(nf+2) = ntry nl = nq if (ntry .ne. 2) go to 107 if (nf .eq. 1) go to 107 do 106 i=2,nf ib = nf-i+2 ifac(ib+2) = ifac(ib+1) 106 continue ifac(3) = 2 107 if (nl .ne. 1) go to 104 ifac(1) = n ifac(2) = nf tpi = 6.28318530717959 argh = tpi/float(n) i = 2 l1 = 1 do 110 k1=1,nf ip = ifac(k1+2) ld = 0 l2 = l1*ip ido = n/l2 idot = ido+ido+2 ipm = ip-1 do 109 j=1,ipm i1 = i wa(i-1) = 1. wa(i) = 0. ld = ld+l1 fi = 0. argld = float(ld)*argh do 108 ii=4,idot,2 i = i+2 fi = fi+1. arg = fi*argld wa(i-1) = cos(arg) wa(i) = sin(arg) 108 continue if (ip .le. 5) go to 109 wa(i1-1) = wa(i-1) wa(i1) = wa(i) 109 continue l1 = l2 110 continue return end subroutine cfftf1 (n,c,ch,wa,ifac) dimension ch(*) ,c(*) ,wa(*) ,ifac(*) nf = ifac(2) na = 0 l1 = 1 iw = 1 do 116 k1=1,nf ip = ifac(k1+2) l2 = ip*l1 ido = n/l2 idot = ido+ido idl1 = idot*l1 if (ip .ne. 4) go to 103 ix2 = iw+idot ix3 = ix2+idot if (na .ne. 0) go to 101 call passf4 (idot,l1,c,ch,wa(iw),wa(ix2),wa(ix3)) go to 102 101 call passf4 (idot,l1,ch,c,wa(iw),wa(ix2),wa(ix3)) 102 na = 1-na go to 115 103 if (ip .ne. 2) go to 106 if (na .ne. 0) go to 104 call passf2 (idot,l1,c,ch,wa(iw)) go to 105 104 call passf2 (idot,l1,ch,c,wa(iw)) 105 na = 1-na go to 115 106 if (ip .ne. 3) go to 109 ix2 = iw+idot if (na .ne. 0) go to 107 call passf3 (idot,l1,c,ch,wa(iw),wa(ix2)) go to 108 107 call passf3 (idot,l1,ch,c,wa(iw),wa(ix2)) 108 na = 1-na go to 115 109 if (ip .ne. 5) go to 112 ix2 = iw+idot ix3 = ix2+idot ix4 = ix3+idot if (na .ne. 0) go to 110 call passf5 (idot,l1,c,ch,wa(iw),wa(ix2),wa(ix3),wa(ix4)) go to 111 110 call passf5 (idot,l1,ch,c,wa(iw),wa(ix2),wa(ix3),wa(ix4)) 111 na = 1-na go to 115 112 if (na .ne. 0) go to 113 call passf (nac,idot,ip,l1,idl1,c,c,c,ch,ch,wa(iw)) go to 114 113 call passf (nac,idot,ip,l1,idl1,ch,ch,ch,c,c,wa(iw)) 114 if (nac .ne. 0) na = 1-na 115 l1 = l2 iw = iw+(ip-1)*idot 116 continue if (na .eq. 0) return n2 = n+n do 117 i=1,n2 c(i) = ch(i) 117 continue return end subroutine cfftb1 (n,c,ch,wa,ifac) dimension ch(*) ,c(*) ,wa(*) ,ifac(*) nf = ifac(2) na = 0 l1 = 1 iw = 1 do 116 k1=1,nf ip = ifac(k1+2) l2 = ip*l1 ido = n/l2 idot = ido+ido idl1 = idot*l1 if (ip .ne. 4) go to 103 ix2 = iw+idot ix3 = ix2+idot if (na .ne. 0) go to 101 call passb4 (idot,l1,c,ch,wa(iw),wa(ix2),wa(ix3)) go to 102 101 call passb4 (idot,l1,ch,c,wa(iw),wa(ix2),wa(ix3)) 102 na = 1-na go to 115 103 if (ip .ne. 2) go to 106 if (na .ne. 0) go to 104 call passb2 (idot,l1,c,ch,wa(iw)) go to 105 104 call passb2 (idot,l1,ch,c,wa(iw)) 105 na = 1-na go to 115 106 if (ip .ne. 3) go to 109 ix2 = iw+idot if (na .ne. 0) go to 107 call passb3 (idot,l1,c,ch,wa(iw),wa(ix2)) go to 108 107 call passb3 (idot,l1,ch,c,wa(iw),wa(ix2)) 108 na = 1-na go to 115 109 if (ip .ne. 5) go to 112 ix2 = iw+idot ix3 = ix2+idot ix4 = ix3+idot if (na .ne. 0) go to 110 call passb5 (idot,l1,c,ch,wa(iw),wa(ix2),wa(ix3),wa(ix4)) go to 111 110 call passb5 (idot,l1,ch,c,wa(iw),wa(ix2),wa(ix3),wa(ix4)) 111 na = 1-na go to 115 112 if (na .ne. 0) go to 113 call passb (nac,idot,ip,l1,idl1,c,c,c,ch,ch,wa(iw)) go to 114 113 call passb (nac,idot,ip,l1,idl1,ch,ch,ch,c,c,wa(iw)) 114 if (nac .ne. 0) na = 1-na 115 l1 = l2 iw = iw+(ip-1)*idot 116 continue if (na .eq. 0) return n2 = n+n do 117 i=1,n2 c(i) = ch(i) 117 continue return end subroutine passf (nac,ido,ip,l1,idl1,cc,c1,c2,ch,ch2,wa) dimension ch(ido,l1,ip) ,cc(ido,ip,l1) , 1 c1(ido,l1,ip) ,wa(*) ,c2(idl1,ip), 2 ch2(idl1,ip) idot = ido/2 nt = ip*idl1 ipp2 = ip+2 ipph = (ip+1)/2 idp = ip*ido c if (ido .lt. l1) go to 106 do 103 j=2,ipph jc = ipp2-j do 102 k=1,l1 do 101 i=1,ido ch(i,k,j) = cc(i,j,k)+cc(i,jc,k) ch(i,k,jc) = cc(i,j,k)-cc(i,jc,k) 101 continue 102 continue 103 continue do 105 k=1,l1 do 104 i=1,ido ch(i,k,1) = cc(i,1,k) 104 continue 105 continue go to 112 106 do 109 j=2,ipph jc = ipp2-j do 108 i=1,ido do 107 k=1,l1 ch(i,k,j) = cc(i,j,k)+cc(i,jc,k) ch(i,k,jc) = cc(i,j,k)-cc(i,jc,k) 107 continue 108 continue 109 continue do 111 i=1,ido do 110 k=1,l1 ch(i,k,1) = cc(i,1,k) 110 continue 111 continue 112 idl = 2-ido inc = 0 do 116 l=2,ipph lc = ipp2-l idl = idl+ido do 113 ik=1,idl1 c2(ik,l) = ch2(ik,1)+wa(idl-1)*ch2(ik,2) c2(ik,lc) = -wa(idl)*ch2(ik,ip) 113 continue idlj = idl inc = inc+ido do 115 j=3,ipph jc = ipp2-j idlj = idlj+inc if (idlj .gt. idp) idlj = idlj-idp war = wa(idlj-1) wai = wa(idlj) do 114 ik=1,idl1 c2(ik,l) = c2(ik,l)+war*ch2(ik,j) c2(ik,lc) = c2(ik,lc)-wai*ch2(ik,jc) 114 continue 115 continue 116 continue do 118 j=2,ipph do 117 ik=1,idl1 ch2(ik,1) = ch2(ik,1)+ch2(ik,j) 117 continue 118 continue do 120 j=2,ipph jc = ipp2-j do 119 ik=2,idl1,2 ch2(ik-1,j) = c2(ik-1,j)-c2(ik,jc) ch2(ik-1,jc) = c2(ik-1,j)+c2(ik,jc) ch2(ik,j) = c2(ik,j)+c2(ik-1,jc) ch2(ik,jc) = c2(ik,j)-c2(ik-1,jc) 119 continue 120 continue nac = 1 if (ido .eq. 2) return nac = 0 do 121 ik=1,idl1 c2(ik,1) = ch2(ik,1) 121 continue do 123 j=2,ip do 122 k=1,l1 c1(1,k,j) = ch(1,k,j) c1(2,k,j) = ch(2,k,j) 122 continue 123 continue if (idot .gt. l1) go to 127 idij = 0 do 126 j=2,ip idij = idij+2 do 125 i=4,ido,2 idij = idij+2 do 124 k=1,l1 c1(i-1,k,j) = wa(idij-1)*ch(i-1,k,j)+wa(idij)*ch(i,k,j) c1(i,k,j) = wa(idij-1)*ch(i,k,j)-wa(idij)*ch(i-1,k,j) 124 continue 125 continue 126 continue return 127 idj = 2-ido do 130 j=2,ip idj = idj+ido do 129 k=1,l1 idij = idj do 128 i=4,ido,2 idij = idij+2 c1(i-1,k,j) = wa(idij-1)*ch(i-1,k,j)+wa(idij)*ch(i,k,j) c1(i,k,j) = wa(idij-1)*ch(i,k,j)-wa(idij)*ch(i-1,k,j) 128 continue 129 continue 130 continue return end subroutine passf2 (ido,l1,cc,ch,wa1) dimension cc(ido,2,l1) ,ch(ido,l1,2) , 1 wa1(*) if (ido .gt. 2) go to 102 do 101 k=1,l1 ch(1,k,1) = cc(1,1,k)+cc(1,2,k) ch(1,k,2) = cc(1,1,k)-cc(1,2,k) ch(2,k,1) = cc(2,1,k)+cc(2,2,k) ch(2,k,2) = cc(2,1,k)-cc(2,2,k) 101 continue return 102 do 104 k=1,l1 do 103 i=2,ido,2 ch(i-1,k,1) = cc(i-1,1,k)+cc(i-1,2,k) tr2 = cc(i-1,1,k)-cc(i-1,2,k) ch(i,k,1) = cc(i,1,k)+cc(i,2,k) ti2 = cc(i,1,k)-cc(i,2,k) ch(i,k,2) = wa1(i-1)*ti2-wa1(i)*tr2 ch(i-1,k,2) = wa1(i-1)*tr2+wa1(i)*ti2 103 continue 104 continue return end subroutine passf3 (ido,l1,cc,ch,wa1,wa2) dimension cc(ido,3,l1) ,ch(ido,l1,3) , 1 wa1(*) ,wa2(*) data taur,taui /-.5,-.866025403784439/ if (ido .ne. 2) go to 102 do 101 k=1,l1 tr2 = cc(1,2,k)+cc(1,3,k) cr2 = cc(1,1,k)+taur*tr2 ch(1,k,1) = cc(1,1,k)+tr2 ti2 = cc(2,2,k)+cc(2,3,k) ci2 = cc(2,1,k)+taur*ti2 ch(2,k,1) = cc(2,1,k)+ti2 cr3 = taui*(cc(1,2,k)-cc(1,3,k)) ci3 = taui*(cc(2,2,k)-cc(2,3,k)) ch(1,k,2) = cr2-ci3 ch(1,k,3) = cr2+ci3 ch(2,k,2) = ci2+cr3 ch(2,k,3) = ci2-cr3 101 continue return 102 do 104 k=1,l1 do 103 i=2,ido,2 tr2 = cc(i-1,2,k)+cc(i-1,3,k) cr2 = cc(i-1,1,k)+taur*tr2 ch(i-1,k,1) = cc(i-1,1,k)+tr2 ti2 = cc(i,2,k)+cc(i,3,k) ci2 = cc(i,1,k)+taur*ti2 ch(i,k,1) = cc(i,1,k)+ti2 cr3 = taui*(cc(i-1,2,k)-cc(i-1,3,k)) ci3 = taui*(cc(i,2,k)-cc(i,3,k)) dr2 = cr2-ci3 dr3 = cr2+ci3 di2 = ci2+cr3 di3 = ci2-cr3 ch(i,k,2) = wa1(i-1)*di2-wa1(i)*dr2 ch(i-1,k,2) = wa1(i-1)*dr2+wa1(i)*di2 ch(i,k,3) = wa2(i-1)*di3-wa2(i)*dr3 ch(i-1,k,3) = wa2(i-1)*dr3+wa2(i)*di3 103 continue 104 continue return end subroutine passf4 (ido,l1,cc,ch,wa1,wa2,wa3) dimension cc(ido,4,l1) ,ch(ido,l1,4) , 1 wa1(*) ,wa2(*) ,wa3(*) if (ido .ne. 2) go to 102 do 101 k=1,l1 ti1 = cc(2,1,k)-cc(2,3,k) ti2 = cc(2,1,k)+cc(2,3,k) tr4 = cc(2,2,k)-cc(2,4,k) ti3 = cc(2,2,k)+cc(2,4,k) tr1 = cc(1,1,k)-cc(1,3,k) tr2 = cc(1,1,k)+cc(1,3,k) ti4 = cc(1,4,k)-cc(1,2,k) tr3 = cc(1,2,k)+cc(1,4,k) ch(1,k,1) = tr2+tr3 ch(1,k,3) = tr2-tr3 ch(2,k,1) = ti2+ti3 ch(2,k,3) = ti2-ti3 ch(1,k,2) = tr1+tr4 ch(1,k,4) = tr1-tr4 ch(2,k,2) = ti1+ti4 ch(2,k,4) = ti1-ti4 101 continue return 102 do 104 k=1,l1 do 103 i=2,ido,2 ti1 = cc(i,1,k)-cc(i,3,k) ti2 = cc(i,1,k)+cc(i,3,k) ti3 = cc(i,2,k)+cc(i,4,k) tr4 = cc(i,2,k)-cc(i,4,k) tr1 = cc(i-1,1,k)-cc(i-1,3,k) tr2 = cc(i-1,1,k)+cc(i-1,3,k) ti4 = cc(i-1,4,k)-cc(i-1,2,k) tr3 = cc(i-1,2,k)+cc(i-1,4,k) ch(i-1,k,1) = tr2+tr3 cr3 = tr2-tr3 ch(i,k,1) = ti2+ti3 ci3 = ti2-ti3 cr2 = tr1+tr4 cr4 = tr1-tr4 ci2 = ti1+ti4 ci4 = ti1-ti4 ch(i-1,k,2) = wa1(i-1)*cr2+wa1(i)*ci2 ch(i,k,2) = wa1(i-1)*ci2-wa1(i)*cr2 ch(i-1,k,3) = wa2(i-1)*cr3+wa2(i)*ci3 ch(i,k,3) = wa2(i-1)*ci3-wa2(i)*cr3 ch(i-1,k,4) = wa3(i-1)*cr4+wa3(i)*ci4 ch(i,k,4) = wa3(i-1)*ci4-wa3(i)*cr4 103 continue 104 continue return end subroutine passf5 (ido,l1,cc,ch,wa1,wa2,wa3,wa4) dimension cc(ido,5,l1) ,ch(ido,l1,5) , 1 wa1(*) ,wa2(*) ,wa3(*) ,wa4(*) data tr11,ti11,tr12,ti12 /.309016994374947,-.951056516295154, 1-.809016994374947,-.587785252292473/ if (ido .ne. 2) go to 102 do 101 k=1,l1 ti5 = cc(2,2,k)-cc(2,5,k) ti2 = cc(2,2,k)+cc(2,5,k) ti4 = cc(2,3,k)-cc(2,4,k) ti3 = cc(2,3,k)+cc(2,4,k) tr5 = cc(1,2,k)-cc(1,5,k) tr2 = cc(1,2,k)+cc(1,5,k) tr4 = cc(1,3,k)-cc(1,4,k) tr3 = cc(1,3,k)+cc(1,4,k) ch(1,k,1) = cc(1,1,k)+tr2+tr3 ch(2,k,1) = cc(2,1,k)+ti2+ti3 cr2 = cc(1,1,k)+tr11*tr2+tr12*tr3 ci2 = cc(2,1,k)+tr11*ti2+tr12*ti3 cr3 = cc(1,1,k)+tr12*tr2+tr11*tr3 ci3 = cc(2,1,k)+tr12*ti2+tr11*ti3 cr5 = ti11*tr5+ti12*tr4 ci5 = ti11*ti5+ti12*ti4 cr4 = ti12*tr5-ti11*tr4 ci4 = ti12*ti5-ti11*ti4 ch(1,k,2) = cr2-ci5 ch(1,k,5) = cr2+ci5 ch(2,k,2) = ci2+cr5 ch(2,k,3) = ci3+cr4 ch(1,k,3) = cr3-ci4 ch(1,k,4) = cr3+ci4 ch(2,k,4) = ci3-cr4 ch(2,k,5) = ci2-cr5 101 continue return 102 do 104 k=1,l1 do 103 i=2,ido,2 ti5 = cc(i,2,k)-cc(i,5,k) ti2 = cc(i,2,k)+cc(i,5,k) ti4 = cc(i,3,k)-cc(i,4,k) ti3 = cc(i,3,k)+cc(i,4,k) tr5 = cc(i-1,2,k)-cc(i-1,5,k) tr2 = cc(i-1,2,k)+cc(i-1,5,k) tr4 = cc(i-1,3,k)-cc(i-1,4,k) tr3 = cc(i-1,3,k)+cc(i-1,4,k) ch(i-1,k,1) = cc(i-1,1,k)+tr2+tr3 ch(i,k,1) = cc(i,1,k)+ti2+ti3 cr2 = cc(i-1,1,k)+tr11*tr2+tr12*tr3 ci2 = cc(i,1,k)+tr11*ti2+tr12*ti3 cr3 = cc(i-1,1,k)+tr12*tr2+tr11*tr3 ci3 = cc(i,1,k)+tr12*ti2+tr11*ti3 cr5 = ti11*tr5+ti12*tr4 ci5 = ti11*ti5+ti12*ti4 cr4 = ti12*tr5-ti11*tr4 ci4 = ti12*ti5-ti11*ti4 dr3 = cr3-ci4 dr4 = cr3+ci4 di3 = ci3+cr4 di4 = ci3-cr4 dr5 = cr2+ci5 dr2 = cr2-ci5 di5 = ci2-cr5 di2 = ci2+cr5 ch(i-1,k,2) = wa1(i-1)*dr2+wa1(i)*di2 ch(i,k,2) = wa1(i-1)*di2-wa1(i)*dr2 ch(i-1,k,3) = wa2(i-1)*dr3+wa2(i)*di3 ch(i,k,3) = wa2(i-1)*di3-wa2(i)*dr3 ch(i-1,k,4) = wa3(i-1)*dr4+wa3(i)*di4 ch(i,k,4) = wa3(i-1)*di4-wa3(i)*dr4 ch(i-1,k,5) = wa4(i-1)*dr5+wa4(i)*di5 ch(i,k,5) = wa4(i-1)*di5-wa4(i)*dr5 103 continue 104 continue return end subroutine passb (nac,ido,ip,l1,idl1,cc,c1,c2,ch,ch2,wa) dimension ch(ido,l1,ip) ,cc(ido,ip,l1) , 1 c1(ido,l1,ip) ,wa(*) ,c2(idl1,ip), 2 ch2(idl1,ip) idot = ido/2 nt = ip*idl1 ipp2 = ip+2 ipph = (ip+1)/2 idp = ip*ido c if (ido .lt. l1) go to 106 do 103 j=2,ipph jc = ipp2-j do 102 k=1,l1 do 101 i=1,ido ch(i,k,j) = cc(i,j,k)+cc(i,jc,k) ch(i,k,jc) = cc(i,j,k)-cc(i,jc,k) 101 continue 102 continue 103 continue do 105 k=1,l1 do 104 i=1,ido ch(i,k,1) = cc(i,1,k) 104 continue 105 continue go to 112 106 do 109 j=2,ipph jc = ipp2-j do 108 i=1,ido do 107 k=1,l1 ch(i,k,j) = cc(i,j,k)+cc(i,jc,k) ch(i,k,jc) = cc(i,j,k)-cc(i,jc,k) 107 continue 108 continue 109 continue do 111 i=1,ido do 110 k=1,l1 ch(i,k,1) = cc(i,1,k) 110 continue 111 continue 112 idl = 2-ido inc = 0 do 116 l=2,ipph lc = ipp2-l idl = idl+ido do 113 ik=1,idl1 c2(ik,l) = ch2(ik,1)+wa(idl-1)*ch2(ik,2) c2(ik,lc) = wa(idl)*ch2(ik,ip) 113 continue idlj = idl inc = inc+ido do 115 j=3,ipph jc = ipp2-j idlj = idlj+inc if (idlj .gt. idp) idlj = idlj-idp war = wa(idlj-1) wai = wa(idlj) do 114 ik=1,idl1 c2(ik,l) = c2(ik,l)+war*ch2(ik,j) c2(ik,lc) = c2(ik,lc)+wai*ch2(ik,jc) 114 continue 115 continue 116 continue do 118 j=2,ipph do 117 ik=1,idl1 ch2(ik,1) = ch2(ik,1)+ch2(ik,j) 117 continue 118 continue do 120 j=2,ipph jc = ipp2-j do 119 ik=2,idl1,2 ch2(ik-1,j) = c2(ik-1,j)-c2(ik,jc) ch2(ik-1,jc) = c2(ik-1,j)+c2(ik,jc) ch2(ik,j) = c2(ik,j)+c2(ik-1,jc) ch2(ik,jc) = c2(ik,j)-c2(ik-1,jc) 119 continue 120 continue nac = 1 if (ido .eq. 2) return nac = 0 do 121 ik=1,idl1 c2(ik,1) = ch2(ik,1) 121 continue do 123 j=2,ip do 122 k=1,l1 c1(1,k,j) = ch(1,k,j) c1(2,k,j) = ch(2,k,j) 122 continue 123 continue if (idot .gt. l1) go to 127 idij = 0 do 126 j=2,ip idij = idij+2 do 125 i=4,ido,2 idij = idij+2 do 124 k=1,l1 c1(i-1,k,j) = wa(idij-1)*ch(i-1,k,j)-wa(idij)*ch(i,k,j) c1(i,k,j) = wa(idij-1)*ch(i,k,j)+wa(idij)*ch(i-1,k,j) 124 continue 125 continue 126 continue return 127 idj = 2-ido do 130 j=2,ip idj = idj+ido do 129 k=1,l1 idij = idj do 128 i=4,ido,2 idij = idij+2 c1(i-1,k,j) = wa(idij-1)*ch(i-1,k,j)-wa(idij)*ch(i,k,j) c1(i,k,j) = wa(idij-1)*ch(i,k,j)+wa(idij)*ch(i-1,k,j) 128 continue 129 continue 130 continue return end subroutine passb2 (ido,l1,cc,ch,wa1) dimension cc(ido,2,l1) ,ch(ido,l1,2) , 1 wa1(*) if (ido .gt. 2) go to 102 do 101 k=1,l1 ch(1,k,1) = cc(1,1,k)+cc(1,2,k) ch(1,k,2) = cc(1,1,k)-cc(1,2,k) ch(2,k,1) = cc(2,1,k)+cc(2,2,k) ch(2,k,2) = cc(2,1,k)-cc(2,2,k) 101 continue return 102 do 104 k=1,l1 do 103 i=2,ido,2 ch(i-1,k,1) = cc(i-1,1,k)+cc(i-1,2,k) tr2 = cc(i-1,1,k)-cc(i-1,2,k) ch(i,k,1) = cc(i,1,k)+cc(i,2,k) ti2 = cc(i,1,k)-cc(i,2,k) ch(i,k,2) = wa1(i-1)*ti2+wa1(i)*tr2 ch(i-1,k,2) = wa1(i-1)*tr2-wa1(i)*ti2 103 continue 104 continue return end subroutine passb3 (ido,l1,cc,ch,wa1,wa2) dimension cc(ido,3,l1) ,ch(ido,l1,3) , 1 wa1(*) ,wa2(*) data taur,taui /-.5,.866025403784439/ if (ido .ne. 2) go to 102 do 101 k=1,l1 tr2 = cc(1,2,k)+cc(1,3,k) cr2 = cc(1,1,k)+taur*tr2 ch(1,k,1) = cc(1,1,k)+tr2 ti2 = cc(2,2,k)+cc(2,3,k) ci2 = cc(2,1,k)+taur*ti2 ch(2,k,1) = cc(2,1,k)+ti2 cr3 = taui*(cc(1,2,k)-cc(1,3,k)) ci3 = taui*(cc(2,2,k)-cc(2,3,k)) ch(1,k,2) = cr2-ci3 ch(1,k,3) = cr2+ci3 ch(2,k,2) = ci2+cr3 ch(2,k,3) = ci2-cr3 101 continue return 102 do 104 k=1,l1 do 103 i=2,ido,2 tr2 = cc(i-1,2,k)+cc(i-1,3,k) cr2 = cc(i-1,1,k)+taur*tr2 ch(i-1,k,1) = cc(i-1,1,k)+tr2 ti2 = cc(i,2,k)+cc(i,3,k) ci2 = cc(i,1,k)+taur*ti2 ch(i,k,1) = cc(i,1,k)+ti2 cr3 = taui*(cc(i-1,2,k)-cc(i-1,3,k)) ci3 = taui*(cc(i,2,k)-cc(i,3,k)) dr2 = cr2-ci3 dr3 = cr2+ci3 di2 = ci2+cr3 di3 = ci2-cr3 ch(i,k,2) = wa1(i-1)*di2+wa1(i)*dr2 ch(i-1,k,2) = wa1(i-1)*dr2-wa1(i)*di2 ch(i,k,3) = wa2(i-1)*di3+wa2(i)*dr3 ch(i-1,k,3) = wa2(i-1)*dr3-wa2(i)*di3 103 continue 104 continue return end subroutine passb4 (ido,l1,cc,ch,wa1,wa2,wa3) dimension cc(ido,4,l1) ,ch(ido,l1,4) , 1 wa1(*) ,wa2(*) ,wa3(*) if (ido .ne. 2) go to 102 do 101 k=1,l1 ti1 = cc(2,1,k)-cc(2,3,k) ti2 = cc(2,1,k)+cc(2,3,k) tr4 = cc(2,4,k)-cc(2,2,k) ti3 = cc(2,2,k)+cc(2,4,k) tr1 = cc(1,1,k)-cc(1,3,k) tr2 = cc(1,1,k)+cc(1,3,k) ti4 = cc(1,2,k)-cc(1,4,k) tr3 = cc(1,2,k)+cc(1,4,k) ch(1,k,1) = tr2+tr3 ch(1,k,3) = tr2-tr3 ch(2,k,1) = ti2+ti3 ch(2,k,3) = ti2-ti3 ch(1,k,2) = tr1+tr4 ch(1,k,4) = tr1-tr4 ch(2,k,2) = ti1+ti4 ch(2,k,4) = ti1-ti4 101 continue return 102 do 104 k=1,l1 do 103 i=2,ido,2 ti1 = cc(i,1,k)-cc(i,3,k) ti2 = cc(i,1,k)+cc(i,3,k) ti3 = cc(i,2,k)+cc(i,4,k) tr4 = cc(i,4,k)-cc(i,2,k) tr1 = cc(i-1,1,k)-cc(i-1,3,k) tr2 = cc(i-1,1,k)+cc(i-1,3,k) ti4 = cc(i-1,2,k)-cc(i-1,4,k) tr3 = cc(i-1,2,k)+cc(i-1,4,k) ch(i-1,k,1) = tr2+tr3 cr3 = tr2-tr3 ch(i,k,1) = ti2+ti3 ci3 = ti2-ti3 cr2 = tr1+tr4 cr4 = tr1-tr4 ci2 = ti1+ti4 ci4 = ti1-ti4 ch(i-1,k,2) = wa1(i-1)*cr2-wa1(i)*ci2 ch(i,k,2) = wa1(i-1)*ci2+wa1(i)*cr2 ch(i-1,k,3) = wa2(i-1)*cr3-wa2(i)*ci3 ch(i,k,3) = wa2(i-1)*ci3+wa2(i)*cr3 ch(i-1,k,4) = wa3(i-1)*cr4-wa3(i)*ci4 ch(i,k,4) = wa3(i-1)*ci4+wa3(i)*cr4 103 continue 104 continue return end subroutine passb5 (ido,l1,cc,ch,wa1,wa2,wa3,wa4) dimension cc(ido,5,l1) ,ch(ido,l1,5) , 1 wa1(*) ,wa2(*) ,wa3(*) ,wa4(*) data tr11,ti11,tr12,ti12 /.309016994374947,.951056516295154, 1-.809016994374947,.587785252292473/ if (ido .ne. 2) go to 102 do 101 k=1,l1 ti5 = cc(2,2,k)-cc(2,5,k) ti2 = cc(2,2,k)+cc(2,5,k) ti4 = cc(2,3,k)-cc(2,4,k) ti3 = cc(2,3,k)+cc(2,4,k) tr5 = cc(1,2,k)-cc(1,5,k) tr2 = cc(1,2,k)+cc(1,5,k) tr4 = cc(1,3,k)-cc(1,4,k) tr3 = cc(1,3,k)+cc(1,4,k) ch(1,k,1) = cc(1,1,k)+tr2+tr3 ch(2,k,1) = cc(2,1,k)+ti2+ti3 cr2 = cc(1,1,k)+tr11*tr2+tr12*tr3 ci2 = cc(2,1,k)+tr11*ti2+tr12*ti3 cr3 = cc(1,1,k)+tr12*tr2+tr11*tr3 ci3 = cc(2,1,k)+tr12*ti2+tr11*ti3 cr5 = ti11*tr5+ti12*tr4 ci5 = ti11*ti5+ti12*ti4 cr4 = ti12*tr5-ti11*tr4 ci4 = ti12*ti5-ti11*ti4 ch(1,k,2) = cr2-ci5 ch(1,k,5) = cr2+ci5 ch(2,k,2) = ci2+cr5 ch(2,k,3) = ci3+cr4 ch(1,k,3) = cr3-ci4 ch(1,k,4) = cr3+ci4 ch(2,k,4) = ci3-cr4 ch(2,k,5) = ci2-cr5 101 continue return 102 do 104 k=1,l1 do 103 i=2,ido,2 ti5 = cc(i,2,k)-cc(i,5,k) ti2 = cc(i,2,k)+cc(i,5,k) ti4 = cc(i,3,k)-cc(i,4,k) ti3 = cc(i,3,k)+cc(i,4,k) tr5 = cc(i-1,2,k)-cc(i-1,5,k) tr2 = cc(i-1,2,k)+cc(i-1,5,k) tr4 = cc(i-1,3,k)-cc(i-1,4,k) tr3 = cc(i-1,3,k)+cc(i-1,4,k) ch(i-1,k,1) = cc(i-1,1,k)+tr2+tr3 ch(i,k,1) = cc(i,1,k)+ti2+ti3 cr2 = cc(i-1,1,k)+tr11*tr2+tr12*tr3 ci2 = cc(i,1,k)+tr11*ti2+tr12*ti3 cr3 = cc(i-1,1,k)+tr12*tr2+tr11*tr3 ci3 = cc(i,1,k)+tr12*ti2+tr11*ti3 cr5 = ti11*tr5+ti12*tr4 ci5 = ti11*ti5+ti12*ti4 cr4 = ti12*tr5-ti11*tr4 ci4 = ti12*ti5-ti11*ti4 dr3 = cr3-ci4 dr4 = cr3+ci4 di3 = ci3+cr4 di4 = ci3-cr4 dr5 = cr2+ci5 dr2 = cr2-ci5 di5 = ci2-cr5 di2 = ci2+cr5 ch(i-1,k,2) = wa1(i-1)*dr2-wa1(i)*di2 ch(i,k,2) = wa1(i-1)*di2+wa1(i)*dr2 ch(i-1,k,3) = wa2(i-1)*dr3-wa2(i)*di3 ch(i,k,3) = wa2(i-1)*di3+wa2(i)*dr3 ch(i-1,k,4) = wa3(i-1)*dr4-wa3(i)*di4 ch(i,k,4) = wa3(i-1)*di4+wa3(i)*dr4 ch(i-1,k,5) = wa4(i-1)*dr5-wa4(i)*di5 ch(i,k,5) = wa4(i-1)*di5+wa4(i)*dr5 103 continue 104 continue return end