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

📄 gpfa2f.f

📁 已经编译好的levoo程序
💻 F
📖 第 1 页 / 共 2 页
字号:
*     fortran version of *gpfa2* -*     radix-2 section of self-sorting, in-place, generalized pfa*     central radix-2 and radix-8 passes included*      so that transform length can be any power of 2**-------------------------------------------------------------------*      subroutine gpfa2f(a,b,trigs,inc,jump,n,mm,lot,isign)      implicit real*8 (a-h,o-z)      dimension a(*), b(*), trigs(*)      data lvr/1024/**     ****************************************************************     *                                                             **     *  N.B. LVR = LENGTH OF VECTOR REGISTERS, SET TO 128 FOR C90. **     *  RESET TO 64 FOR OTHER CRAY MACHINES, OR TO ANY LARGE VALUE **     *  (GREATER THAN OR EQUAL TO LOT) FOR A SCALAR COMPUTER.      **     *                                                             **     ****************************************************************      n2 = 2**mm      inq = n/n2      jstepx = (n2-n) * inc      ninc = n * inc      ink = inc * inq*      m2 = 0      m8 = 0      if (mod(mm,2).eq.0) then         m = mm/2      else if (mod(mm,4).eq.1) then         m = (mm-1)/2         m2 = 1      else if (mod(mm,4).eq.3) then         m = (mm-3)/2         m8 = 1      endif      mh = (m+1)/2*      nblox = 1 + (lot-1)/lvr      left = lot      s = float(isign)      istart = 1**  loop on blocks of lvr transforms*  --------------------------------      do 500 nb = 1 , nblox*      if (left.le.lvr) then         nvex = left      else if (left.lt.(2*lvr)) then         nvex = left/2         nvex = nvex + mod(nvex,2)      else         nvex = lvr      endif      left = left - nvex*      la = 1**  loop on type I radix-4 passes*  -----------------------------      mu = mod(inq,4)      if (isign.eq.-1) mu = 4 - mu      ss = 1.0      if (mu.eq.3) ss = -1.0*      if (mh.eq.0) go to 200*      do 160 ipass = 1 , mh      jstep = (n*inc) / (4*la)      jstepl = jstep - ninc**  k = 0 loop (no twiddle factors)*  -------------------------------      do 120 jjj = 0 , (n-1)*inc , 4*jstep      ja = istart + jjj**     "transverse" loop*     -----------------      do 115 nu = 1 , inq      jb = ja + jstepl      if (jb.lt.istart) jb = jb + ninc      jc = jb + jstepl      if (jc.lt.istart) jc = jc + ninc      jd = jc + jstepl      if (jd.lt.istart) jd = jd + ninc      j = 0**  loop across transforms*  ----------------------cdir$ ivdep, shortloop      do 110 l = 1 , nvex      aja = a(ja+j)      ajc = a(jc+j)      t0 = aja + ajc      t2 = aja - ajc      ajb = a(jb+j)      ajd = a(jd+j)      t1 = ajb + ajd      t3 = ss * ( ajb - ajd )      bja = b(ja+j)      bjc = b(jc+j)      u0 = bja + bjc      u2 = bja - bjc      bjb = b(jb+j)      bjd = b(jd+j)      u1 = bjb + bjd      u3 = ss * ( bjb - bjd )      a(ja+j) = t0 + t1      a(jc+j) = t0 - t1      b(ja+j) = u0 + u1      b(jc+j) = u0 - u1      a(jb+j) = t2 - u3      a(jd+j) = t2 + u3      b(jb+j) = u2 + t3      b(jd+j) = u2 - t3      j = j + jump  110 continue      ja = ja + jstepx      if (ja.lt.istart) ja = ja + ninc  115 continue  120 continue**  finished if n2 = 4*  ------------------      if (n2.eq.4) go to 490      kk = 2 * la**  loop on nonzero k*  -----------------      do 150 k = ink , jstep-ink , ink      co1 = trigs(kk+1)      si1 = s*trigs(kk+2)      co2 = trigs(2*kk+1)      si2 = s*trigs(2*kk+2)      co3 = trigs(3*kk+1)      si3 = s*trigs(3*kk+2)**  loop along transform*  --------------------      do 140 jjj = k , (n-1)*inc , 4*jstep      ja = istart + jjj**     "transverse" loop*     -----------------      do 135 nu = 1 , inq      jb = ja + jstepl      if (jb.lt.istart) jb = jb + ninc      jc = jb + jstepl      if (jc.lt.istart) jc = jc + ninc      jd = jc + jstepl      if (jd.lt.istart) jd = jd + ninc      j = 0**  loop across transforms*  ----------------------cdir$ ivdep,shortloop      do 130 l = 1 , nvex      aja = a(ja+j)      ajc = a(jc+j)      t0 = aja + ajc      t2 = aja - ajc      ajb = a(jb+j)      ajd = a(jd+j)      t1 = ajb + ajd      t3 = ss * ( ajb - ajd )      bja = b(ja+j)      bjc = b(jc+j)      u0 = bja + bjc      u2 = bja - bjc      bjb = b(jb+j)      bjd = b(jd+j)      u1 = bjb + bjd      u3 = ss * ( bjb - bjd )      a(ja+j) = t0 + t1      b(ja+j) = u0 + u1      a(jb+j) = co1*(t2-u3) - si1*(u2+t3)      b(jb+j) = si1*(t2-u3) + co1*(u2+t3)      a(jc+j) = co2*(t0-t1) - si2*(u0-u1)      b(jc+j) = si2*(t0-t1) + co2*(u0-u1)      a(jd+j) = co3*(t2+u3) - si3*(u2-t3)      b(jd+j) = si3*(t2+u3) + co3*(u2-t3)      j = j + jump  130 continue*-----( end of loop across transforms )      ja = ja + jstepx      if (ja.lt.istart) ja = ja + ninc  135 continue  140 continue*-----( end of loop along transforms )      kk = kk + 2*la  150 continue*-----( end of loop on nonzero k )      la = 4*la  160 continue*-----( end of loop on type I radix-4 passes)**  central radix-2 pass*  --------------------  200 continue      if (m2.eq.0) go to 300*      jstep = (n*inc) / (2*la)      jstepl = jstep - ninc**  k=0 loop (no twiddle factors)*  -----------------------------      do 220 jjj = 0 , (n-1)*inc , 2*jstep      ja = istart + jjj**     "transverse" loop*     -----------------      do 215 nu = 1 , inq      jb = ja + jstepl      if (jb.lt.istart) jb = jb + ninc      j = 0**  loop across transforms*  ----------------------cdir$ ivdep, shortloop      do 210 l = 1 , nvex      aja = a(ja+j)      ajb = a(jb+j)      t0 = aja - ajb      a(ja+j) = aja + ajb      a(jb+j) = t0      bja = b(ja+j)      bjb = b(jb+j)      u0 = bja - bjb      b(ja+j) = bja + bjb      b(jb+j) = u0      j = j + jump  210 continue*-----(end of loop across transforms)      ja = ja + jstepx      if (ja.lt.istart) ja = ja + ninc  215 continue  220 continue**  finished if n2=2*  ----------------      if (n2.eq.2) go to 490*      kk = 2 * la**  loop on nonzero k*  -----------------      do 260 k = ink , jstep - ink , ink      co1 = trigs(kk+1)      si1 = s*trigs(kk+2)**  loop along transforms*  ---------------------      do 250 jjj = k , (n-1)*inc , 2*jstep      ja = istart + jjj**     "transverse" loop*     -----------------      do 245 nu = 1 , inq      jb = ja + jstepl      if (jb.lt.istart) jb = jb + ninc      j = 0**  loop across transforms*  ----------------------      if (kk.eq.n2/2) thencdir$ ivdep, shortloop      do 230 l = 1 , nvex      aja = a(ja+j)      ajb = a(jb+j)      t0 = ss * ( aja - ajb )      a(ja+j) = aja + ajb      bjb = b(jb+j)      bja = b(ja+j)      a(jb+j) = ss * ( bjb - bja )      b(ja+j) = bja + bjb      b(jb+j) = t0      j = j + jump  230 continue*      else*cdir$ ivdep, shortloop      do 240 l = 1 , nvex      aja = a(ja+j)      ajb = a(jb+j)      t0 = aja - ajb      a(ja+j) = aja + ajb      bja = b(ja+j)      bjb = b(jb+j)      u0 = bja - bjb      b(ja+j) = bja + bjb      a(jb+j) = co1*t0 - si1*u0      b(jb+j) = si1*t0 + co1*u0      j = j + jump  240 continue*      endif**-----(end of loop across transforms)      ja = ja + jstepx      if (ja.lt.istart) ja = ja + ninc  245 continue  250 continue*-----(end of loop along transforms)      kk = kk + 2 * la  260 continue*-----(end of loop on nonzero k)*-----(end of radix-2 pass)*      la = 2 * la      go to 400**  central radix-8 pass*  --------------------  300 continue      if (m8.eq.0) go to 400      jstep = (n*inc) / (8*la)      jstepl = jstep - ninc      mu = mod(inq,8)      if (isign.eq.-1) mu = 8 - mu      c1 = 1.0      if (mu.eq.3.or.mu.eq.7) c1 = -1.0      c2 = sqrt(0.5)      if (mu.eq.3.or.mu.eq.5) c2 = -c2      c3 = c1 * c2**  stage 1*  -------      do 320 k = 0 , jstep - ink , ink      do 315 jjj = k , (n-1)*inc , 8*jstep      ja = istart + jjj**     "transverse" loop*     -----------------      do 312 nu = 1 , inq      jb = ja + jstepl      if (jb.lt.istart) jb = jb + ninc      jc = jb + jstepl      if (jc.lt.istart) jc = jc + ninc      jd = jc + jstepl      if (jd.lt.istart) jd = jd + ninc      je = jd + jstepl      if (je.lt.istart) je = je + ninc      jf = je + jstepl      if (jf.lt.istart) jf = jf + ninc      jg = jf + jstepl      if (jg.lt.istart) jg = jg + ninc      jh = jg + jstepl      if (jh.lt.istart) jh = jh + ninc      j = 0cdir$ ivdep, shortloop      do 310 l = 1 , nvex      aja = a(ja+j)      aje = a(je+j)      t0 = aja - aje      a(ja+j) = aja + aje      ajc = a(jc+j)      ajg = a(jg+j)      t1 = c1 * ( ajc - ajg )      a(je+j) = ajc + ajg      ajb = a(jb+j)      ajf = a(jf+j)      t2 = ajb - ajf      a(jc+j) = ajb + ajf      ajd = a(jd+j)      ajh = a(jh+j)      t3 = ajd - ajh      a(jg+j) = ajd + ajh      a(jb+j) = t0      a(jf+j) = t1      a(jd+j) = c2 * ( t2 - t3 )      a(jh+j) = c3 * ( t2 + t3 )      bja = b(ja+j)      bje = b(je+j)      u0 = bja - bje      b(ja+j) = bja + bje      bjc = b(jc+j)      bjg = b(jg+j)      u1 = c1 * ( bjc - bjg )      b(je+j) = bjc + bjg      bjb = b(jb+j)      bjf = b(jf+j)      u2 = bjb - bjf      b(jc+j) = bjb + bjf      bjd = b(jd+j)      bjh = b(jh+j)      u3 = bjd - bjh      b(jg+j) = bjd + bjh      b(jb+j) = u0      b(jf+j) = u1      b(jd+j) = c2 * ( u2 - u3 )      b(jh+j) = c3 * ( u2 + u3 )      j = j + jump  310 continue      ja = ja + jstepx      if (ja.lt.istart) ja = ja + ninc  312 continue  315 continue  320 continue**  stage 2*  -------**  k=0 (no twiddle factors)*  ------------------------      do 330 jjj = 0 , (n-1)*inc , 8*jstep      ja = istart + jjj**     "transverse" loop*     -----------------      do 328 nu = 1 , inq      jb = ja + jstepl      if (jb.lt.istart) jb = jb + ninc      jc = jb + jstepl      if (jc.lt.istart) jc = jc + ninc      jd = jc + jstepl      if (jd.lt.istart) jd = jd + ninc      je = jd + jstepl      if (je.lt.istart) je = je + ninc      jf = je + jstepl      if (jf.lt.istart) jf = jf + ninc      jg = jf + jstepl      if (jg.lt.istart) jg = jg + ninc      jh = jg + jstepl      if (jh.lt.istart) jh = jh + ninc      j = 0cdir$ ivdep, shortloop      do 325 l = 1 , nvex      aja = a(ja+j)      aje = a(je+j)      t0 = aja + aje      t2 = aja - aje      ajc = a(jc+j)      ajg = a(jg+j)      t1 = ajc + ajg      t3 = c1 * ( ajc - ajg )      bja = b(ja+j)      bje = b(je+j)      u0 = bja + bje      u2 = bja - bje      bjc = b(jc+j)      bjg = b(jg+j)      u1 = bjc + bjg      u3 = c1 * ( bjc - bjg )      a(ja+j) = t0 + t1      a(je+j) = t0 - t1      b(ja+j) = u0 + u1      b(je+j) = u0 - u1      a(jc+j) = t2 - u3      a(jg+j) = t2 + u3      b(jc+j) = u2 + t3      b(jg+j) = u2 - t3      ajb = a(jb+j)      ajd = a(jd+j)      t0 = ajb + ajd      t2 = ajb - ajd      ajf = a(jf+j)      ajh = a(jh+j)      t1 = ajf - ajh      t3 = ajf + ajh      bjb = b(jb+j)      bjd = b(jd+j)      u0 = bjb + bjd      u2 = bjb - bjd      bjf = b(jf+j)      bjh = b(jh+j)      u1 = bjf - bjh      u3 = bjf + bjh      a(jb+j) = t0 - u3      a(jh+j) = t0 + u3      b(jb+j) = u0 + t3      b(jh+j) = u0 - t3      a(jd+j) = t2 + u1      a(jf+j) = t2 - u1      b(jd+j) = u2 - t1      b(jf+j) = u2 + t1      j = j + jump  325 continue      ja = ja + jstepx      if (ja.lt.istart) ja = ja + ninc  328 continue

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -