⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fftstp.f90

📁 基于linux操作下的fortran快速付立变换的程序
💻 F90
📖 第 1 页 / 共 4 页
字号:
         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 + -