subroutine zspace(ac11,as11,ac21,as21) c c Transform a variable from kz space into z space. c implicit none include 'itg.par' include 'itg.cmn' real ac11(lz,mz,nz,nspecz),as11(lz,mz,nz,nspecz), * ac21(lz,mz,nzz),as21(lz,mz,nzz), * ar(lz*mz*nzz),ai(lz*nzz*mz) integer l,m,n,ifail,nmodes,index,imode character init*10 data init /'Initial'/ real trig(2*nzz) ! NAG workspace real work(2*lz*mz*nzz) ! Nag workspace save init,trig c c For single-helicity run, skip this subroutine c if(nd.eq.1) then do 500 m=1,md do 500 l=1,ldb ac21(l,m,1)=ac11(l,m,1,1) as21(l,m,1)=as11(l,m,1,1) 500 continue goto 1000 endif c c Initialize a couple of variables c nmodes=ldb*md c c First, fill out the array for the FFT: c do 1 m=1,md do 1 n=1,nddp do 1 l=1,ldb ac21(l,m,n) = ac11(l,m,n,1) as21(l,m,n) = as11(l,m,n,1) 1 continue c do 2 m=1,md do 2 n=1,nadd do 2 l=1,ldb ac21(l,m,n+nddp)=0. as21(l,m,n+nddp)=0. 2 continue c do 3 n=1,nddm do 3 m=1,md do 3 l=1,ldb ac21(l,m,n+nadd+nddp) = ac11(l,m,n+nddp,1) as21(l,m,n+nadd+nddp) = as11(l,m,n+nddp,1) 3 continue c c Reorder the terms for NAG: c imode=0 do 300 m=1,md do 300 l=1,ldb imode=imode+1 do 300 n=1,nalias index=imode+(n-1)*nmodes ar(index)=ac21(l,m,n) ai(index)=-as21(l,m,n) !c.c. for inverse FFT 300 continue c c Do the FFT c ifail=0 call c06frE(nmodes,nalias,ar,ai,init,trig,work,ifail) init='Subsequent' c c Reorder the terms for my use: c imode=0 do 301 m=1,md do 301 l=1,ldb imode=imode+1 do 301 n=1,nalias index=imode+(n-1)*nmodes ac21(l,m,n)=ar(index)*rootn as21(l,m,n)=-ai(index)*rootn !c.c. for inverse FFT 301 continue c 1000 continue c return end