subroutine nlpse(ac,as,kac,kas,bc,bs,kbc,kbs,wwac11,wwas11) c c "NonLinear PseudoSpectral" Electron terms BD c Given the fields a, b, ka, and kb this subroutine calculates the c Poisson bracket c {a,b} = da/dx db/dy - da/dy db/dx. c c The fields arrive in (x,ky,kz) space and must be transformed c with the appropriate derivatives into (x,y,z) space. c implicit none include 'itg.par' include 'itg.cmn' integer l,m,n,nindex real ac(lz,mz,nz,nspecz),as(lz,mz,nz,nspecz), * bc(lz,mz,nz,nspecz),bs(lz,mz,nz,nspecz), * kac(lz,mz,nz,nspecz),kas(lz,mz,nz,nspecz), * kbc(lz,mz,nz,nspecz),kbs(lz,mz,nz,nspecz), * kyas(lz,mz,nz,nspecz),kyac(lz,mz,nz,nspecz), * kybc(lz,mz,nz,nspecz),kybs(lz,mz,nz,nspecz) real kac21(lz,mz,nzz),kas21(lz,mz,nzz), * kbc21(lz,mz,nzz),kbs21(lz,mz,nzz), * kyac21(lz,mz,nzz),kyas21(lz,mz,nzz), * kybc21(lz,mz,nzz),kybs21(lz,mz,nzz) real kac22(lz*mzz*nzz),kyac22(lz*mzz*nzz), * kbc22(lz*mzz*nzz),kybc22(lz*mzz*nzz) real wwac22(lz*mzz*nzz), * wwac21(lz,mz,nzz),wwas21(lz,mz,nzz), * wwac11(lz,mz,nz,nspecz),wwas11(lz,mz,nz,nspecz),mr c Calculate the d/dy terms: do 10 n=1,nd do 10 m=1,md mr=float(mrr(m,n)) do 10 l=1,ld kyac(l,m,n,2)=mr/y0*as(l,m,n,2) kyas(l,m,n,2)=-mr/y0*ac(l,m,n,2) kybc(l,m,n,2)=mr/y0*bs(l,m,n,2) kybs(l,m,n,2)=-mr/y0*bc(l,m,n,2) 10 continue c c Transform the vectors i*kx*a, i*kx*b, i*ky*b and i*ky*a into z space: c call zspacee(kac,kas,kac21,kas21) call zspacee(kbc,kbs,kbc21,kbs21) call zspacee(kyac,kyas,kyac21,kyas21) call zspacee(kybc,kybs,kybc21,kybs21) c c Then, transform the same vectors into y-space: c call yspace(kac21,kas21,kac22) call yspace(kbc21,kbs21,kbc22) call yspace(kyac21,kyas21,kyac22) call yspace(kybc21,kybs21,kybc22) c c Perform the multiplications: c nindex=malias*nalias*ld do 1 n=1,nindex wwac22(n)=(kbc22(n)*kyac22(n)-kac22(n)*kybc22(n))*float(malias) 1 continue c Transform wwac to ky call kyspace(wwac22,wwac21,wwas21) c Transform wwac,wwas to kz call kzspacee(wwac21,wwas21,wwac11,wwas11) c c That's all! c return end