📄 fftstp.f90
字号:
subroutine fftstp(mm,n1dfft,m,nn,n,zin,zout,trig,after,now,before,isign)! RESTRICTIONS on USAGE! Copyright (C) 2002-2005 Stefan Goedecker, CEA Grenoble! This file is distributed under the terms of the! GNU General Public License, see http://www.gnu.org/copyleft/gpl.txt .! NEW FFTSTP implicit real*8 (a-h,o-z) integer after,before,atn,atb dimension trig(2,2048),zin(2,mm,m),zout(2,nn,n) atn=after*now atb=after*before! sqrt(.5d0) rt2i=0.7071067811865475d0 if (now.eq.2) then ia=1 nin1=ia-after nout1=ia-atn do 2001,ib=1,before nin1=nin1+after nin2=nin1+atb nout1=nout1+atn nout2=nout1+after do 2001,j=1,n1dfft r1=zin(1,j,nin1) s1=zin(2,j,nin1) r2=zin(1,j,nin2) s2=zin(2,j,nin2) zout(1,j,nout1)= r2 + r1 zout(2,j,nout1)= s2 + s1 zout(1,j,nout2)= r1 - r2 zout(2,j,nout2)= s1 - s22001 continue do 2000,ia=2,after ias=ia-1 if (2*ias.eq.after) then if (isign.eq.1) then nin1=ia-after nout1=ia-atn do 2010,ib=1,before nin1=nin1+after nin2=nin1+atb nout1=nout1+atn nout2=nout1+after do 2010,j=1,n1dfft r1=zin(1,j,nin1) s1=zin(2,j,nin1) r2=zin(2,j,nin2) s2=zin(1,j,nin2) zout(1,j,nout1)= r1 - r2 zout(2,j,nout1)= s2 + s1 zout(1,j,nout2)= r2 + r1 zout(2,j,nout2)= s1 - s22010 continue else nin1=ia-after nout1=ia-atn do 2020,ib=1,before nin1=nin1+after nin2=nin1+atb nout1=nout1+atn nout2=nout1+after do 2020,j=1,n1dfft r1=zin(1,j,nin1) s1=zin(2,j,nin1) r2=zin(2,j,nin2) s2=zin(1,j,nin2) zout(1,j,nout1)= r2 + r1 zout(2,j,nout1)= s1 - s2 zout(1,j,nout2)= r1 - r2 zout(2,j,nout2)= s2 + s12020 continue endif else if (4*ias.eq.after) then if (isign.eq.1) then nin1=ia-after nout1=ia-atn do 2030,ib=1,before nin1=nin1+after nin2=nin1+atb nout1=nout1+atn nout2=nout1+after do 2030,j=1,n1dfft r1=zin(1,j,nin1) s1=zin(2,j,nin1) r=zin(1,j,nin2) s=zin(2,j,nin2) r2=(r - s)*rt2i s2=(r + s)*rt2i zout(1,j,nout1)= r2 + r1 zout(2,j,nout1)= s2 + s1 zout(1,j,nout2)= r1 - r2 zout(2,j,nout2)= s1 - s22030 continue else nin1=ia-after nout1=ia-atn do 2040,ib=1,before nin1=nin1+after nin2=nin1+atb nout1=nout1+atn nout2=nout1+after do 2040,j=1,n1dfft r1=zin(1,j,nin1) s1=zin(2,j,nin1) r=zin(1,j,nin2) s=zin(2,j,nin2) r2=(r + s)*rt2i s2=(s - r)*rt2i zout(1,j,nout1)= r2 + r1 zout(2,j,nout1)= s2 + s1 zout(1,j,nout2)= r1 - r2 zout(2,j,nout2)= s1 - s22040 continue endif else if (4*ias.eq.3*after) then if (isign.eq.1) then nin1=ia-after nout1=ia-atn do 2050,ib=1,before nin1=nin1+after nin2=nin1+atb nout1=nout1+atn nout2=nout1+after do 2050,j=1,n1dfft r1=zin(1,j,nin1) s1=zin(2,j,nin1) r=zin(1,j,nin2) s=zin(2,j,nin2) r2=(r + s)*rt2i s2=(r - s)*rt2i zout(1,j,nout1)= r1 - r2 zout(2,j,nout1)= s2 + s1 zout(1,j,nout2)= r2 + r1 zout(2,j,nout2)= s1 - s22050 continue else nin1=ia-after nout1=ia-atn do 2060,ib=1,before nin1=nin1+after nin2=nin1+atb nout1=nout1+atn nout2=nout1+after do 2060,j=1,n1dfft r1=zin(1,j,nin1) s1=zin(2,j,nin1) r=zin(1,j,nin2) s=zin(2,j,nin2) r2=(s - r)*rt2i s2=(r + s)*rt2i zout(1,j,nout1)= r2 + r1 zout(2,j,nout1)= s1 - s2 zout(1,j,nout2)= r1 - r2 zout(2,j,nout2)= s2 + s12060 continue endif else itrig=ias*before+1 cr2=trig(1,itrig) ci2=trig(2,itrig) nin1=ia-after nout1=ia-atn do 2090,ib=1,before nin1=nin1+after nin2=nin1+atb nout1=nout1+atn nout2=nout1+after do 2090,j=1,n1dfft r1=zin(1,j,nin1) s1=zin(2,j,nin1) r=zin(1,j,nin2) s=zin(2,j,nin2) r2=r*cr2 - s*ci2 s2=r*ci2 + s*cr2 zout(1,j,nout1)= r2 + r1 zout(2,j,nout1)= s2 + s1 zout(1,j,nout2)= r1 - r2 zout(2,j,nout2)= s1 - s22090 continue endif2000 continue else if (now.eq.4) then if (isign.eq.1) then ia=1 nin1=ia-after nout1=ia-atn do 4001,ib=1,before nin1=nin1+after nin2=nin1+atb nin3=nin2+atb nin4=nin3+atb nout1=nout1+atn nout2=nout1+after nout3=nout2+after nout4=nout3+after do 4001,j=1,n1dfft r1=zin(1,j,nin1) s1=zin(2,j,nin1) r2=zin(1,j,nin2) s2=zin(2,j,nin2) r3=zin(1,j,nin3) s3=zin(2,j,nin3) r4=zin(1,j,nin4) s4=zin(2,j,nin4) r=r1 + r3 s=r2 + r4 zout(1,j,nout1) = r + s zout(1,j,nout3) = r - s r=r1 - r3 s=s2 - s4 zout(1,j,nout2) = r - s zout(1,j,nout4) = r + s r=s1 + s3 s=s2 + s4 zout(2,j,nout1) = r + s zout(2,j,nout3) = r - s r=s1 - s3 s=r2 - r4 zout(2,j,nout2) = r + s zout(2,j,nout4) = r - s4001 continue do 4000,ia=2,after ias=ia-1 if (2*ias.eq.after) then nin1=ia-after nout1=ia-atn do 4010,ib=1,before nin1=nin1+after nin2=nin1+atb nin3=nin2+atb nin4=nin3+atb nout1=nout1+atn nout2=nout1+after nout3=nout2+after nout4=nout3+after do 4010,j=1,n1dfft r1=zin(1,j,nin1) s1=zin(2,j,nin1) r=zin(1,j,nin2) s=zin(2,j,nin2) r2=(r-s)*rt2i s2=(r+s)*rt2i r3=zin(2,j,nin3) s3=zin(1,j,nin3) r=zin(1,j,nin4) s=zin(2,j,nin4) r4=(r + s)*rt2i s4=(r - s)*rt2i r=r1 - r3 s=r2 - r4 zout(1,j,nout1) = r + s zout(1,j,nout3) = r - s r=r1 + r3 s=s2 - s4 zout(1,j,nout2) = r - s zout(1,j,nout4) = r + s r=s1 + s3 s=s2 + s4 zout(2,j,nout1) = r + s zout(2,j,nout3) = r - s r=s1 - s3 s=r2 + r4 zout(2,j,nout2) = r + s zout(2,j,nout4) = r - s4010 continue else itt=ias*before itrig=itt+1 cr2=trig(1,itrig) ci2=trig(2,itrig) itrig=itrig+itt cr3=trig(1,itrig) ci3=trig(2,itrig) itrig=itrig+itt cr4=trig(1,itrig) ci4=trig(2,itrig) nin1=ia-after nout1=ia-atn do 4020,ib=1,before nin1=nin1+after nin2=nin1+atb nin3=nin2+atb nin4=nin3+atb nout1=nout1+atn nout2=nout1+after nout3=nout2+after nout4=nout3+after do 4020,j=1,n1dfft r1=zin(1,j,nin1) s1=zin(2,j,nin1) r=zin(1,j,nin2) s=zin(2,j,nin2) r2=r*cr2 - s*ci2 s2=r*ci2 + s*cr2 r=zin(1,j,nin3) s=zin(2,j,nin3) r3=r*cr3 - s*ci3 s3=r*ci3 + s*cr3 r=zin(1,j,nin4) s=zin(2,j,nin4) r4=r*cr4 - s*ci4 s4=r*ci4 + s*cr4 r=r1 + r3 s=r2 + r4 zout(1,j,nout1) = r + s zout(1,j,nout3) = r - s r=r1 - r3 s=s2 - s4 zout(1,j,nout2) = r - s zout(1,j,nout4) = r + s r=s1 + s3 s=s2 + s4 zout(2,j,nout1) = r + s zout(2,j,nout3) = r - s r=s1 - s3 s=r2 - r4 zout(2,j,nout2) = r + s zout(2,j,nout4) = r - s4020 continue endif4000 continue else ia=1 nin1=ia-after nout1=ia-atn do 4101,ib=1,before nin1=nin1+after nin2=nin1+atb nin3=nin2+atb nin4=nin3+atb nout1=nout1+atn nout2=nout1+after nout3=nout2+after nout4=nout3+after do 4101,j=1,n1dfft r1=zin(1,j,nin1) s1=zin(2,j,nin1) r2=zin(1,j,nin2) s2=zin(2,j,nin2) r3=zin(1,j,nin3) s3=zin(2,j,nin3) r4=zin(1,j,nin4) s4=zin(2,j,nin4) r=r1 + r3 s=r2 + r4 zout(1,j,nout1) = r + s zout(1,j,nout3) = r - s r=r1 - r3 s=s2 - s4 zout(1,j,nout2) = r + s zout(1,j,nout4) = r - s r=s1 + s3 s=s2 + s4 zout(2,j,nout1) = r + s zout(2,j,nout3) = r - s r=s1 - s3 s=r2 - r4 zout(2,j,nout2) = r - s
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -