LCOV - code coverage report
Current view: top level - src/pw/fft - mltfftsg_tools.F (source / functions) Hit Total Coverage
Test: CP2K Regtests (git:d1f8d1b) Lines: 1649 2901 56.8 %
Date: 2024-11-29 06:42:44 Functions: 11 11 100.0 %

          Line data    Source code
       1             : !--------------------------------------------------------------------------------------------------!
       2             : !   CP2K: A general program to perform molecular dynamics simulations                              !
       3             : !   Copyright 2000-2024 CP2K developers group <https://cp2k.org>                                   !
       4             : !                                                                                                  !
       5             : !   SPDX-License-Identifier: GPL-2.0-or-later                                                      !
       6             : !--------------------------------------------------------------------------------------------------!
       7             : 
       8             : ! **************************************************************************************************
       9             : MODULE mltfftsg_tools
      10             :    USE ISO_C_BINDING,                   ONLY: C_F_POINTER,&
      11             :                                               C_LOC
      12             :    USE fft_kinds,                       ONLY: dp
      13             : 
      14             : !$ USE OMP_LIB, ONLY: omp_get_num_threads, omp_get_thread_num
      15             : 
      16             : #include "../../base/base_uses.f90"
      17             : 
      18             :    PRIVATE
      19             :    INTEGER, PARAMETER :: ctrig_length = 1024
      20             :    INTEGER, PARAMETER :: cache_size = 2048
      21             :    PUBLIC :: mltfftsg
      22             : 
      23             : CONTAINS
      24             : 
      25             : ! **************************************************************************************************
      26             : !> \brief ...
      27             : !> \param transa ...
      28             : !> \param transb ...
      29             : !> \param a ...
      30             : !> \param ldax ...
      31             : !> \param lday ...
      32             : !> \param b ...
      33             : !> \param ldbx ...
      34             : !> \param ldby ...
      35             : !> \param n ...
      36             : !> \param m ...
      37             : !> \param isign ...
      38             : !> \param scale ...
      39             : ! **************************************************************************************************
      40       25890 :    SUBROUTINE mltfftsg(transa, transb, a, ldax, lday, b, ldbx, ldby, n, m, isign, scale)
      41             : 
      42             :       CHARACTER(LEN=1), INTENT(IN)                       :: transa, transb
      43             :       INTEGER, INTENT(IN)                                :: ldax, lday
      44             :       COMPLEX(dp), INTENT(INOUT)                         :: a(ldax, lday)
      45             :       INTEGER, INTENT(IN)                                :: ldbx, ldby
      46             :       COMPLEX(dp), INTENT(INOUT)                         :: b(ldbx, ldby)
      47             :       INTEGER, INTENT(IN)                                :: n, m, isign
      48             :       REAL(dp), INTENT(IN)                               :: scale
      49             : 
      50       25890 :       COMPLEX(dp), ALLOCATABLE, DIMENSION(:, :, :)       :: z
      51             :       INTEGER                                            :: after(20), before(20), chunk, i, ic, id, &
      52             :                                                             iend, inzee, isig, istart, iterations, &
      53             :                                                             itr, length, lot, nfft, now(20), &
      54             :                                                             num_threads
      55             :       LOGICAL                                            :: tscal
      56             :       REAL(dp)                                           :: trig(2, 1024)
      57             : 
      58             : ! Variables
      59             : 
      60       25890 :       LENGTH = 2*(cache_size/4 + 1)
      61             : 
      62       25890 :       ISIG = -ISIGN
      63       25890 :       TSCAL = (ABS(SCALE - 1._dp) > 1.e-12_dp)
      64       25890 :       CALL ctrig(N, TRIG, AFTER, BEFORE, NOW, ISIG, IC)
      65       25890 :       LOT = cache_size/(4*N)
      66       25890 :       LOT = LOT - MOD(LOT + 1, 2)
      67       25890 :       LOT = MAX(1, LOT)
      68             : 
      69             :       ! initializations for serial mode
      70       25890 :       id = 0; num_threads = 1
      71             : 
      72             : !$OMP PARALLEL &
      73             : !$OMP PRIVATE ( id, istart, iend, nfft, i, inzee, itr) DEFAULT(NONE) &
      74             : !$OMP SHARED (NUM_THREADS,z,iterations,chunk,LOT,length,m,transa,isig, &
      75       25890 : !$OMP         before,after,now,trig,A,n,ldax,tscal,scale,ic,transb,ldbx,b)
      76             : 
      77             : !$OMP SINGLE
      78             : !$    num_threads = omp_get_num_threads()
      79             :       ALLOCATE (Z(LENGTH, 2, 0:num_threads - 1))
      80             :       iterations = (M + LOT - 1)/LOT
      81             :       chunk = LOT*((iterations + num_threads - 1)/num_threads)
      82             : !$OMP END SINGLE
      83             : !$OMP BARRIER
      84             : 
      85             : !$    id = omp_get_thread_num()
      86             :       istart = id*chunk + 1
      87             :       iend = MIN((id + 1)*chunk, M)
      88             : 
      89             :       DO ITR = istart, iend, LOT
      90             : 
      91             :          NFFT = MIN(M - ITR + 1, LOT)
      92             :          IF (TRANSA == 'N' .OR. TRANSA == 'n') THEN
      93             :             CALL fftpre_cmplx(NFFT, NFFT, LDAX, LOT, N, A(1, ITR), Z(1, 1, id), &
      94             :                               TRIG, NOW(1), AFTER(1), BEFORE(1), ISIG)
      95             :          ELSE
      96             :             CALL fftstp_cmplx(LDAX, NFFT, N, LOT, N, A(ITR, 1), Z(1, 1, id), &
      97             :                               TRIG, NOW(1), AFTER(1), BEFORE(1), ISIG)
      98             :          END IF
      99             :          IF (TSCAL) THEN
     100             :             IF (LOT == NFFT) THEN
     101             :                CALL scaled(2*LOT*N, SCALE, Z(1, 1, id))
     102             :             ELSE
     103             :                DO I = 1, N
     104             :                   CALL scaled(2*NFFT, SCALE, Z(LOT*(I - 1) + 1, 1, id))
     105             :                END DO
     106             :             END IF
     107             :          END IF
     108             :          IF (IC .EQ. 1) THEN
     109             :             IF (TRANSB == 'N' .OR. TRANSB == 'n') THEN
     110             :                CALL zgetmo(Z(1, 1, id), LOT, NFFT, N, B(1, ITR), LDBX)
     111             :             ELSE
     112             :                CALL matmov(NFFT, N, Z(1, 1, id), LOT, B(ITR, 1), LDBX)
     113             :             END IF
     114             :          ELSE
     115             :             INZEE = 1
     116             :             DO I = 2, IC - 1
     117             :                CALL fftstp_cmplx(LOT, NFFT, N, LOT, N, Z(1, INZEE, id), &
     118             :                                  Z(1, 3 - INZEE, id), TRIG, NOW(I), AFTER(I), &
     119             :                                  BEFORE(I), ISIG)
     120             :                INZEE = 3 - INZEE
     121             :             END DO
     122             :             IF (TRANSB == 'N' .OR. TRANSB == 'n') THEN
     123             :                CALL fftrot_cmplx(LOT, NFFT, N, NFFT, LDBX, Z(1, INZEE, id), &
     124             :                                  B(1, ITR), TRIG, NOW(IC), AFTER(IC), BEFORE(IC), ISIG)
     125             :             ELSE
     126             :                CALL fftstp_cmplx(LOT, NFFT, N, LDBX, N, Z(1, INZEE, id), &
     127             :                                  B(ITR, 1), TRIG, NOW(IC), AFTER(IC), BEFORE(IC), ISIG)
     128             :             END IF
     129             :          END IF
     130             :       END DO
     131             : 
     132             : !$OMP END PARALLEL
     133             : 
     134       25890 :       DEALLOCATE (Z)
     135             : 
     136       25890 :       IF (TRANSB == 'N' .OR. TRANSB == 'n') THEN
     137        8472 :          B(1:LDBX, M + 1:LDBY) = CMPLX(0._dp, 0._dp, dp)
     138     2992520 :          B(N + 1:LDBX, 1:M) = CMPLX(0._dp, 0._dp, dp)
     139             :       ELSE
     140       17418 :          B(1:LDBX, N + 1:LDBY) = CMPLX(0._dp, 0._dp, dp)
     141      336198 :          B(M + 1:LDBX, 1:N) = CMPLX(0._dp, 0._dp, dp)
     142             :       END IF
     143             : 
     144       25890 :    END SUBROUTINE mltfftsg
     145             : 
     146             : ! this formalizes what we have been assuming before, call with a complex(*) array, and passing to a real(2,*)
     147             : ! **************************************************************************************************
     148             : !> \brief ...
     149             : !> \param mm ...
     150             : !> \param nfft ...
     151             : !> \param m ...
     152             : !> \param nn ...
     153             : !> \param n ...
     154             : !> \param zin ...
     155             : !> \param zout ...
     156             : !> \param trig ...
     157             : !> \param now ...
     158             : !> \param after ...
     159             : !> \param before ...
     160             : !> \param isign ...
     161             : ! **************************************************************************************************
     162     1310530 :    SUBROUTINE fftstp_cmplx(mm, nfft, m, nn, n, zin, zout, trig, now, after, before, isign)
     163             : 
     164             :       INTEGER, INTENT(IN)                                :: mm, nfft, m, nn, n
     165             :       COMPLEX(dp), DIMENSION(mm, m), INTENT(IN), TARGET  :: zin
     166             :       COMPLEX(dp), DIMENSION(nn, n), INTENT(INOUT), &
     167             :          TARGET                                          :: zout
     168             :       REAL(dp), DIMENSION(2, ctrig_length), INTENT(IN)   :: trig
     169             :       INTEGER, INTENT(IN)                                :: now, after, before, isign
     170             : 
     171     1310530 :       REAL(dp), DIMENSION(:, :, :), POINTER              :: zin_real, zout_real
     172             : 
     173     5242120 :       CALL C_F_POINTER(C_LOC(zin), zin_real, (/2, mm, m/))
     174     5242120 :       CALL C_F_POINTER(C_LOC(zout), zout_real, (/2, nn, n/))
     175     1310530 :       CALL fftstp(mm, nfft, m, nn, n, zin_real, zout_real, trig, now, after, before, isign)
     176             : 
     177     1310530 :    END SUBROUTINE
     178             : 
     179             : ! **************************************************************************************************
     180             : !> \brief ...
     181             : !> \param mm ...
     182             : !> \param nfft ...
     183             : !> \param m ...
     184             : !> \param nn ...
     185             : !> \param n ...
     186             : !> \param zin ...
     187             : !> \param zout ...
     188             : !> \param trig ...
     189             : !> \param now ...
     190             : !> \param after ...
     191             : !> \param before ...
     192             : !> \param isign ...
     193             : ! **************************************************************************************************
     194      479475 :    SUBROUTINE fftpre_cmplx(mm, nfft, m, nn, n, zin, zout, trig, now, after, before, isign)
     195             : 
     196             :       INTEGER, INTENT(IN)                                :: mm, nfft, m, nn, n
     197             :       COMPLEX(dp), DIMENSION(m, mm), INTENT(IN), TARGET  :: zin
     198             :       COMPLEX(dp), DIMENSION(nn, n), INTENT(INOUT), &
     199             :          TARGET                                          :: zout
     200             :       REAL(dp), DIMENSION(2, ctrig_length), INTENT(IN)   :: trig
     201             :       INTEGER, INTENT(IN)                                :: now, after, before, isign
     202             : 
     203      479475 :       REAL(dp), DIMENSION(:, :, :), POINTER              :: zin_real, zout_real
     204             : 
     205     1917900 :       CALL C_F_POINTER(C_LOC(zin), zin_real, (/2, mm, m/))
     206     1917900 :       CALL C_F_POINTER(C_LOC(zout), zout_real, (/2, nn, n/))
     207             : 
     208      479475 :       CALL fftpre(mm, nfft, m, nn, n, zin_real, zout_real, trig, now, after, before, isign)
     209             : 
     210      479475 :    END SUBROUTINE
     211             : 
     212             : ! **************************************************************************************************
     213             : !> \brief ...
     214             : !> \param mm ...
     215             : !> \param nfft ...
     216             : !> \param m ...
     217             : !> \param nn ...
     218             : !> \param n ...
     219             : !> \param zin ...
     220             : !> \param zout ...
     221             : !> \param trig ...
     222             : !> \param now ...
     223             : !> \param after ...
     224             : !> \param before ...
     225             : !> \param isign ...
     226             : ! **************************************************************************************************
     227      311819 :    SUBROUTINE fftrot_cmplx(mm, nfft, m, nn, n, zin, zout, trig, now, after, before, isign)
     228             : 
     229             :       USE fft_kinds, ONLY: dp
     230             :       INTEGER, INTENT(IN)                                :: mm, nfft, m, nn, n
     231             :       COMPLEX(dp), DIMENSION(mm, m), INTENT(IN), TARGET  :: zin
     232             :       COMPLEX(dp), DIMENSION(n, nn), INTENT(INOUT), &
     233             :          TARGET                                          :: zout
     234             :       REAL(dp), DIMENSION(2, ctrig_length), INTENT(IN)   :: trig
     235             :       INTEGER, INTENT(IN)                                :: now, after, before, isign
     236             : 
     237      311819 :       REAL(dp), DIMENSION(:, :, :), POINTER              :: zin_real, zout_real
     238             : 
     239     1247276 :       CALL C_F_POINTER(C_LOC(zin), zin_real, (/2, mm, m/))
     240     1247276 :       CALL C_F_POINTER(C_LOC(zout), zout_real, (/2, nn, n/))
     241             : 
     242      311819 :       CALL fftrot(mm, nfft, m, nn, n, zin_real, zout_real, trig, now, after, before, isign)
     243             : 
     244      311819 :    END SUBROUTINE
     245             : 
     246             : !-----------------------------------------------------------------------------!
     247             : !  Copyright (C) Stefan Goedecker, Lausanne, Switzerland, August 1, 1991
     248             : !  Copyright (C) Stefan Goedecker, Cornell University, Ithaca, USA, 1994
     249             : !  Copyright (C) Stefan Goedecker, MPI Stuttgart, Germany, 1999
     250             : !  This file is distributed under the terms of the
     251             : !  GNU General Public License version 2 (or later),
     252             : !  see http://www.gnu.org/copyleft/gpl.txt .
     253             : !-----------------------------------------------------------------------------!
     254             : !  S. Goedecker: Rotating a three-dimensional array in optimal
     255             : !  positions for vector processing: Case study for a three-dimensional Fast
     256             : !  Fourier Transform, Comp. Phys. Commun. 76, 294 (1993)
     257             : ! **************************************************************************************************
     258             : !> \brief ...
     259             : !> \param mm ...
     260             : !> \param nfft ...
     261             : !> \param m ...
     262             : !> \param nn ...
     263             : !> \param n ...
     264             : !> \param zin ...
     265             : !> \param zout ...
     266             : !> \param trig ...
     267             : !> \param now ...
     268             : !> \param after ...
     269             : !> \param before ...
     270             : !> \param isign ...
     271             : ! **************************************************************************************************
     272      311819 :    SUBROUTINE fftrot(mm, nfft, m, nn, n, zin, zout, trig, now, after, before, isign)
     273             : 
     274             :       USE fft_kinds, ONLY: dp
     275             :       INTEGER, INTENT(IN)                                :: mm, nfft, m, nn, n
     276             :       REAL(dp), DIMENSION(2, mm, m), INTENT(IN)          :: zin
     277             :       REAL(dp), DIMENSION(2, n, nn), INTENT(INOUT)       :: zout
     278             :       REAL(dp), DIMENSION(2, ctrig_length), INTENT(IN)   :: trig
     279             :       INTEGER, INTENT(IN)                                :: now, after, before, isign
     280             : 
     281             :       REAL(dp), PARAMETER :: bb = 0.8660254037844387_dp, cos2 = 0.3090169943749474_dp, &
     282             :          cos4 = -0.8090169943749474_dp, rt2i = 0.7071067811865475_dp, &
     283             :          sin2p = 0.9510565162951536_dp, sin4p = 0.5877852522924731_dp
     284             : 
     285             :       INTEGER                                            :: atb, atn, ia, ias, ib, itrig, itt, j, &
     286             :                                                             nin1, nin2, nin3, nin4, nin5, nin6, &
     287             :                                                             nin7, nin8, nout1, nout2, nout3, &
     288             :                                                             nout4, nout5, nout6, nout7, nout8
     289             :       REAL(dp) :: am, ap, bbs, bm, bp, ci2, ci3, ci4, ci5, cm, cp, cr2, cr3, cr4, cr5, dbl, dm, r, &
     290             :          r1, r2, r25, r3, r34, r4, r5, r6, r7, r8, s, s1, s2, s25, s3, s34, s4, s5, s6, s7, s8, &
     291             :          sin2, sin4, ui1, ui2, ui3, ur1, ur2, ur3, vi1, vi2, vi3, vr1, vr2, vr3
     292             : 
     293             : ! sqrt(0.5)
     294             : ! sqrt(3)/2
     295             : ! cos(2*pi/5)
     296             : !  cos(4*pi/5)
     297             : ! sin(2*pi/5)
     298             : ! sin(4*pi/5)
     299             : !-----------------------------------------------------------------------------!
     300             : 
     301      311819 :       atn = after*now
     302      311819 :       atb = after*before
     303             : 
     304             :       IF (now == 4) THEN
     305       55650 :          IF (isign == 1) THEN
     306           0 :             ia = 1
     307           0 :             nin1 = ia - after
     308           0 :             nout1 = ia - atn
     309           0 :             DO ib = 1, before
     310           0 :                nin1 = nin1 + after
     311           0 :                nin2 = nin1 + atb
     312           0 :                nin3 = nin2 + atb
     313           0 :                nin4 = nin3 + atb
     314           0 :                nout1 = nout1 + atn
     315           0 :                nout2 = nout1 + after
     316           0 :                nout3 = nout2 + after
     317           0 :                nout4 = nout3 + after
     318           0 :                DO j = 1, nfft
     319           0 :                   r1 = zin(1, j, nin1)
     320           0 :                   s1 = zin(2, j, nin1)
     321           0 :                   r2 = zin(1, j, nin2)
     322           0 :                   s2 = zin(2, j, nin2)
     323           0 :                   r3 = zin(1, j, nin3)
     324           0 :                   s3 = zin(2, j, nin3)
     325           0 :                   r4 = zin(1, j, nin4)
     326           0 :                   s4 = zin(2, j, nin4)
     327           0 :                   r = r1 + r3
     328           0 :                   s = r2 + r4
     329           0 :                   zout(1, nout1, j) = r + s
     330           0 :                   zout(1, nout3, j) = r - s
     331           0 :                   r = r1 - r3
     332           0 :                   s = s2 - s4
     333           0 :                   zout(1, nout2, j) = r - s
     334           0 :                   zout(1, nout4, j) = r + s
     335           0 :                   r = s1 + s3
     336           0 :                   s = s2 + s4
     337           0 :                   zout(2, nout1, j) = r + s
     338           0 :                   zout(2, nout3, j) = r - s
     339           0 :                   r = s1 - s3
     340           0 :                   s = r2 - r4
     341           0 :                   zout(2, nout2, j) = r + s
     342           0 :                   zout(2, nout4, j) = r - s
     343             :                END DO
     344             :             END DO
     345           0 :             DO ia = 2, after
     346           0 :                ias = ia - 1
     347           0 :                IF (2*ias == after) THEN
     348           0 :                   nin1 = ia - after
     349           0 :                   nout1 = ia - atn
     350           0 :                   DO ib = 1, before
     351           0 :                      nin1 = nin1 + after
     352           0 :                      nin2 = nin1 + atb
     353           0 :                      nin3 = nin2 + atb
     354           0 :                      nin4 = nin3 + atb
     355           0 :                      nout1 = nout1 + atn
     356           0 :                      nout2 = nout1 + after
     357           0 :                      nout3 = nout2 + after
     358           0 :                      nout4 = nout3 + after
     359           0 :                      DO j = 1, nfft
     360           0 :                         r1 = zin(1, j, nin1)
     361           0 :                         s1 = zin(2, j, nin1)
     362           0 :                         r = zin(1, j, nin2)
     363           0 :                         s = zin(2, j, nin2)
     364           0 :                         r2 = (r - s)*rt2i
     365           0 :                         s2 = (r + s)*rt2i
     366           0 :                         r3 = -zin(2, j, nin3)
     367           0 :                         s3 = zin(1, j, nin3)
     368           0 :                         r = zin(1, j, nin4)
     369           0 :                         s = zin(2, j, nin4)
     370           0 :                         r4 = -(r + s)*rt2i
     371           0 :                         s4 = (r - s)*rt2i
     372           0 :                         r = r1 + r3
     373           0 :                         s = r2 + r4
     374           0 :                         zout(1, nout1, j) = r + s
     375           0 :                         zout(1, nout3, j) = r - s
     376           0 :                         r = r1 - r3
     377           0 :                         s = s2 - s4
     378           0 :                         zout(1, nout2, j) = r - s
     379           0 :                         zout(1, nout4, j) = r + s
     380           0 :                         r = s1 + s3
     381           0 :                         s = s2 + s4
     382           0 :                         zout(2, nout1, j) = r + s
     383           0 :                         zout(2, nout3, j) = r - s
     384           0 :                         r = s1 - s3
     385           0 :                         s = r2 - r4
     386           0 :                         zout(2, nout2, j) = r + s
     387           0 :                         zout(2, nout4, j) = r - s
     388             :                      END DO
     389             :                   END DO
     390             :                ELSE
     391           0 :                   itt = ias*before
     392           0 :                   itrig = itt + 1
     393           0 :                   cr2 = trig(1, itrig)
     394           0 :                   ci2 = trig(2, itrig)
     395           0 :                   itrig = itrig + itt
     396           0 :                   cr3 = trig(1, itrig)
     397           0 :                   ci3 = trig(2, itrig)
     398           0 :                   itrig = itrig + itt
     399           0 :                   cr4 = trig(1, itrig)
     400           0 :                   ci4 = trig(2, itrig)
     401           0 :                   nin1 = ia - after
     402           0 :                   nout1 = ia - atn
     403           0 :                   DO ib = 1, before
     404           0 :                      nin1 = nin1 + after
     405           0 :                      nin2 = nin1 + atb
     406           0 :                      nin3 = nin2 + atb
     407           0 :                      nin4 = nin3 + atb
     408           0 :                      nout1 = nout1 + atn
     409           0 :                      nout2 = nout1 + after
     410           0 :                      nout3 = nout2 + after
     411           0 :                      nout4 = nout3 + after
     412           0 :                      DO j = 1, nfft
     413           0 :                         r1 = zin(1, j, nin1)
     414           0 :                         s1 = zin(2, j, nin1)
     415           0 :                         r = zin(1, j, nin2)
     416           0 :                         s = zin(2, j, nin2)
     417           0 :                         r2 = r*cr2 - s*ci2
     418           0 :                         s2 = r*ci2 + s*cr2
     419           0 :                         r = zin(1, j, nin3)
     420           0 :                         s = zin(2, j, nin3)
     421           0 :                         r3 = r*cr3 - s*ci3
     422           0 :                         s3 = r*ci3 + s*cr3
     423           0 :                         r = zin(1, j, nin4)
     424           0 :                         s = zin(2, j, nin4)
     425           0 :                         r4 = r*cr4 - s*ci4
     426           0 :                         s4 = r*ci4 + s*cr4
     427           0 :                         r = r1 + r3
     428           0 :                         s = r2 + r4
     429           0 :                         zout(1, nout1, j) = r + s
     430           0 :                         zout(1, nout3, j) = r - s
     431           0 :                         r = r1 - r3
     432           0 :                         s = s2 - s4
     433           0 :                         zout(1, nout2, j) = r - s
     434           0 :                         zout(1, nout4, j) = r + s
     435           0 :                         r = s1 + s3
     436           0 :                         s = s2 + s4
     437           0 :                         zout(2, nout1, j) = r + s
     438           0 :                         zout(2, nout3, j) = r - s
     439           0 :                         r = s1 - s3
     440           0 :                         s = r2 - r4
     441           0 :                         zout(2, nout2, j) = r + s
     442           0 :                         zout(2, nout4, j) = r - s
     443             :                      END DO
     444             :                   END DO
     445             :                END IF
     446             :             END DO
     447             :          ELSE
     448       55650 :             ia = 1
     449       55650 :             nin1 = ia - after
     450       55650 :             nout1 = ia - atn
     451      111300 :             DO ib = 1, before
     452       55650 :                nin1 = nin1 + after
     453       55650 :                nin2 = nin1 + atb
     454       55650 :                nin3 = nin2 + atb
     455       55650 :                nin4 = nin3 + atb
     456       55650 :                nout1 = nout1 + atn
     457       55650 :                nout2 = nout1 + after
     458       55650 :                nout3 = nout2 + after
     459       55650 :                nout4 = nout3 + after
     460      925380 :                DO j = 1, nfft
     461      814080 :                   r1 = zin(1, j, nin1)
     462      814080 :                   s1 = zin(2, j, nin1)
     463      814080 :                   r2 = zin(1, j, nin2)
     464      814080 :                   s2 = zin(2, j, nin2)
     465      814080 :                   r3 = zin(1, j, nin3)
     466      814080 :                   s3 = zin(2, j, nin3)
     467      814080 :                   r4 = zin(1, j, nin4)
     468      814080 :                   s4 = zin(2, j, nin4)
     469      814080 :                   r = r1 + r3
     470      814080 :                   s = r2 + r4
     471      814080 :                   zout(1, nout1, j) = r + s
     472      814080 :                   zout(1, nout3, j) = r - s
     473      814080 :                   r = r1 - r3
     474      814080 :                   s = s2 - s4
     475      814080 :                   zout(1, nout2, j) = r + s
     476      814080 :                   zout(1, nout4, j) = r - s
     477      814080 :                   r = s1 + s3
     478      814080 :                   s = s2 + s4
     479      814080 :                   zout(2, nout1, j) = r + s
     480      814080 :                   zout(2, nout3, j) = r - s
     481      814080 :                   r = s1 - s3
     482      814080 :                   s = r2 - r4
     483      814080 :                   zout(2, nout2, j) = r - s
     484      869730 :                   zout(2, nout4, j) = r + s
     485             :                END DO
     486             :             END DO
     487      445200 :             DO ia = 2, after
     488      389550 :                ias = ia - 1
     489      445200 :                IF (2*ias == after) THEN
     490       55650 :                   nin1 = ia - after
     491       55650 :                   nout1 = ia - atn
     492      111300 :                   DO ib = 1, before
     493       55650 :                      nin1 = nin1 + after
     494       55650 :                      nin2 = nin1 + atb
     495       55650 :                      nin3 = nin2 + atb
     496       55650 :                      nin4 = nin3 + atb
     497       55650 :                      nout1 = nout1 + atn
     498       55650 :                      nout2 = nout1 + after
     499       55650 :                      nout3 = nout2 + after
     500       55650 :                      nout4 = nout3 + after
     501      925380 :                      DO j = 1, nfft
     502      814080 :                         r1 = zin(1, j, nin1)
     503      814080 :                         s1 = zin(2, j, nin1)
     504      814080 :                         r = zin(1, j, nin2)
     505      814080 :                         s = zin(2, j, nin2)
     506      814080 :                         r2 = (r + s)*rt2i
     507      814080 :                         s2 = (s - r)*rt2i
     508      814080 :                         r3 = zin(2, j, nin3)
     509      814080 :                         s3 = -zin(1, j, nin3)
     510      814080 :                         r = zin(1, j, nin4)
     511      814080 :                         s = zin(2, j, nin4)
     512      814080 :                         r4 = (s - r)*rt2i
     513      814080 :                         s4 = -(r + s)*rt2i
     514      814080 :                         r = r1 + r3
     515      814080 :                         s = r2 + r4
     516      814080 :                         zout(1, nout1, j) = r + s
     517      814080 :                         zout(1, nout3, j) = r - s
     518      814080 :                         r = r1 - r3
     519      814080 :                         s = s2 - s4
     520      814080 :                         zout(1, nout2, j) = r + s
     521      814080 :                         zout(1, nout4, j) = r - s
     522      814080 :                         r = s1 + s3
     523      814080 :                         s = s2 + s4
     524      814080 :                         zout(2, nout1, j) = r + s
     525      814080 :                         zout(2, nout3, j) = r - s
     526      814080 :                         r = s1 - s3
     527      814080 :                         s = r2 - r4
     528      814080 :                         zout(2, nout2, j) = r - s
     529      869730 :                         zout(2, nout4, j) = r + s
     530             :                      END DO
     531             :                   END DO
     532             :                ELSE
     533      333900 :                   itt = ias*before
     534      333900 :                   itrig = itt + 1
     535      333900 :                   cr2 = trig(1, itrig)
     536      333900 :                   ci2 = trig(2, itrig)
     537      333900 :                   itrig = itrig + itt
     538      333900 :                   cr3 = trig(1, itrig)
     539      333900 :                   ci3 = trig(2, itrig)
     540      333900 :                   itrig = itrig + itt
     541      333900 :                   cr4 = trig(1, itrig)
     542      333900 :                   ci4 = trig(2, itrig)
     543      333900 :                   nin1 = ia - after
     544      333900 :                   nout1 = ia - atn
     545      667800 :                   DO ib = 1, before
     546      333900 :                      nin1 = nin1 + after
     547      333900 :                      nin2 = nin1 + atb
     548      333900 :                      nin3 = nin2 + atb
     549      333900 :                      nin4 = nin3 + atb
     550      333900 :                      nout1 = nout1 + atn
     551      333900 :                      nout2 = nout1 + after
     552      333900 :                      nout3 = nout2 + after
     553      333900 :                      nout4 = nout3 + after
     554     5552280 :                      DO j = 1, nfft
     555     4884480 :                         r1 = zin(1, j, nin1)
     556     4884480 :                         s1 = zin(2, j, nin1)
     557     4884480 :                         r = zin(1, j, nin2)
     558     4884480 :                         s = zin(2, j, nin2)
     559     4884480 :                         r2 = r*cr2 - s*ci2
     560     4884480 :                         s2 = r*ci2 + s*cr2
     561     4884480 :                         r = zin(1, j, nin3)
     562     4884480 :                         s = zin(2, j, nin3)
     563     4884480 :                         r3 = r*cr3 - s*ci3
     564     4884480 :                         s3 = r*ci3 + s*cr3
     565     4884480 :                         r = zin(1, j, nin4)
     566     4884480 :                         s = zin(2, j, nin4)
     567     4884480 :                         r4 = r*cr4 - s*ci4
     568     4884480 :                         s4 = r*ci4 + s*cr4
     569     4884480 :                         r = r1 + r3
     570     4884480 :                         s = r2 + r4
     571     4884480 :                         zout(1, nout1, j) = r + s
     572     4884480 :                         zout(1, nout3, j) = r - s
     573     4884480 :                         r = r1 - r3
     574     4884480 :                         s = s2 - s4
     575     4884480 :                         zout(1, nout2, j) = r + s
     576     4884480 :                         zout(1, nout4, j) = r - s
     577     4884480 :                         r = s1 + s3
     578     4884480 :                         s = s2 + s4
     579     4884480 :                         zout(2, nout1, j) = r + s
     580     4884480 :                         zout(2, nout3, j) = r - s
     581     4884480 :                         r = s1 - s3
     582     4884480 :                         s = r2 - r4
     583     4884480 :                         zout(2, nout2, j) = r - s
     584     5218380 :                         zout(2, nout4, j) = r + s
     585             :                      END DO
     586             :                   END DO
     587             :                END IF
     588             :             END DO
     589             :          END IF
     590             :       ELSE IF (now == 8) THEN
     591           0 :          IF (isign == -1) THEN
     592           0 :             ia = 1
     593           0 :             nin1 = ia - after
     594           0 :             nout1 = ia - atn
     595           0 :             DO ib = 1, before
     596           0 :                nin1 = nin1 + after
     597           0 :                nin2 = nin1 + atb
     598           0 :                nin3 = nin2 + atb
     599           0 :                nin4 = nin3 + atb
     600           0 :                nin5 = nin4 + atb
     601           0 :                nin6 = nin5 + atb
     602           0 :                nin7 = nin6 + atb
     603           0 :                nin8 = nin7 + atb
     604           0 :                nout1 = nout1 + atn
     605           0 :                nout2 = nout1 + after
     606           0 :                nout3 = nout2 + after
     607           0 :                nout4 = nout3 + after
     608           0 :                nout5 = nout4 + after
     609           0 :                nout6 = nout5 + after
     610           0 :                nout7 = nout6 + after
     611           0 :                nout8 = nout7 + after
     612           0 :                DO j = 1, nfft
     613           0 :                   r1 = zin(1, j, nin1)
     614           0 :                   s1 = zin(2, j, nin1)
     615           0 :                   r2 = zin(1, j, nin2)
     616           0 :                   s2 = zin(2, j, nin2)
     617           0 :                   r3 = zin(1, j, nin3)
     618           0 :                   s3 = zin(2, j, nin3)
     619           0 :                   r4 = zin(1, j, nin4)
     620           0 :                   s4 = zin(2, j, nin4)
     621           0 :                   r5 = zin(1, j, nin5)
     622           0 :                   s5 = zin(2, j, nin5)
     623           0 :                   r6 = zin(1, j, nin6)
     624           0 :                   s6 = zin(2, j, nin6)
     625           0 :                   r7 = zin(1, j, nin7)
     626           0 :                   s7 = zin(2, j, nin7)
     627           0 :                   r8 = zin(1, j, nin8)
     628           0 :                   s8 = zin(2, j, nin8)
     629           0 :                   r = r1 + r5
     630           0 :                   s = r3 + r7
     631           0 :                   ap = r + s
     632           0 :                   am = r - s
     633           0 :                   r = r2 + r6
     634           0 :                   s = r4 + r8
     635           0 :                   bp = r + s
     636           0 :                   bm = r - s
     637           0 :                   r = s1 + s5
     638           0 :                   s = s3 + s7
     639           0 :                   cp = r + s
     640           0 :                   cm = r - s
     641           0 :                   r = s2 + s6
     642           0 :                   s = s4 + s8
     643           0 :                   dbl = r + s
     644           0 :                   dm = r - s
     645           0 :                   zout(1, nout1, j) = ap + bp
     646           0 :                   zout(2, nout1, j) = cp + dbl
     647           0 :                   zout(1, nout5, j) = ap - bp
     648           0 :                   zout(2, nout5, j) = cp - dbl
     649           0 :                   zout(1, nout3, j) = am + dm
     650           0 :                   zout(2, nout3, j) = cm - bm
     651           0 :                   zout(1, nout7, j) = am - dm
     652           0 :                   zout(2, nout7, j) = cm + bm
     653           0 :                   r = r1 - r5
     654           0 :                   s = s3 - s7
     655           0 :                   ap = r + s
     656           0 :                   am = r - s
     657           0 :                   r = s1 - s5
     658           0 :                   s = r3 - r7
     659           0 :                   bp = r + s
     660           0 :                   bm = r - s
     661           0 :                   r = s4 - s8
     662           0 :                   s = r2 - r6
     663           0 :                   cp = r + s
     664           0 :                   cm = r - s
     665           0 :                   r = s2 - s6
     666           0 :                   s = r4 - r8
     667           0 :                   dbl = r + s
     668           0 :                   dm = r - s
     669           0 :                   r = (cp + dm)*rt2i
     670           0 :                   s = (-cp + dm)*rt2i
     671           0 :                   cp = (cm + dbl)*rt2i
     672           0 :                   dbl = (cm - dbl)*rt2i
     673           0 :                   zout(1, nout2, j) = ap + r
     674           0 :                   zout(2, nout2, j) = bm + s
     675           0 :                   zout(1, nout6, j) = ap - r
     676           0 :                   zout(2, nout6, j) = bm - s
     677           0 :                   zout(1, nout4, j) = am + cp
     678           0 :                   zout(2, nout4, j) = bp + dbl
     679           0 :                   zout(1, nout8, j) = am - cp
     680           0 :                   zout(2, nout8, j) = bp - dbl
     681             :                END DO
     682             :             END DO
     683             :          ELSE
     684           0 :             ia = 1
     685           0 :             nin1 = ia - after
     686           0 :             nout1 = ia - atn
     687           0 :             DO ib = 1, before
     688           0 :                nin1 = nin1 + after
     689           0 :                nin2 = nin1 + atb
     690           0 :                nin3 = nin2 + atb
     691           0 :                nin4 = nin3 + atb
     692           0 :                nin5 = nin4 + atb
     693           0 :                nin6 = nin5 + atb
     694           0 :                nin7 = nin6 + atb
     695           0 :                nin8 = nin7 + atb
     696           0 :                nout1 = nout1 + atn
     697           0 :                nout2 = nout1 + after
     698           0 :                nout3 = nout2 + after
     699           0 :                nout4 = nout3 + after
     700           0 :                nout5 = nout4 + after
     701           0 :                nout6 = nout5 + after
     702           0 :                nout7 = nout6 + after
     703           0 :                nout8 = nout7 + after
     704           0 :                DO j = 1, nfft
     705           0 :                   r1 = zin(1, j, nin1)
     706           0 :                   s1 = zin(2, j, nin1)
     707           0 :                   r2 = zin(1, j, nin2)
     708           0 :                   s2 = zin(2, j, nin2)
     709           0 :                   r3 = zin(1, j, nin3)
     710           0 :                   s3 = zin(2, j, nin3)
     711           0 :                   r4 = zin(1, j, nin4)
     712           0 :                   s4 = zin(2, j, nin4)
     713           0 :                   r5 = zin(1, j, nin5)
     714           0 :                   s5 = zin(2, j, nin5)
     715           0 :                   r6 = zin(1, j, nin6)
     716           0 :                   s6 = zin(2, j, nin6)
     717           0 :                   r7 = zin(1, j, nin7)
     718           0 :                   s7 = zin(2, j, nin7)
     719           0 :                   r8 = zin(1, j, nin8)
     720           0 :                   s8 = zin(2, j, nin8)
     721           0 :                   r = r1 + r5
     722           0 :                   s = r3 + r7
     723           0 :                   ap = r + s
     724           0 :                   am = r - s
     725           0 :                   r = r2 + r6
     726           0 :                   s = r4 + r8
     727           0 :                   bp = r + s
     728           0 :                   bm = r - s
     729           0 :                   r = s1 + s5
     730           0 :                   s = s3 + s7
     731           0 :                   cp = r + s
     732           0 :                   cm = r - s
     733           0 :                   r = s2 + s6
     734           0 :                   s = s4 + s8
     735           0 :                   dbl = r + s
     736           0 :                   dm = r - s
     737           0 :                   zout(1, nout1, j) = ap + bp
     738           0 :                   zout(2, nout1, j) = cp + dbl
     739           0 :                   zout(1, nout5, j) = ap - bp
     740           0 :                   zout(2, nout5, j) = cp - dbl
     741           0 :                   zout(1, nout3, j) = am - dm
     742           0 :                   zout(2, nout3, j) = cm + bm
     743           0 :                   zout(1, nout7, j) = am + dm
     744           0 :                   zout(2, nout7, j) = cm - bm
     745           0 :                   r = r1 - r5
     746           0 :                   s = -s3 + s7
     747           0 :                   ap = r + s
     748           0 :                   am = r - s
     749           0 :                   r = s1 - s5
     750           0 :                   s = r7 - r3
     751           0 :                   bp = r + s
     752           0 :                   bm = r - s
     753           0 :                   r = -s4 + s8
     754           0 :                   s = r2 - r6
     755           0 :                   cp = r + s
     756           0 :                   cm = r - s
     757           0 :                   r = -s2 + s6
     758           0 :                   s = r4 - r8
     759           0 :                   dbl = r + s
     760           0 :                   dm = r - s
     761           0 :                   r = (cp + dm)*rt2i
     762           0 :                   s = (cp - dm)*rt2i
     763           0 :                   cp = (cm + dbl)*rt2i
     764           0 :                   dbl = (-cm + dbl)*rt2i
     765           0 :                   zout(1, nout2, j) = ap + r
     766           0 :                   zout(2, nout2, j) = bm + s
     767           0 :                   zout(1, nout6, j) = ap - r
     768           0 :                   zout(2, nout6, j) = bm - s
     769           0 :                   zout(1, nout4, j) = am + cp
     770           0 :                   zout(2, nout4, j) = bp + dbl
     771           0 :                   zout(1, nout8, j) = am - cp
     772           0 :                   zout(2, nout8, j) = bp - dbl
     773             :                END DO
     774             :             END DO
     775             :          END IF
     776             :       ELSE IF (now == 3) THEN
     777      217685 :          bbs = isign*bb
     778      217685 :          ia = 1
     779      217685 :          nin1 = ia - after
     780      217685 :          nout1 = ia - atn
     781      435370 :          DO ib = 1, before
     782      217685 :             nin1 = nin1 + after
     783      217685 :             nin2 = nin1 + atb
     784      217685 :             nin3 = nin2 + atb
     785      217685 :             nout1 = nout1 + atn
     786      217685 :             nout2 = nout1 + after
     787      217685 :             nout3 = nout2 + after
     788     1876755 :             DO j = 1, nfft
     789     1441385 :                r1 = zin(1, j, nin1)
     790     1441385 :                s1 = zin(2, j, nin1)
     791     1441385 :                r2 = zin(1, j, nin2)
     792     1441385 :                s2 = zin(2, j, nin2)
     793     1441385 :                r3 = zin(1, j, nin3)
     794     1441385 :                s3 = zin(2, j, nin3)
     795     1441385 :                r = r2 + r3
     796     1441385 :                s = s2 + s3
     797     1441385 :                zout(1, nout1, j) = r + r1
     798     1441385 :                zout(2, nout1, j) = s + s1
     799     1441385 :                r1 = r1 - 0.5_dp*r
     800     1441385 :                s1 = s1 - 0.5_dp*s
     801     1441385 :                r2 = bbs*(r2 - r3)
     802     1441385 :                s2 = bbs*(s2 - s3)
     803     1441385 :                zout(1, nout2, j) = r1 - s2
     804     1441385 :                zout(2, nout2, j) = s1 + r2
     805     1441385 :                zout(1, nout3, j) = r1 + s2
     806     1659070 :                zout(2, nout3, j) = s1 - r2
     807             :             END DO
     808             :          END DO
     809     5907238 :          DO ia = 2, after
     810     5689553 :             ias = ia - 1
     811     5907238 :             IF (4*ias == 3*after) THEN
     812       16955 :                IF (isign == 1) THEN
     813           0 :                   nin1 = ia - after
     814           0 :                   nout1 = ia - atn
     815           0 :                   DO ib = 1, before
     816           0 :                      nin1 = nin1 + after
     817           0 :                      nin2 = nin1 + atb
     818           0 :                      nin3 = nin2 + atb
     819           0 :                      nout1 = nout1 + atn
     820           0 :                      nout2 = nout1 + after
     821           0 :                      nout3 = nout2 + after
     822           0 :                      DO j = 1, nfft
     823           0 :                         r1 = zin(1, j, nin1)
     824           0 :                         s1 = zin(2, j, nin1)
     825           0 :                         r2 = -zin(2, j, nin2)
     826           0 :                         s2 = zin(1, j, nin2)
     827           0 :                         r3 = -zin(1, j, nin3)
     828           0 :                         s3 = -zin(2, j, nin3)
     829           0 :                         r = r2 + r3
     830           0 :                         s = s2 + s3
     831           0 :                         zout(1, nout1, j) = r + r1
     832           0 :                         zout(2, nout1, j) = s + s1
     833           0 :                         r1 = r1 - 0.5_dp*r
     834           0 :                         s1 = s1 - 0.5_dp*s
     835           0 :                         r2 = bbs*(r2 - r3)
     836           0 :                         s2 = bbs*(s2 - s3)
     837           0 :                         zout(1, nout2, j) = r1 - s2
     838           0 :                         zout(2, nout2, j) = s1 + r2
     839           0 :                         zout(1, nout3, j) = r1 + s2
     840           0 :                         zout(2, nout3, j) = s1 - r2
     841             :                      END DO
     842             :                   END DO
     843             :                ELSE
     844       16955 :                   nin1 = ia - after
     845       16955 :                   nout1 = ia - atn
     846       33910 :                   DO ib = 1, before
     847       16955 :                      nin1 = nin1 + after
     848       16955 :                      nin2 = nin1 + atb
     849       16955 :                      nin3 = nin2 + atb
     850       16955 :                      nout1 = nout1 + atn
     851       16955 :                      nout2 = nout1 + after
     852       16955 :                      nout3 = nout2 + after
     853      195765 :                      DO j = 1, nfft
     854      161855 :                         r1 = zin(1, j, nin1)
     855      161855 :                         s1 = zin(2, j, nin1)
     856      161855 :                         r2 = zin(2, j, nin2)
     857      161855 :                         s2 = -zin(1, j, nin2)
     858      161855 :                         r3 = -zin(1, j, nin3)
     859      161855 :                         s3 = -zin(2, j, nin3)
     860      161855 :                         r = r2 + r3
     861      161855 :                         s = s2 + s3
     862      161855 :                         zout(1, nout1, j) = r + r1
     863      161855 :                         zout(2, nout1, j) = s + s1
     864      161855 :                         r1 = r1 - 0.5_dp*r
     865      161855 :                         s1 = s1 - 0.5_dp*s
     866      161855 :                         r2 = bbs*(r2 - r3)
     867      161855 :                         s2 = bbs*(s2 - s3)
     868      161855 :                         zout(1, nout2, j) = r1 - s2
     869      161855 :                         zout(2, nout2, j) = s1 + r2
     870      161855 :                         zout(1, nout3, j) = r1 + s2
     871      178810 :                         zout(2, nout3, j) = s1 - r2
     872             :                      END DO
     873             :                   END DO
     874             :                END IF
     875     5672598 :             ELSE IF (8*ias == 3*after) THEN
     876           0 :                IF (isign == 1) THEN
     877           0 :                   nin1 = ia - after
     878           0 :                   nout1 = ia - atn
     879           0 :                   DO ib = 1, before
     880           0 :                      nin1 = nin1 + after
     881           0 :                      nin2 = nin1 + atb
     882           0 :                      nin3 = nin2 + atb
     883           0 :                      nout1 = nout1 + atn
     884           0 :                      nout2 = nout1 + after
     885           0 :                      nout3 = nout2 + after
     886           0 :                      DO j = 1, nfft
     887           0 :                         r1 = zin(1, j, nin1)
     888           0 :                         s1 = zin(2, j, nin1)
     889           0 :                         r = zin(1, j, nin2)
     890           0 :                         s = zin(2, j, nin2)
     891           0 :                         r2 = (r - s)*rt2i
     892           0 :                         s2 = (r + s)*rt2i
     893           0 :                         r3 = -zin(2, j, nin3)
     894           0 :                         s3 = zin(1, j, nin3)
     895           0 :                         r = r2 + r3
     896           0 :                         s = s2 + s3
     897           0 :                         zout(1, nout1, j) = r + r1
     898           0 :                         zout(2, nout1, j) = s + s1
     899           0 :                         r1 = r1 - 0.5_dp*r
     900           0 :                         s1 = s1 - 0.5_dp*s
     901           0 :                         r2 = bbs*(r2 - r3)
     902           0 :                         s2 = bbs*(s2 - s3)
     903           0 :                         zout(1, nout2, j) = r1 - s2
     904           0 :                         zout(2, nout2, j) = s1 + r2
     905           0 :                         zout(1, nout3, j) = r1 + s2
     906           0 :                         zout(2, nout3, j) = s1 - r2
     907             :                      END DO
     908             :                   END DO
     909             :                ELSE
     910           0 :                   nin1 = ia - after
     911           0 :                   nout1 = ia - atn
     912           0 :                   DO ib = 1, before
     913           0 :                      nin1 = nin1 + after
     914           0 :                      nin2 = nin1 + atb
     915           0 :                      nin3 = nin2 + atb
     916           0 :                      nout1 = nout1 + atn
     917           0 :                      nout2 = nout1 + after
     918           0 :                      nout3 = nout2 + after
     919           0 :                      DO j = 1, nfft
     920           0 :                         r1 = zin(1, j, nin1)
     921           0 :                         s1 = zin(2, j, nin1)
     922           0 :                         r = zin(1, j, nin2)
     923           0 :                         s = zin(2, j, nin2)
     924           0 :                         r2 = (r + s)*rt2i
     925           0 :                         s2 = (-r + s)*rt2i
     926           0 :                         r3 = zin(2, j, nin3)
     927           0 :                         s3 = -zin(1, j, nin3)
     928           0 :                         r = r2 + r3
     929           0 :                         s = s2 + s3
     930           0 :                         zout(1, nout1, j) = r + r1
     931           0 :                         zout(2, nout1, j) = s + s1
     932           0 :                         r1 = r1 - 0.5_dp*r
     933           0 :                         s1 = s1 - 0.5_dp*s
     934           0 :                         r2 = bbs*(r2 - r3)
     935           0 :                         s2 = bbs*(s2 - s3)
     936           0 :                         zout(1, nout2, j) = r1 - s2
     937           0 :                         zout(2, nout2, j) = s1 + r2
     938           0 :                         zout(1, nout3, j) = r1 + s2
     939           0 :                         zout(2, nout3, j) = s1 - r2
     940             :                      END DO
     941             :                   END DO
     942             :                END IF
     943             :             ELSE
     944     5672598 :                itt = ias*before
     945     5672598 :                itrig = itt + 1
     946     5672598 :                cr2 = trig(1, itrig)
     947     5672598 :                ci2 = trig(2, itrig)
     948     5672598 :                itrig = itrig + itt
     949     5672598 :                cr3 = trig(1, itrig)
     950     5672598 :                ci3 = trig(2, itrig)
     951     5672598 :                nin1 = ia - after
     952     5672598 :                nout1 = ia - atn
     953    11345196 :                DO ib = 1, before
     954     5672598 :                   nin1 = nin1 + after
     955     5672598 :                   nin2 = nin1 + atb
     956     5672598 :                   nin3 = nin2 + atb
     957     5672598 :                   nout1 = nout1 + atn
     958     5672598 :                   nout2 = nout1 + after
     959     5672598 :                   nout3 = nout2 + after
     960    42430224 :                   DO j = 1, nfft
     961    31085028 :                      r1 = zin(1, j, nin1)
     962    31085028 :                      s1 = zin(2, j, nin1)
     963    31085028 :                      r = zin(1, j, nin2)
     964    31085028 :                      s = zin(2, j, nin2)
     965    31085028 :                      r2 = r*cr2 - s*ci2
     966    31085028 :                      s2 = r*ci2 + s*cr2
     967    31085028 :                      r = zin(1, j, nin3)
     968    31085028 :                      s = zin(2, j, nin3)
     969    31085028 :                      r3 = r*cr3 - s*ci3
     970    31085028 :                      s3 = r*ci3 + s*cr3
     971    31085028 :                      r = r2 + r3
     972    31085028 :                      s = s2 + s3
     973    31085028 :                      zout(1, nout1, j) = r + r1
     974    31085028 :                      zout(2, nout1, j) = s + s1
     975    31085028 :                      r1 = r1 - 0.5_dp*r
     976    31085028 :                      s1 = s1 - 0.5_dp*s
     977    31085028 :                      r2 = bbs*(r2 - r3)
     978    31085028 :                      s2 = bbs*(s2 - s3)
     979    31085028 :                      zout(1, nout2, j) = r1 - s2
     980    31085028 :                      zout(2, nout2, j) = s1 + r2
     981    31085028 :                      zout(1, nout3, j) = r1 + s2
     982    36757626 :                      zout(2, nout3, j) = s1 - r2
     983             :                   END DO
     984             :                END DO
     985             :             END IF
     986             :          END DO
     987             :       ELSE IF (now == 5) THEN
     988       38484 :          sin2 = isign*sin2p
     989       38484 :          sin4 = isign*sin4p
     990       38484 :          ia = 1
     991       38484 :          nin1 = ia - after
     992       38484 :          nout1 = ia - atn
     993       76968 :          DO ib = 1, before
     994       38484 :             nin1 = nin1 + after
     995       38484 :             nin2 = nin1 + atb
     996       38484 :             nin3 = nin2 + atb
     997       38484 :             nin4 = nin3 + atb
     998       38484 :             nin5 = nin4 + atb
     999       38484 :             nout1 = nout1 + atn
    1000       38484 :             nout2 = nout1 + after
    1001       38484 :             nout3 = nout2 + after
    1002       38484 :             nout4 = nout3 + after
    1003       38484 :             nout5 = nout4 + after
    1004      781143 :             DO j = 1, nfft
    1005      704175 :                r1 = zin(1, j, nin1)
    1006      704175 :                s1 = zin(2, j, nin1)
    1007      704175 :                r2 = zin(1, j, nin2)
    1008      704175 :                s2 = zin(2, j, nin2)
    1009      704175 :                r3 = zin(1, j, nin3)
    1010      704175 :                s3 = zin(2, j, nin3)
    1011      704175 :                r4 = zin(1, j, nin4)
    1012      704175 :                s4 = zin(2, j, nin4)
    1013      704175 :                r5 = zin(1, j, nin5)
    1014      704175 :                s5 = zin(2, j, nin5)
    1015      704175 :                r25 = r2 + r5
    1016      704175 :                r34 = r3 + r4
    1017      704175 :                s25 = s2 - s5
    1018      704175 :                s34 = s3 - s4
    1019      704175 :                zout(1, nout1, j) = r1 + r25 + r34
    1020      704175 :                r = cos2*r25 + cos4*r34 + r1
    1021      704175 :                s = sin2*s25 + sin4*s34
    1022      704175 :                zout(1, nout2, j) = r - s
    1023      704175 :                zout(1, nout5, j) = r + s
    1024      704175 :                r = cos4*r25 + cos2*r34 + r1
    1025      704175 :                s = sin4*s25 - sin2*s34
    1026      704175 :                zout(1, nout3, j) = r - s
    1027      704175 :                zout(1, nout4, j) = r + s
    1028      704175 :                r25 = r2 - r5
    1029      704175 :                r34 = r3 - r4
    1030      704175 :                s25 = s2 + s5
    1031      704175 :                s34 = s3 + s4
    1032      704175 :                zout(2, nout1, j) = s1 + s25 + s34
    1033      704175 :                r = cos2*s25 + cos4*s34 + s1
    1034      704175 :                s = sin2*r25 + sin4*r34
    1035      704175 :                zout(2, nout2, j) = r + s
    1036      704175 :                zout(2, nout5, j) = r - s
    1037      704175 :                r = cos4*s25 + cos2*s34 + s1
    1038      704175 :                s = sin4*r25 - sin2*r34
    1039      704175 :                zout(2, nout3, j) = r + s
    1040      742659 :                zout(2, nout4, j) = r - s
    1041             :             END DO
    1042             :          END DO
    1043      193734 :          DO ia = 2, after
    1044      155250 :             ias = ia - 1
    1045      193734 :             IF (8*ias == 5*after) THEN
    1046         438 :                IF (isign == 1) THEN
    1047           0 :                   nin1 = ia - after
    1048           0 :                   nout1 = ia - atn
    1049           0 :                   DO ib = 1, before
    1050           0 :                      nin1 = nin1 + after
    1051           0 :                      nin2 = nin1 + atb
    1052           0 :                      nin3 = nin2 + atb
    1053           0 :                      nin4 = nin3 + atb
    1054           0 :                      nin5 = nin4 + atb
    1055           0 :                      nout1 = nout1 + atn
    1056           0 :                      nout2 = nout1 + after
    1057           0 :                      nout3 = nout2 + after
    1058           0 :                      nout4 = nout3 + after
    1059           0 :                      nout5 = nout4 + after
    1060           0 :                      DO j = 1, nfft
    1061           0 :                         r1 = zin(1, j, nin1)
    1062           0 :                         s1 = zin(2, j, nin1)
    1063           0 :                         r = zin(1, j, nin2)
    1064           0 :                         s = zin(2, j, nin2)
    1065           0 :                         r2 = (r - s)*rt2i
    1066           0 :                         s2 = (r + s)*rt2i
    1067           0 :                         r3 = -zin(2, j, nin3)
    1068           0 :                         s3 = zin(1, j, nin3)
    1069           0 :                         r = zin(1, j, nin4)
    1070           0 :                         s = zin(2, j, nin4)
    1071           0 :                         r4 = -(r + s)*rt2i
    1072           0 :                         s4 = (r - s)*rt2i
    1073           0 :                         r5 = -zin(1, j, nin5)
    1074           0 :                         s5 = -zin(2, j, nin5)
    1075           0 :                         r25 = r2 + r5
    1076           0 :                         r34 = r3 + r4
    1077           0 :                         s25 = s2 - s5
    1078           0 :                         s34 = s3 - s4
    1079           0 :                         zout(1, nout1, j) = r1 + r25 + r34
    1080           0 :                         r = cos2*r25 + cos4*r34 + r1
    1081           0 :                         s = sin2*s25 + sin4*s34
    1082           0 :                         zout(1, nout2, j) = r - s
    1083           0 :                         zout(1, nout5, j) = r + s
    1084           0 :                         r = cos4*r25 + cos2*r34 + r1
    1085           0 :                         s = sin4*s25 - sin2*s34
    1086           0 :                         zout(1, nout3, j) = r - s
    1087           0 :                         zout(1, nout4, j) = r + s
    1088           0 :                         r25 = r2 - r5
    1089           0 :                         r34 = r3 - r4
    1090           0 :                         s25 = s2 + s5
    1091           0 :                         s34 = s3 + s4
    1092           0 :                         zout(2, nout1, j) = s1 + s25 + s34
    1093           0 :                         r = cos2*s25 + cos4*s34 + s1
    1094           0 :                         s = sin2*r25 + sin4*r34
    1095           0 :                         zout(2, nout2, j) = r + s
    1096           0 :                         zout(2, nout5, j) = r - s
    1097           0 :                         r = cos4*s25 + cos2*s34 + s1
    1098           0 :                         s = sin4*r25 - sin2*r34
    1099           0 :                         zout(2, nout3, j) = r + s
    1100           0 :                         zout(2, nout4, j) = r - s
    1101             :                      END DO
    1102             :                   END DO
    1103             :                ELSE
    1104         438 :                   nin1 = ia - after
    1105         438 :                   nout1 = ia - atn
    1106         876 :                   DO ib = 1, before
    1107         438 :                      nin1 = nin1 + after
    1108         438 :                      nin2 = nin1 + atb
    1109         438 :                      nin3 = nin2 + atb
    1110         438 :                      nin4 = nin3 + atb
    1111         438 :                      nin5 = nin4 + atb
    1112         438 :                      nout1 = nout1 + atn
    1113         438 :                      nout2 = nout1 + after
    1114         438 :                      nout3 = nout2 + after
    1115         438 :                      nout4 = nout3 + after
    1116         438 :                      nout5 = nout4 + after
    1117        5676 :                      DO j = 1, nfft
    1118        4800 :                         r1 = zin(1, j, nin1)
    1119        4800 :                         s1 = zin(2, j, nin1)
    1120        4800 :                         r = zin(1, j, nin2)
    1121        4800 :                         s = zin(2, j, nin2)
    1122        4800 :                         r2 = (r + s)*rt2i
    1123        4800 :                         s2 = (-r + s)*rt2i
    1124        4800 :                         r3 = zin(2, j, nin3)
    1125        4800 :                         s3 = -zin(1, j, nin3)
    1126        4800 :                         r = zin(1, j, nin4)
    1127        4800 :                         s = zin(2, j, nin4)
    1128        4800 :                         r4 = (s - r)*rt2i
    1129        4800 :                         s4 = -(r + s)*rt2i
    1130        4800 :                         r5 = -zin(1, j, nin5)
    1131        4800 :                         s5 = -zin(2, j, nin5)
    1132        4800 :                         r25 = r2 + r5
    1133        4800 :                         r34 = r3 + r4
    1134        4800 :                         s25 = s2 - s5
    1135        4800 :                         s34 = s3 - s4
    1136        4800 :                         zout(1, nout1, j) = r1 + r25 + r34
    1137        4800 :                         r = cos2*r25 + cos4*r34 + r1
    1138        4800 :                         s = sin2*s25 + sin4*s34
    1139        4800 :                         zout(1, nout2, j) = r - s
    1140        4800 :                         zout(1, nout5, j) = r + s
    1141        4800 :                         r = cos4*r25 + cos2*r34 + r1
    1142        4800 :                         s = sin4*s25 - sin2*s34
    1143        4800 :                         zout(1, nout3, j) = r - s
    1144        4800 :                         zout(1, nout4, j) = r + s
    1145        4800 :                         r25 = r2 - r5
    1146        4800 :                         r34 = r3 - r4
    1147        4800 :                         s25 = s2 + s5
    1148        4800 :                         s34 = s3 + s4
    1149        4800 :                         zout(2, nout1, j) = s1 + s25 + s34
    1150        4800 :                         r = cos2*s25 + cos4*s34 + s1
    1151        4800 :                         s = sin2*r25 + sin4*r34
    1152        4800 :                         zout(2, nout2, j) = r + s
    1153        4800 :                         zout(2, nout5, j) = r - s
    1154        4800 :                         r = cos4*s25 + cos2*s34 + s1
    1155        4800 :                         s = sin4*r25 - sin2*r34
    1156        4800 :                         zout(2, nout3, j) = r + s
    1157        5238 :                         zout(2, nout4, j) = r - s
    1158             :                      END DO
    1159             :                   END DO
    1160             :                END IF
    1161             :             ELSE
    1162      154812 :                ias = ia - 1
    1163      154812 :                itt = ias*before
    1164      154812 :                itrig = itt + 1
    1165      154812 :                cr2 = trig(1, itrig)
    1166      154812 :                ci2 = trig(2, itrig)
    1167      154812 :                itrig = itrig + itt
    1168      154812 :                cr3 = trig(1, itrig)
    1169      154812 :                ci3 = trig(2, itrig)
    1170      154812 :                itrig = itrig + itt
    1171      154812 :                cr4 = trig(1, itrig)
    1172      154812 :                ci4 = trig(2, itrig)
    1173      154812 :                itrig = itrig + itt
    1174      154812 :                cr5 = trig(1, itrig)
    1175      154812 :                ci5 = trig(2, itrig)
    1176      154812 :                nin1 = ia - after
    1177      154812 :                nout1 = ia - atn
    1178      309624 :                DO ib = 1, before
    1179      154812 :                   nin1 = nin1 + after
    1180      154812 :                   nin2 = nin1 + atb
    1181      154812 :                   nin3 = nin2 + atb
    1182      154812 :                   nin4 = nin3 + atb
    1183      154812 :                   nin5 = nin4 + atb
    1184      154812 :                   nout1 = nout1 + atn
    1185      154812 :                   nout2 = nout1 + after
    1186      154812 :                   nout3 = nout2 + after
    1187      154812 :                   nout4 = nout3 + after
    1188      154812 :                   nout5 = nout4 + after
    1189     3135924 :                   DO j = 1, nfft
    1190     2826300 :                      r1 = zin(1, j, nin1)
    1191     2826300 :                      s1 = zin(2, j, nin1)
    1192     2826300 :                      r = zin(1, j, nin2)
    1193     2826300 :                      s = zin(2, j, nin2)
    1194     2826300 :                      r2 = r*cr2 - s*ci2
    1195     2826300 :                      s2 = r*ci2 + s*cr2
    1196     2826300 :                      r = zin(1, j, nin3)
    1197     2826300 :                      s = zin(2, j, nin3)
    1198     2826300 :                      r3 = r*cr3 - s*ci3
    1199     2826300 :                      s3 = r*ci3 + s*cr3
    1200     2826300 :                      r = zin(1, j, nin4)
    1201     2826300 :                      s = zin(2, j, nin4)
    1202     2826300 :                      r4 = r*cr4 - s*ci4
    1203     2826300 :                      s4 = r*ci4 + s*cr4
    1204     2826300 :                      r = zin(1, j, nin5)
    1205     2826300 :                      s = zin(2, j, nin5)
    1206     2826300 :                      r5 = r*cr5 - s*ci5
    1207     2826300 :                      s5 = r*ci5 + s*cr5
    1208     2826300 :                      r25 = r2 + r5
    1209     2826300 :                      r34 = r3 + r4
    1210     2826300 :                      s25 = s2 - s5
    1211     2826300 :                      s34 = s3 - s4
    1212     2826300 :                      zout(1, nout1, j) = r1 + r25 + r34
    1213     2826300 :                      r = cos2*r25 + cos4*r34 + r1
    1214     2826300 :                      s = sin2*s25 + sin4*s34
    1215     2826300 :                      zout(1, nout2, j) = r - s
    1216     2826300 :                      zout(1, nout5, j) = r + s
    1217     2826300 :                      r = cos4*r25 + cos2*r34 + r1
    1218     2826300 :                      s = sin4*s25 - sin2*s34
    1219     2826300 :                      zout(1, nout3, j) = r - s
    1220     2826300 :                      zout(1, nout4, j) = r + s
    1221     2826300 :                      r25 = r2 - r5
    1222     2826300 :                      r34 = r3 - r4
    1223     2826300 :                      s25 = s2 + s5
    1224     2826300 :                      s34 = s3 + s4
    1225     2826300 :                      zout(2, nout1, j) = s1 + s25 + s34
    1226     2826300 :                      r = cos2*s25 + cos4*s34 + s1
    1227     2826300 :                      s = sin2*r25 + sin4*r34
    1228     2826300 :                      zout(2, nout2, j) = r + s
    1229     2826300 :                      zout(2, nout5, j) = r - s
    1230     2826300 :                      r = cos4*s25 + cos2*s34 + s1
    1231     2826300 :                      s = sin4*r25 - sin2*r34
    1232     2826300 :                      zout(2, nout3, j) = r + s
    1233     2981112 :                      zout(2, nout4, j) = r - s
    1234             :                   END DO
    1235             :                END DO
    1236             :             END IF
    1237             :          END DO
    1238             :       ELSE IF (now == 6) THEN
    1239           0 :          bbs = isign*bb
    1240           0 :          ia = 1
    1241           0 :          nin1 = ia - after
    1242           0 :          nout1 = ia - atn
    1243           0 :          DO ib = 1, before
    1244           0 :             nin1 = nin1 + after
    1245           0 :             nin2 = nin1 + atb
    1246           0 :             nin3 = nin2 + atb
    1247           0 :             nin4 = nin3 + atb
    1248           0 :             nin5 = nin4 + atb
    1249           0 :             nin6 = nin5 + atb
    1250           0 :             nout1 = nout1 + atn
    1251           0 :             nout2 = nout1 + after
    1252           0 :             nout3 = nout2 + after
    1253           0 :             nout4 = nout3 + after
    1254           0 :             nout5 = nout4 + after
    1255           0 :             nout6 = nout5 + after
    1256           0 :             DO j = 1, nfft
    1257           0 :                r2 = zin(1, j, nin3)
    1258           0 :                s2 = zin(2, j, nin3)
    1259           0 :                r3 = zin(1, j, nin5)
    1260           0 :                s3 = zin(2, j, nin5)
    1261           0 :                r = r2 + r3
    1262           0 :                s = s2 + s3
    1263           0 :                r1 = zin(1, j, nin1)
    1264           0 :                s1 = zin(2, j, nin1)
    1265           0 :                ur1 = r + r1
    1266           0 :                ui1 = s + s1
    1267           0 :                r1 = r1 - 0.5_dp*r
    1268           0 :                s1 = s1 - 0.5_dp*s
    1269           0 :                r = r2 - r3
    1270           0 :                s = s2 - s3
    1271           0 :                ur2 = r1 - s*bbs
    1272           0 :                ui2 = s1 + r*bbs
    1273           0 :                ur3 = r1 + s*bbs
    1274           0 :                ui3 = s1 - r*bbs
    1275             : 
    1276           0 :                r2 = zin(1, j, nin6)
    1277           0 :                s2 = zin(2, j, nin6)
    1278           0 :                r3 = zin(1, j, nin2)
    1279           0 :                s3 = zin(2, j, nin2)
    1280           0 :                r = r2 + r3
    1281           0 :                s = s2 + s3
    1282           0 :                r1 = zin(1, j, nin4)
    1283           0 :                s1 = zin(2, j, nin4)
    1284           0 :                vr1 = r + r1
    1285           0 :                vi1 = s + s1
    1286           0 :                r1 = r1 - 0.5_dp*r
    1287           0 :                s1 = s1 - 0.5_dp*s
    1288           0 :                r = r2 - r3
    1289           0 :                s = s2 - s3
    1290           0 :                vr2 = r1 - s*bbs
    1291           0 :                vi2 = s1 + r*bbs
    1292           0 :                vr3 = r1 + s*bbs
    1293           0 :                vi3 = s1 - r*bbs
    1294             : 
    1295           0 :                zout(1, nout1, j) = ur1 + vr1
    1296           0 :                zout(2, nout1, j) = ui1 + vi1
    1297           0 :                zout(1, nout5, j) = ur2 + vr2
    1298           0 :                zout(2, nout5, j) = ui2 + vi2
    1299           0 :                zout(1, nout3, j) = ur3 + vr3
    1300           0 :                zout(2, nout3, j) = ui3 + vi3
    1301           0 :                zout(1, nout4, j) = ur1 - vr1
    1302           0 :                zout(2, nout4, j) = ui1 - vi1
    1303           0 :                zout(1, nout2, j) = ur2 - vr2
    1304           0 :                zout(2, nout2, j) = ui2 - vi2
    1305           0 :                zout(1, nout6, j) = ur3 - vr3
    1306           0 :                zout(2, nout6, j) = ui3 - vi3
    1307             :             END DO
    1308             :          END DO
    1309             :       ELSE
    1310           0 :          CPABORT('Error fftrot')
    1311             :       END IF
    1312             : 
    1313             : !-----------------------------------------------------------------------------!
    1314             : 
    1315      311819 :    END SUBROUTINE fftrot
    1316             : 
    1317             : !-----------------------------------------------------------------------------!
    1318             : !-----------------------------------------------------------------------------!
    1319             : !  Copyright (C) Stefan Goedecker, Lausanne, Switzerland, August 1, 1991
    1320             : !  Copyright (C) Stefan Goedecker, Cornell University, Ithaca, USA, 1994
    1321             : !  Copyright (C) Stefan Goedecker, MPI Stuttgart, Germany, 1999
    1322             : !  This file is distributed under the terms of the
    1323             : !  GNU General Public License version 2 (or later),
    1324             : !  see http://www.gnu.org/copyleft/gpl.txt .
    1325             : !-----------------------------------------------------------------------------!
    1326             : !  S. Goedecker: Rotating a three-dimensional array in optimal
    1327             : !  positions for vector processing: Case study for a three-dimensional Fast
    1328             : !  Fourier Transform, Comp. Phys. Commun. 76, 294 (1993)
    1329             : ! **************************************************************************************************
    1330             : !> \brief ...
    1331             : !> \param mm ...
    1332             : !> \param nfft ...
    1333             : !> \param m ...
    1334             : !> \param nn ...
    1335             : !> \param n ...
    1336             : !> \param zin ...
    1337             : !> \param zout ...
    1338             : !> \param trig ...
    1339             : !> \param now ...
    1340             : !> \param after ...
    1341             : !> \param before ...
    1342             : !> \param isign ...
    1343             : ! **************************************************************************************************
    1344      479475 :    SUBROUTINE fftpre(mm, nfft, m, nn, n, zin, zout, trig, now, after, before, isign)
    1345             : 
    1346             :       INTEGER, INTENT(IN)                                :: mm, nfft, m, nn, n
    1347             :       REAL(dp), DIMENSION(2, m, mm), INTENT(IN)          :: zin
    1348             :       REAL(dp), DIMENSION(2, nn, n), INTENT(INOUT)       :: zout
    1349             :       REAL(dp), DIMENSION(2, ctrig_length), INTENT(IN)   :: trig
    1350             :       INTEGER, INTENT(IN)                                :: now, after, before, isign
    1351             : 
    1352             :       REAL(dp), PARAMETER :: bb = 0.8660254037844387_dp, cos2 = 0.3090169943749474_dp, &
    1353             :          cos4 = -0.8090169943749474_dp, rt2i = 0.7071067811865475_dp, &
    1354             :          sin2p = 0.9510565162951536_dp, sin4p = 0.5877852522924731_dp
    1355             : 
    1356             :       INTEGER                                            :: atb, atn, ia, ias, ib, itrig, itt, j, &
    1357             :                                                             nin1, nin2, nin3, nin4, nin5, nin6, &
    1358             :                                                             nin7, nin8, nout1, nout2, nout3, &
    1359             :                                                             nout4, nout5, nout6, nout7, nout8
    1360             :       REAL(dp) :: am, ap, bbs, bm, bp, ci2, ci3, ci4, ci5, cm, cp, cr2, cr3, cr4, cr5, dbl, dm, r, &
    1361             :          r1, r2, r25, r3, r34, r4, r5, r6, r7, r8, s, s1, s2, s25, s3, s34, s4, s5, s6, s7, s8, &
    1362             :          sin2, sin4, ui1, ui2, ui3, ur1, ur2, ur3, vi1, vi2, vi3, vr1, vr2, vr3
    1363             : 
    1364             : ! sqrt(0.5)
    1365             : ! sqrt(3)/2
    1366             : ! cos(2*pi/5)
    1367             : !  cos(4*pi/5)
    1368             : ! sin(2*pi/5)
    1369             : ! sin(4*pi/5)
    1370             : !-----------------------------------------------------------------------------!
    1371             : 
    1372      479475 :       atn = after*now
    1373      479475 :       atb = after*before
    1374             : 
    1375             :       IF (now == 4) THEN
    1376       61284 :          IF (isign == 1) THEN
    1377       31374 :             ia = 1
    1378       31374 :             nin1 = ia - after
    1379       31374 :             nout1 = ia - atn
    1380      345684 :             DO ib = 1, before
    1381      314310 :                nin1 = nin1 + after
    1382      314310 :                nin2 = nin1 + atb
    1383      314310 :                nin3 = nin2 + atb
    1384      314310 :                nin4 = nin3 + atb
    1385      314310 :                nout1 = nout1 + atn
    1386      314310 :                nout2 = nout1 + after
    1387      314310 :                nout3 = nout2 + after
    1388      314310 :                nout4 = nout3 + after
    1389     3688260 :                DO j = 1, nfft
    1390     3342576 :                   r1 = zin(1, nin1, j)
    1391     3342576 :                   s1 = zin(2, nin1, j)
    1392     3342576 :                   r2 = zin(1, nin2, j)
    1393     3342576 :                   s2 = zin(2, nin2, j)
    1394     3342576 :                   r3 = zin(1, nin3, j)
    1395     3342576 :                   s3 = zin(2, nin3, j)
    1396     3342576 :                   r4 = zin(1, nin4, j)
    1397     3342576 :                   s4 = zin(2, nin4, j)
    1398     3342576 :                   r = r1 + r3
    1399     3342576 :                   s = r2 + r4
    1400     3342576 :                   zout(1, j, nout1) = r + s
    1401     3342576 :                   zout(1, j, nout3) = r - s
    1402     3342576 :                   r = r1 - r3
    1403     3342576 :                   s = s2 - s4
    1404     3342576 :                   zout(1, j, nout2) = r - s
    1405     3342576 :                   zout(1, j, nout4) = r + s
    1406     3342576 :                   r = s1 + s3
    1407     3342576 :                   s = s2 + s4
    1408     3342576 :                   zout(2, j, nout1) = r + s
    1409     3342576 :                   zout(2, j, nout3) = r - s
    1410     3342576 :                   r = s1 - s3
    1411     3342576 :                   s = r2 - r4
    1412     3342576 :                   zout(2, j, nout2) = r + s
    1413     3656886 :                   zout(2, j, nout4) = r - s
    1414             :                END DO
    1415             :             END DO
    1416       31374 :             DO ia = 2, after
    1417           0 :                ias = ia - 1
    1418       31374 :                IF (2*ias == after) THEN
    1419           0 :                   nin1 = ia - after
    1420           0 :                   nout1 = ia - atn
    1421           0 :                   DO ib = 1, before
    1422           0 :                      nin1 = nin1 + after
    1423           0 :                      nin2 = nin1 + atb
    1424           0 :                      nin3 = nin2 + atb
    1425           0 :                      nin4 = nin3 + atb
    1426           0 :                      nout1 = nout1 + atn
    1427           0 :                      nout2 = nout1 + after
    1428           0 :                      nout3 = nout2 + after
    1429           0 :                      nout4 = nout3 + after
    1430           0 :                      DO j = 1, nfft
    1431           0 :                         r1 = zin(1, nin1, j)
    1432           0 :                         s1 = zin(2, nin1, j)
    1433           0 :                         r = zin(1, nin2, j)
    1434           0 :                         s = zin(2, nin2, j)
    1435           0 :                         r2 = (r - s)*rt2i
    1436           0 :                         s2 = (r + s)*rt2i
    1437           0 :                         r3 = -zin(2, nin3, j)
    1438           0 :                         s3 = zin(1, nin3, j)
    1439           0 :                         r = zin(1, nin4, j)
    1440           0 :                         s = zin(2, nin4, j)
    1441           0 :                         r4 = -(r + s)*rt2i
    1442           0 :                         s4 = (r - s)*rt2i
    1443           0 :                         r = r1 + r3
    1444           0 :                         s = r2 + r4
    1445           0 :                         zout(1, j, nout1) = r + s
    1446           0 :                         zout(1, j, nout3) = r - s
    1447           0 :                         r = r1 - r3
    1448           0 :                         s = s2 - s4
    1449           0 :                         zout(1, j, nout2) = r - s
    1450           0 :                         zout(1, j, nout4) = r + s
    1451           0 :                         r = s1 + s3
    1452           0 :                         s = s2 + s4
    1453           0 :                         zout(2, j, nout1) = r + s
    1454           0 :                         zout(2, j, nout3) = r - s
    1455           0 :                         r = s1 - s3
    1456           0 :                         s = r2 - r4
    1457           0 :                         zout(2, j, nout2) = r + s
    1458           0 :                         zout(2, j, nout4) = r - s
    1459             :                      END DO
    1460             :                   END DO
    1461             :                ELSE
    1462           0 :                   itt = ias*before
    1463           0 :                   itrig = itt + 1
    1464           0 :                   cr2 = trig(1, itrig)
    1465           0 :                   ci2 = trig(2, itrig)
    1466           0 :                   itrig = itrig + itt
    1467           0 :                   cr3 = trig(1, itrig)
    1468           0 :                   ci3 = trig(2, itrig)
    1469           0 :                   itrig = itrig + itt
    1470           0 :                   cr4 = trig(1, itrig)
    1471           0 :                   ci4 = trig(2, itrig)
    1472           0 :                   nin1 = ia - after
    1473           0 :                   nout1 = ia - atn
    1474           0 :                   DO ib = 1, before
    1475           0 :                      nin1 = nin1 + after
    1476           0 :                      nin2 = nin1 + atb
    1477           0 :                      nin3 = nin2 + atb
    1478           0 :                      nin4 = nin3 + atb
    1479           0 :                      nout1 = nout1 + atn
    1480           0 :                      nout2 = nout1 + after
    1481           0 :                      nout3 = nout2 + after
    1482           0 :                      nout4 = nout3 + after
    1483           0 :                      DO j = 1, nfft
    1484           0 :                         r1 = zin(1, nin1, j)
    1485           0 :                         s1 = zin(2, nin1, j)
    1486           0 :                         r = zin(1, nin2, j)
    1487           0 :                         s = zin(2, nin2, j)
    1488           0 :                         r2 = r*cr2 - s*ci2
    1489           0 :                         s2 = r*ci2 + s*cr2
    1490           0 :                         r = zin(1, nin3, j)
    1491           0 :                         s = zin(2, nin3, j)
    1492           0 :                         r3 = r*cr3 - s*ci3
    1493           0 :                         s3 = r*ci3 + s*cr3
    1494           0 :                         r = zin(1, nin4, j)
    1495           0 :                         s = zin(2, nin4, j)
    1496           0 :                         r4 = r*cr4 - s*ci4
    1497           0 :                         s4 = r*ci4 + s*cr4
    1498           0 :                         r = r1 + r3
    1499           0 :                         s = r2 + r4
    1500           0 :                         zout(1, j, nout1) = r + s
    1501           0 :                         zout(1, j, nout3) = r - s
    1502           0 :                         r = r1 - r3
    1503           0 :                         s = s2 - s4
    1504           0 :                         zout(1, j, nout2) = r - s
    1505           0 :                         zout(1, j, nout4) = r + s
    1506           0 :                         r = s1 + s3
    1507           0 :                         s = s2 + s4
    1508           0 :                         zout(2, j, nout1) = r + s
    1509           0 :                         zout(2, j, nout3) = r - s
    1510           0 :                         r = s1 - s3
    1511           0 :                         s = r2 - r4
    1512           0 :                         zout(2, j, nout2) = r + s
    1513           0 :                         zout(2, j, nout4) = r - s
    1514             :                      END DO
    1515             :                   END DO
    1516             :                END IF
    1517             :             END DO
    1518             :          ELSE
    1519       29910 :             ia = 1
    1520       29910 :             nin1 = ia - after
    1521       29910 :             nout1 = ia - atn
    1522      339756 :             DO ib = 1, before
    1523      309846 :                nin1 = nin1 + after
    1524      309846 :                nin2 = nin1 + atb
    1525      309846 :                nin3 = nin2 + atb
    1526      309846 :                nin4 = nin3 + atb
    1527      309846 :                nout1 = nout1 + atn
    1528      309846 :                nout2 = nout1 + after
    1529      309846 :                nout3 = nout2 + after
    1530      309846 :                nout4 = nout3 + after
    1531     3520908 :                DO j = 1, nfft
    1532     3181152 :                   r1 = zin(1, nin1, j)
    1533     3181152 :                   s1 = zin(2, nin1, j)
    1534     3181152 :                   r2 = zin(1, nin2, j)
    1535     3181152 :                   s2 = zin(2, nin2, j)
    1536     3181152 :                   r3 = zin(1, nin3, j)
    1537     3181152 :                   s3 = zin(2, nin3, j)
    1538     3181152 :                   r4 = zin(1, nin4, j)
    1539     3181152 :                   s4 = zin(2, nin4, j)
    1540     3181152 :                   r = r1 + r3
    1541     3181152 :                   s = r2 + r4
    1542     3181152 :                   zout(1, j, nout1) = r + s
    1543     3181152 :                   zout(1, j, nout3) = r - s
    1544     3181152 :                   r = r1 - r3
    1545     3181152 :                   s = s2 - s4
    1546     3181152 :                   zout(1, j, nout2) = r + s
    1547     3181152 :                   zout(1, j, nout4) = r - s
    1548     3181152 :                   r = s1 + s3
    1549     3181152 :                   s = s2 + s4
    1550     3181152 :                   zout(2, j, nout1) = r + s
    1551     3181152 :                   zout(2, j, nout3) = r - s
    1552     3181152 :                   r = s1 - s3
    1553     3181152 :                   s = r2 - r4
    1554     3181152 :                   zout(2, j, nout2) = r - s
    1555     3490998 :                   zout(2, j, nout4) = r + s
    1556             :                END DO
    1557             :             END DO
    1558       29910 :             DO ia = 2, after
    1559           0 :                ias = ia - 1
    1560       29910 :                IF (2*ias == after) THEN
    1561           0 :                   nin1 = ia - after
    1562           0 :                   nout1 = ia - atn
    1563           0 :                   DO ib = 1, before
    1564           0 :                      nin1 = nin1 + after
    1565           0 :                      nin2 = nin1 + atb
    1566           0 :                      nin3 = nin2 + atb
    1567           0 :                      nin4 = nin3 + atb
    1568           0 :                      nout1 = nout1 + atn
    1569           0 :                      nout2 = nout1 + after
    1570           0 :                      nout3 = nout2 + after
    1571           0 :                      nout4 = nout3 + after
    1572           0 :                      DO j = 1, nfft
    1573           0 :                         r1 = zin(1, nin1, j)
    1574           0 :                         s1 = zin(2, nin1, j)
    1575           0 :                         r = zin(1, nin2, j)
    1576           0 :                         s = zin(2, nin2, j)
    1577           0 :                         r2 = (r + s)*rt2i
    1578           0 :                         s2 = (s - r)*rt2i
    1579           0 :                         r3 = zin(2, nin3, j)
    1580           0 :                         s3 = -zin(1, nin3, j)
    1581           0 :                         r = zin(1, nin4, j)
    1582           0 :                         s = zin(2, nin4, j)
    1583           0 :                         r4 = (s - r)*rt2i
    1584           0 :                         s4 = -(r + s)*rt2i
    1585           0 :                         r = r1 + r3
    1586           0 :                         s = r2 + r4
    1587           0 :                         zout(1, j, nout1) = r + s
    1588           0 :                         zout(1, j, nout3) = r - s
    1589           0 :                         r = r1 - r3
    1590           0 :                         s = s2 - s4
    1591           0 :                         zout(1, j, nout2) = r + s
    1592           0 :                         zout(1, j, nout4) = r - s
    1593           0 :                         r = s1 + s3
    1594           0 :                         s = s2 + s4
    1595           0 :                         zout(2, j, nout1) = r + s
    1596           0 :                         zout(2, j, nout3) = r - s
    1597           0 :                         r = s1 - s3
    1598           0 :                         s = r2 - r4
    1599           0 :                         zout(2, j, nout2) = r - s
    1600           0 :                         zout(2, j, nout4) = r + s
    1601             :                      END DO
    1602             :                   END DO
    1603             :                ELSE
    1604           0 :                   itt = ias*before
    1605           0 :                   itrig = itt + 1
    1606           0 :                   cr2 = trig(1, itrig)
    1607           0 :                   ci2 = trig(2, itrig)
    1608           0 :                   itrig = itrig + itt
    1609           0 :                   cr3 = trig(1, itrig)
    1610           0 :                   ci3 = trig(2, itrig)
    1611           0 :                   itrig = itrig + itt
    1612           0 :                   cr4 = trig(1, itrig)
    1613           0 :                   ci4 = trig(2, itrig)
    1614           0 :                   nin1 = ia - after
    1615           0 :                   nout1 = ia - atn
    1616           0 :                   DO ib = 1, before
    1617           0 :                      nin1 = nin1 + after
    1618           0 :                      nin2 = nin1 + atb
    1619           0 :                      nin3 = nin2 + atb
    1620           0 :                      nin4 = nin3 + atb
    1621           0 :                      nout1 = nout1 + atn
    1622           0 :                      nout2 = nout1 + after
    1623           0 :                      nout3 = nout2 + after
    1624           0 :                      nout4 = nout3 + after
    1625           0 :                      DO j = 1, nfft
    1626           0 :                         r1 = zin(1, nin1, j)
    1627           0 :                         s1 = zin(2, nin1, j)
    1628           0 :                         r = zin(1, nin2, j)
    1629           0 :                         s = zin(2, nin2, j)
    1630           0 :                         r2 = r*cr2 - s*ci2
    1631           0 :                         s2 = r*ci2 + s*cr2
    1632           0 :                         r = zin(1, nin3, j)
    1633           0 :                         s = zin(2, nin3, j)
    1634           0 :                         r3 = r*cr3 - s*ci3
    1635           0 :                         s3 = r*ci3 + s*cr3
    1636           0 :                         r = zin(1, nin4, j)
    1637           0 :                         s = zin(2, nin4, j)
    1638           0 :                         r4 = r*cr4 - s*ci4
    1639           0 :                         s4 = r*ci4 + s*cr4
    1640           0 :                         r = r1 + r3
    1641           0 :                         s = r2 + r4
    1642           0 :                         zout(1, j, nout1) = r + s
    1643           0 :                         zout(1, j, nout3) = r - s
    1644           0 :                         r = r1 - r3
    1645           0 :                         s = s2 - s4
    1646           0 :                         zout(1, j, nout2) = r + s
    1647           0 :                         zout(1, j, nout4) = r - s
    1648           0 :                         r = s1 + s3
    1649           0 :                         s = s2 + s4
    1650           0 :                         zout(2, j, nout1) = r + s
    1651           0 :                         zout(2, j, nout3) = r - s
    1652           0 :                         r = s1 - s3
    1653           0 :                         s = r2 - r4
    1654           0 :                         zout(2, j, nout2) = r - s
    1655           0 :                         zout(2, j, nout4) = r + s
    1656             :                      END DO
    1657             :                   END DO
    1658             :                END IF
    1659             :             END DO
    1660             :          END IF
    1661             :       ELSE IF (now == 8) THEN
    1662       97092 :          IF (isign == -1) THEN
    1663       22296 :             ia = 1
    1664       22296 :             nin1 = ia - after
    1665       22296 :             nout1 = ia - atn
    1666      288336 :             DO ib = 1, before
    1667      266040 :                nin1 = nin1 + after
    1668      266040 :                nin2 = nin1 + atb
    1669      266040 :                nin3 = nin2 + atb
    1670      266040 :                nin4 = nin3 + atb
    1671      266040 :                nin5 = nin4 + atb
    1672      266040 :                nin6 = nin5 + atb
    1673      266040 :                nin7 = nin6 + atb
    1674      266040 :                nin8 = nin7 + atb
    1675      266040 :                nout1 = nout1 + atn
    1676      266040 :                nout2 = nout1 + after
    1677      266040 :                nout3 = nout2 + after
    1678      266040 :                nout4 = nout3 + after
    1679      266040 :                nout5 = nout4 + after
    1680      266040 :                nout6 = nout5 + after
    1681      266040 :                nout7 = nout6 + after
    1682      266040 :                nout8 = nout7 + after
    1683     1625808 :                DO j = 1, nfft
    1684     1337472 :                   r1 = zin(1, nin1, j)
    1685     1337472 :                   s1 = zin(2, nin1, j)
    1686     1337472 :                   r2 = zin(1, nin2, j)
    1687     1337472 :                   s2 = zin(2, nin2, j)
    1688     1337472 :                   r3 = zin(1, nin3, j)
    1689     1337472 :                   s3 = zin(2, nin3, j)
    1690     1337472 :                   r4 = zin(1, nin4, j)
    1691     1337472 :                   s4 = zin(2, nin4, j)
    1692     1337472 :                   r5 = zin(1, nin5, j)
    1693     1337472 :                   s5 = zin(2, nin5, j)
    1694     1337472 :                   r6 = zin(1, nin6, j)
    1695     1337472 :                   s6 = zin(2, nin6, j)
    1696     1337472 :                   r7 = zin(1, nin7, j)
    1697     1337472 :                   s7 = zin(2, nin7, j)
    1698     1337472 :                   r8 = zin(1, nin8, j)
    1699     1337472 :                   s8 = zin(2, nin8, j)
    1700     1337472 :                   r = r1 + r5
    1701     1337472 :                   s = r3 + r7
    1702     1337472 :                   ap = r + s
    1703     1337472 :                   am = r - s
    1704     1337472 :                   r = r2 + r6
    1705     1337472 :                   s = r4 + r8
    1706     1337472 :                   bp = r + s
    1707     1337472 :                   bm = r - s
    1708     1337472 :                   r = s1 + s5
    1709     1337472 :                   s = s3 + s7
    1710     1337472 :                   cp = r + s
    1711     1337472 :                   cm = r - s
    1712     1337472 :                   r = s2 + s6
    1713     1337472 :                   s = s4 + s8
    1714     1337472 :                   dbl = r + s
    1715     1337472 :                   dm = r - s
    1716     1337472 :                   zout(1, j, nout1) = ap + bp
    1717     1337472 :                   zout(2, j, nout1) = cp + dbl
    1718     1337472 :                   zout(1, j, nout5) = ap - bp
    1719     1337472 :                   zout(2, j, nout5) = cp - dbl
    1720     1337472 :                   zout(1, j, nout3) = am + dm
    1721     1337472 :                   zout(2, j, nout3) = cm - bm
    1722     1337472 :                   zout(1, j, nout7) = am - dm
    1723     1337472 :                   zout(2, j, nout7) = cm + bm
    1724     1337472 :                   r = r1 - r5
    1725     1337472 :                   s = s3 - s7
    1726     1337472 :                   ap = r + s
    1727     1337472 :                   am = r - s
    1728     1337472 :                   r = s1 - s5
    1729     1337472 :                   s = r3 - r7
    1730     1337472 :                   bp = r + s
    1731     1337472 :                   bm = r - s
    1732     1337472 :                   r = s4 - s8
    1733     1337472 :                   s = r2 - r6
    1734     1337472 :                   cp = r + s
    1735     1337472 :                   cm = r - s
    1736     1337472 :                   r = s2 - s6
    1737     1337472 :                   s = r4 - r8
    1738     1337472 :                   dbl = r + s
    1739     1337472 :                   dm = r - s
    1740     1337472 :                   r = (cp + dm)*rt2i
    1741     1337472 :                   s = (-cp + dm)*rt2i
    1742     1337472 :                   cp = (cm + dbl)*rt2i
    1743     1337472 :                   dbl = (cm - dbl)*rt2i
    1744     1337472 :                   zout(1, j, nout2) = ap + r
    1745     1337472 :                   zout(2, j, nout2) = bm + s
    1746     1337472 :                   zout(1, j, nout6) = ap - r
    1747     1337472 :                   zout(2, j, nout6) = bm - s
    1748     1337472 :                   zout(1, j, nout4) = am + cp
    1749     1337472 :                   zout(2, j, nout4) = bp + dbl
    1750     1337472 :                   zout(1, j, nout8) = am - cp
    1751     1603512 :                   zout(2, j, nout8) = bp - dbl
    1752             :                END DO
    1753             :             END DO
    1754             :          ELSE
    1755       74796 :             ia = 1
    1756       74796 :             nin1 = ia - after
    1757       74796 :             nout1 = ia - atn
    1758      550836 :             DO ib = 1, before
    1759      476040 :                nin1 = nin1 + after
    1760      476040 :                nin2 = nin1 + atb
    1761      476040 :                nin3 = nin2 + atb
    1762      476040 :                nin4 = nin3 + atb
    1763      476040 :                nin5 = nin4 + atb
    1764      476040 :                nin6 = nin5 + atb
    1765      476040 :                nin7 = nin6 + atb
    1766      476040 :                nin8 = nin7 + atb
    1767      476040 :                nout1 = nout1 + atn
    1768      476040 :                nout2 = nout1 + after
    1769      476040 :                nout3 = nout2 + after
    1770      476040 :                nout4 = nout3 + after
    1771      476040 :                nout5 = nout4 + after
    1772      476040 :                nout6 = nout5 + after
    1773      476040 :                nout7 = nout6 + after
    1774      476040 :                nout8 = nout7 + after
    1775     4960308 :                DO j = 1, nfft
    1776     4409472 :                   r1 = zin(1, nin1, j)
    1777     4409472 :                   s1 = zin(2, nin1, j)
    1778     4409472 :                   r2 = zin(1, nin2, j)
    1779     4409472 :                   s2 = zin(2, nin2, j)
    1780     4409472 :                   r3 = zin(1, nin3, j)
    1781     4409472 :                   s3 = zin(2, nin3, j)
    1782     4409472 :                   r4 = zin(1, nin4, j)
    1783     4409472 :                   s4 = zin(2, nin4, j)
    1784     4409472 :                   r5 = zin(1, nin5, j)
    1785     4409472 :                   s5 = zin(2, nin5, j)
    1786     4409472 :                   r6 = zin(1, nin6, j)
    1787     4409472 :                   s6 = zin(2, nin6, j)
    1788     4409472 :                   r7 = zin(1, nin7, j)
    1789     4409472 :                   s7 = zin(2, nin7, j)
    1790     4409472 :                   r8 = zin(1, nin8, j)
    1791     4409472 :                   s8 = zin(2, nin8, j)
    1792     4409472 :                   r = r1 + r5
    1793     4409472 :                   s = r3 + r7
    1794     4409472 :                   ap = r + s
    1795     4409472 :                   am = r - s
    1796     4409472 :                   r = r2 + r6
    1797     4409472 :                   s = r4 + r8
    1798     4409472 :                   bp = r + s
    1799     4409472 :                   bm = r - s
    1800     4409472 :                   r = s1 + s5
    1801     4409472 :                   s = s3 + s7
    1802     4409472 :                   cp = r + s
    1803     4409472 :                   cm = r - s
    1804     4409472 :                   r = s2 + s6
    1805     4409472 :                   s = s4 + s8
    1806     4409472 :                   dbl = r + s
    1807     4409472 :                   dm = r - s
    1808     4409472 :                   zout(1, j, nout1) = ap + bp
    1809     4409472 :                   zout(2, j, nout1) = cp + dbl
    1810     4409472 :                   zout(1, j, nout5) = ap - bp
    1811     4409472 :                   zout(2, j, nout5) = cp - dbl
    1812     4409472 :                   zout(1, j, nout3) = am - dm
    1813     4409472 :                   zout(2, j, nout3) = cm + bm
    1814     4409472 :                   zout(1, j, nout7) = am + dm
    1815     4409472 :                   zout(2, j, nout7) = cm - bm
    1816     4409472 :                   r = r1 - r5
    1817     4409472 :                   s = -s3 + s7
    1818     4409472 :                   ap = r + s
    1819     4409472 :                   am = r - s
    1820     4409472 :                   r = s1 - s5
    1821     4409472 :                   s = r7 - r3
    1822     4409472 :                   bp = r + s
    1823     4409472 :                   bm = r - s
    1824     4409472 :                   r = -s4 + s8
    1825     4409472 :                   s = r2 - r6
    1826     4409472 :                   cp = r + s
    1827     4409472 :                   cm = r - s
    1828     4409472 :                   r = -s2 + s6
    1829     4409472 :                   s = r4 - r8
    1830     4409472 :                   dbl = r + s
    1831     4409472 :                   dm = r - s
    1832     4409472 :                   r = (cp + dm)*rt2i
    1833     4409472 :                   s = (cp - dm)*rt2i
    1834     4409472 :                   cp = (cm + dbl)*rt2i
    1835     4409472 :                   dbl = (-cm + dbl)*rt2i
    1836     4409472 :                   zout(1, j, nout2) = ap + r
    1837     4409472 :                   zout(2, j, nout2) = bm + s
    1838     4409472 :                   zout(1, j, nout6) = ap - r
    1839     4409472 :                   zout(2, j, nout6) = bm - s
    1840     4409472 :                   zout(1, j, nout4) = am + cp
    1841     4409472 :                   zout(2, j, nout4) = bp + dbl
    1842     4409472 :                   zout(1, j, nout8) = am - cp
    1843     4885512 :                   zout(2, j, nout8) = bp - dbl
    1844             :                END DO
    1845             :             END DO
    1846             :          END IF
    1847             :       ELSE IF (now == 3) THEN
    1848        4482 :          ia = 1
    1849        4482 :          nin1 = ia - after
    1850        4482 :          nout1 = ia - atn
    1851        4482 :          bbs = isign*bb
    1852       30600 :          DO ib = 1, before
    1853       26118 :             nin1 = nin1 + after
    1854       26118 :             nin2 = nin1 + atb
    1855       26118 :             nin3 = nin2 + atb
    1856       26118 :             nout1 = nout1 + atn
    1857       26118 :             nout2 = nout1 + after
    1858       26118 :             nout3 = nout2 + after
    1859      633483 :             DO j = 1, nfft
    1860      602883 :                r1 = zin(1, nin1, j)
    1861      602883 :                s1 = zin(2, nin1, j)
    1862      602883 :                r2 = zin(1, nin2, j)
    1863      602883 :                s2 = zin(2, nin2, j)
    1864      602883 :                r3 = zin(1, nin3, j)
    1865      602883 :                s3 = zin(2, nin3, j)
    1866      602883 :                r = r2 + r3
    1867      602883 :                s = s2 + s3
    1868      602883 :                zout(1, j, nout1) = r + r1
    1869      602883 :                zout(2, j, nout1) = s + s1
    1870      602883 :                r1 = r1 - 0.5_dp*r
    1871      602883 :                s1 = s1 - 0.5_dp*s
    1872      602883 :                r2 = bbs*(r2 - r3)
    1873      602883 :                s2 = bbs*(s2 - s3)
    1874      602883 :                zout(1, j, nout2) = r1 - s2
    1875      602883 :                zout(2, j, nout2) = s1 + r2
    1876      602883 :                zout(1, j, nout3) = r1 + s2
    1877      629001 :                zout(2, j, nout3) = s1 - r2
    1878             :             END DO
    1879             :          END DO
    1880        4482 :          DO ia = 2, after
    1881           0 :             ias = ia - 1
    1882        4482 :             IF (4*ias == 3*after) THEN
    1883           0 :                IF (isign == 1) THEN
    1884           0 :                   nin1 = ia - after
    1885           0 :                   nout1 = ia - atn
    1886           0 :                   DO ib = 1, before
    1887           0 :                      nin1 = nin1 + after
    1888           0 :                      nin2 = nin1 + atb
    1889           0 :                      nin3 = nin2 + atb
    1890           0 :                      nout1 = nout1 + atn
    1891           0 :                      nout2 = nout1 + after
    1892           0 :                      nout3 = nout2 + after
    1893           0 :                      DO j = 1, nfft
    1894           0 :                         r1 = zin(1, nin1, j)
    1895           0 :                         s1 = zin(2, nin1, j)
    1896           0 :                         r2 = -zin(2, nin2, j)
    1897           0 :                         s2 = zin(1, nin2, j)
    1898           0 :                         r3 = -zin(1, nin3, j)
    1899           0 :                         s3 = -zin(2, nin3, j)
    1900           0 :                         r = r2 + r3
    1901           0 :                         s = s2 + s3
    1902           0 :                         zout(1, j, nout1) = r + r1
    1903           0 :                         zout(2, j, nout1) = s + s1
    1904           0 :                         r1 = r1 - 0.5_dp*r
    1905           0 :                         s1 = s1 - 0.5_dp*s
    1906           0 :                         r2 = bbs*(r2 - r3)
    1907           0 :                         s2 = bbs*(s2 - s3)
    1908           0 :                         zout(1, j, nout2) = r1 - s2
    1909           0 :                         zout(2, j, nout2) = s1 + r2
    1910           0 :                         zout(1, j, nout3) = r1 + s2
    1911           0 :                         zout(2, j, nout3) = s1 - r2
    1912             :                      END DO
    1913             :                   END DO
    1914             :                ELSE
    1915           0 :                   nin1 = ia - after
    1916           0 :                   nout1 = ia - atn
    1917           0 :                   DO ib = 1, before
    1918           0 :                      nin1 = nin1 + after
    1919           0 :                      nin2 = nin1 + atb
    1920           0 :                      nin3 = nin2 + atb
    1921           0 :                      nout1 = nout1 + atn
    1922           0 :                      nout2 = nout1 + after
    1923           0 :                      nout3 = nout2 + after
    1924           0 :                      DO j = 1, nfft
    1925           0 :                         r1 = zin(1, nin1, j)
    1926           0 :                         s1 = zin(2, nin1, j)
    1927           0 :                         r2 = zin(2, nin2, j)
    1928           0 :                         s2 = -zin(1, nin2, j)
    1929           0 :                         r3 = -zin(1, nin3, j)
    1930           0 :                         s3 = -zin(2, nin3, j)
    1931           0 :                         r = r2 + r3
    1932           0 :                         s = s2 + s3
    1933           0 :                         zout(1, j, nout1) = r + r1
    1934           0 :                         zout(2, j, nout1) = s + s1
    1935           0 :                         r1 = r1 - 0.5_dp*r
    1936           0 :                         s1 = s1 - 0.5_dp*s
    1937           0 :                         r2 = bbs*(r2 - r3)
    1938           0 :                         s2 = bbs*(s2 - s3)
    1939           0 :                         zout(1, j, nout2) = r1 - s2
    1940           0 :                         zout(2, j, nout2) = s1 + r2
    1941           0 :                         zout(1, j, nout3) = r1 + s2
    1942           0 :                         zout(2, j, nout3) = s1 - r2
    1943             :                      END DO
    1944             :                   END DO
    1945             :                END IF
    1946           0 :             ELSE IF (8*ias == 3*after) THEN
    1947           0 :                IF (isign == 1) THEN
    1948           0 :                   nin1 = ia - after
    1949           0 :                   nout1 = ia - atn
    1950           0 :                   DO ib = 1, before
    1951           0 :                      nin1 = nin1 + after
    1952           0 :                      nin2 = nin1 + atb
    1953           0 :                      nin3 = nin2 + atb
    1954           0 :                      nout1 = nout1 + atn
    1955           0 :                      nout2 = nout1 + after
    1956           0 :                      nout3 = nout2 + after
    1957           0 :                      DO j = 1, nfft
    1958           0 :                         r1 = zin(1, nin1, j)
    1959           0 :                         s1 = zin(2, nin1, j)
    1960           0 :                         r = zin(1, nin2, j)
    1961           0 :                         s = zin(2, nin2, j)
    1962           0 :                         r2 = (r - s)*rt2i
    1963           0 :                         s2 = (r + s)*rt2i
    1964           0 :                         r3 = -zin(2, nin3, j)
    1965           0 :                         s3 = zin(1, nin3, j)
    1966           0 :                         r = r2 + r3
    1967           0 :                         s = s2 + s3
    1968           0 :                         zout(1, j, nout1) = r + r1
    1969           0 :                         zout(2, j, nout1) = s + s1
    1970           0 :                         r1 = r1 - 0.5_dp*r
    1971           0 :                         s1 = s1 - 0.5_dp*s
    1972           0 :                         r2 = bbs*(r2 - r3)
    1973           0 :                         s2 = bbs*(s2 - s3)
    1974           0 :                         zout(1, j, nout2) = r1 - s2
    1975           0 :                         zout(2, j, nout2) = s1 + r2
    1976           0 :                         zout(1, j, nout3) = r1 + s2
    1977           0 :                         zout(2, j, nout3) = s1 - r2
    1978             :                      END DO
    1979             :                   END DO
    1980             :                ELSE
    1981           0 :                   nin1 = ia - after
    1982           0 :                   nout1 = ia - atn
    1983           0 :                   DO ib = 1, before
    1984           0 :                      nin1 = nin1 + after
    1985           0 :                      nin2 = nin1 + atb
    1986           0 :                      nin3 = nin2 + atb
    1987           0 :                      nout1 = nout1 + atn
    1988           0 :                      nout2 = nout1 + after
    1989           0 :                      nout3 = nout2 + after
    1990           0 :                      DO j = 1, nfft
    1991           0 :                         r1 = zin(1, nin1, j)
    1992           0 :                         s1 = zin(2, nin1, j)
    1993           0 :                         r = zin(1, nin2, j)
    1994           0 :                         s = zin(2, nin2, j)
    1995           0 :                         r2 = (r + s)*rt2i
    1996           0 :                         s2 = (-r + s)*rt2i
    1997           0 :                         r3 = zin(2, nin3, j)
    1998           0 :                         s3 = -zin(1, nin3, j)
    1999           0 :                         r = r2 + r3
    2000           0 :                         s = s2 + s3
    2001           0 :                         zout(1, j, nout1) = r + r1
    2002           0 :                         zout(2, j, nout1) = s + s1
    2003           0 :                         r1 = r1 - 0.5_dp*r
    2004           0 :                         s1 = s1 - 0.5_dp*s
    2005           0 :                         r2 = bbs*(r2 - r3)
    2006           0 :                         s2 = bbs*(s2 - s3)
    2007           0 :                         zout(1, j, nout2) = r1 - s2
    2008           0 :                         zout(2, j, nout2) = s1 + r2
    2009           0 :                         zout(1, j, nout3) = r1 + s2
    2010           0 :                         zout(2, j, nout3) = s1 - r2
    2011             :                      END DO
    2012             :                   END DO
    2013             :                END IF
    2014             :             ELSE
    2015           0 :                itt = ias*before
    2016           0 :                itrig = itt + 1
    2017           0 :                cr2 = trig(1, itrig)
    2018           0 :                ci2 = trig(2, itrig)
    2019           0 :                itrig = itrig + itt
    2020           0 :                cr3 = trig(1, itrig)
    2021           0 :                ci3 = trig(2, itrig)
    2022           0 :                nin1 = ia - after
    2023           0 :                nout1 = ia - atn
    2024           0 :                DO ib = 1, before
    2025           0 :                   nin1 = nin1 + after
    2026           0 :                   nin2 = nin1 + atb
    2027           0 :                   nin3 = nin2 + atb
    2028           0 :                   nout1 = nout1 + atn
    2029           0 :                   nout2 = nout1 + after
    2030           0 :                   nout3 = nout2 + after
    2031           0 :                   DO j = 1, nfft
    2032           0 :                      r1 = zin(1, nin1, j)
    2033           0 :                      s1 = zin(2, nin1, j)
    2034           0 :                      r = zin(1, nin2, j)
    2035           0 :                      s = zin(2, nin2, j)
    2036           0 :                      r2 = r*cr2 - s*ci2
    2037           0 :                      s2 = r*ci2 + s*cr2
    2038           0 :                      r = zin(1, nin3, j)
    2039           0 :                      s = zin(2, nin3, j)
    2040           0 :                      r3 = r*cr3 - s*ci3
    2041           0 :                      s3 = r*ci3 + s*cr3
    2042           0 :                      r = r2 + r3
    2043           0 :                      s = s2 + s3
    2044           0 :                      zout(1, j, nout1) = r + r1
    2045           0 :                      zout(2, j, nout1) = s + s1
    2046           0 :                      r1 = r1 - 0.5_dp*r
    2047           0 :                      s1 = s1 - 0.5_dp*s
    2048           0 :                      r2 = bbs*(r2 - r3)
    2049           0 :                      s2 = bbs*(s2 - s3)
    2050           0 :                      zout(1, j, nout2) = r1 - s2
    2051           0 :                      zout(2, j, nout2) = s1 + r2
    2052           0 :                      zout(1, j, nout3) = r1 + s2
    2053           0 :                      zout(2, j, nout3) = s1 - r2
    2054             :                   END DO
    2055             :                END DO
    2056             :             END IF
    2057             :          END DO
    2058             :       ELSE IF (now == 5) THEN
    2059      102345 :          sin2 = isign*sin2p
    2060      102345 :          sin4 = isign*sin4p
    2061      102345 :          ia = 1
    2062      102345 :          nin1 = ia - after
    2063      102345 :          nout1 = ia - atn
    2064      935601 :          DO ib = 1, before
    2065      833256 :             nin1 = nin1 + after
    2066      833256 :             nin2 = nin1 + atb
    2067      833256 :             nin3 = nin2 + atb
    2068      833256 :             nin4 = nin3 + atb
    2069      833256 :             nin5 = nin4 + atb
    2070      833256 :             nout1 = nout1 + atn
    2071      833256 :             nout2 = nout1 + after
    2072      833256 :             nout3 = nout2 + after
    2073      833256 :             nout4 = nout3 + after
    2074      833256 :             nout5 = nout4 + after
    2075     9952206 :             DO j = 1, nfft
    2076     9016605 :                r1 = zin(1, nin1, j)
    2077     9016605 :                s1 = zin(2, nin1, j)
    2078     9016605 :                r2 = zin(1, nin2, j)
    2079     9016605 :                s2 = zin(2, nin2, j)
    2080     9016605 :                r3 = zin(1, nin3, j)
    2081     9016605 :                s3 = zin(2, nin3, j)
    2082     9016605 :                r4 = zin(1, nin4, j)
    2083     9016605 :                s4 = zin(2, nin4, j)
    2084     9016605 :                r5 = zin(1, nin5, j)
    2085     9016605 :                s5 = zin(2, nin5, j)
    2086     9016605 :                r25 = r2 + r5
    2087     9016605 :                r34 = r3 + r4
    2088     9016605 :                s25 = s2 - s5
    2089     9016605 :                s34 = s3 - s4
    2090     9016605 :                zout(1, j, nout1) = r1 + r25 + r34
    2091     9016605 :                r = cos2*r25 + cos4*r34 + r1
    2092     9016605 :                s = sin2*s25 + sin4*s34
    2093     9016605 :                zout(1, j, nout2) = r - s
    2094     9016605 :                zout(1, j, nout5) = r + s
    2095     9016605 :                r = cos4*r25 + cos2*r34 + r1
    2096     9016605 :                s = sin4*s25 - sin2*s34
    2097     9016605 :                zout(1, j, nout3) = r - s
    2098     9016605 :                zout(1, j, nout4) = r + s
    2099     9016605 :                r25 = r2 - r5
    2100     9016605 :                r34 = r3 - r4
    2101     9016605 :                s25 = s2 + s5
    2102     9016605 :                s34 = s3 + s4
    2103     9016605 :                zout(2, j, nout1) = s1 + s25 + s34
    2104     9016605 :                r = cos2*s25 + cos4*s34 + s1
    2105     9016605 :                s = sin2*r25 + sin4*r34
    2106     9016605 :                zout(2, j, nout2) = r + s
    2107     9016605 :                zout(2, j, nout5) = r - s
    2108     9016605 :                r = cos4*s25 + cos2*s34 + s1
    2109     9016605 :                s = sin4*r25 - sin2*r34
    2110     9016605 :                zout(2, j, nout3) = r + s
    2111     9849861 :                zout(2, j, nout4) = r - s
    2112             :             END DO
    2113             :          END DO
    2114      102345 :          DO ia = 2, after
    2115           0 :             ias = ia - 1
    2116      102345 :             IF (8*ias == 5*after) THEN
    2117           0 :                IF (isign == 1) THEN
    2118           0 :                   nin1 = ia - after
    2119           0 :                   nout1 = ia - atn
    2120           0 :                   DO ib = 1, before
    2121           0 :                      nin1 = nin1 + after
    2122           0 :                      nin2 = nin1 + atb
    2123           0 :                      nin3 = nin2 + atb
    2124           0 :                      nin4 = nin3 + atb
    2125           0 :                      nin5 = nin4 + atb
    2126           0 :                      nout1 = nout1 + atn
    2127           0 :                      nout2 = nout1 + after
    2128           0 :                      nout3 = nout2 + after
    2129           0 :                      nout4 = nout3 + after
    2130           0 :                      nout5 = nout4 + after
    2131           0 :                      DO j = 1, nfft
    2132           0 :                         r1 = zin(1, nin1, j)
    2133           0 :                         s1 = zin(2, nin1, j)
    2134           0 :                         r = zin(1, nin2, j)
    2135           0 :                         s = zin(2, nin2, j)
    2136           0 :                         r2 = (r - s)*rt2i
    2137           0 :                         s2 = (r + s)*rt2i
    2138           0 :                         r3 = -zin(2, nin3, j)
    2139           0 :                         s3 = zin(1, nin3, j)
    2140           0 :                         r = zin(1, nin4, j)
    2141           0 :                         s = zin(2, nin4, j)
    2142           0 :                         r4 = -(r + s)*rt2i
    2143           0 :                         s4 = (r - s)*rt2i
    2144           0 :                         r5 = -zin(1, nin5, j)
    2145           0 :                         s5 = -zin(2, nin5, j)
    2146           0 :                         r25 = r2 + r5
    2147           0 :                         r34 = r3 + r4
    2148           0 :                         s25 = s2 - s5
    2149           0 :                         s34 = s3 - s4
    2150           0 :                         zout(1, j, nout1) = r1 + r25 + r34
    2151           0 :                         r = cos2*r25 + cos4*r34 + r1
    2152           0 :                         s = sin2*s25 + sin4*s34
    2153           0 :                         zout(1, j, nout2) = r - s
    2154           0 :                         zout(1, j, nout5) = r + s
    2155           0 :                         r = cos4*r25 + cos2*r34 + r1
    2156           0 :                         s = sin4*s25 - sin2*s34
    2157           0 :                         zout(1, j, nout3) = r - s
    2158           0 :                         zout(1, j, nout4) = r + s
    2159           0 :                         r25 = r2 - r5
    2160           0 :                         r34 = r3 - r4
    2161           0 :                         s25 = s2 + s5
    2162           0 :                         s34 = s3 + s4
    2163           0 :                         zout(2, j, nout1) = s1 + s25 + s34
    2164           0 :                         r = cos2*s25 + cos4*s34 + s1
    2165           0 :                         s = sin2*r25 + sin4*r34
    2166           0 :                         zout(2, j, nout2) = r + s
    2167           0 :                         zout(2, j, nout5) = r - s
    2168           0 :                         r = cos4*s25 + cos2*s34 + s1
    2169           0 :                         s = sin4*r25 - sin2*r34
    2170           0 :                         zout(2, j, nout3) = r + s
    2171           0 :                         zout(2, j, nout4) = r - s
    2172             :                      END DO
    2173             :                   END DO
    2174             :                ELSE
    2175           0 :                   nin1 = ia - after
    2176           0 :                   nout1 = ia - atn
    2177           0 :                   DO ib = 1, before
    2178           0 :                      nin1 = nin1 + after
    2179           0 :                      nin2 = nin1 + atb
    2180           0 :                      nin3 = nin2 + atb
    2181           0 :                      nin4 = nin3 + atb
    2182           0 :                      nin5 = nin4 + atb
    2183           0 :                      nout1 = nout1 + atn
    2184           0 :                      nout2 = nout1 + after
    2185           0 :                      nout3 = nout2 + after
    2186           0 :                      nout4 = nout3 + after
    2187           0 :                      nout5 = nout4 + after
    2188           0 :                      DO j = 1, nfft
    2189           0 :                         r1 = zin(1, nin1, j)
    2190           0 :                         s1 = zin(2, nin1, j)
    2191           0 :                         r = zin(1, nin2, j)
    2192           0 :                         s = zin(2, nin2, j)
    2193           0 :                         r2 = (r + s)*rt2i
    2194           0 :                         s2 = (-r + s)*rt2i
    2195           0 :                         r3 = zin(2, nin3, j)
    2196           0 :                         s3 = -zin(1, nin3, j)
    2197           0 :                         r = zin(1, nin4, j)
    2198           0 :                         s = zin(2, nin4, j)
    2199           0 :                         r4 = (s - r)*rt2i
    2200           0 :                         s4 = -(r + s)*rt2i
    2201           0 :                         r5 = -zin(1, nin5, j)
    2202           0 :                         s5 = -zin(2, nin5, j)
    2203           0 :                         r25 = r2 + r5
    2204           0 :                         r34 = r3 + r4
    2205           0 :                         s25 = s2 - s5
    2206           0 :                         s34 = s3 - s4
    2207           0 :                         zout(1, j, nout1) = r1 + r25 + r34
    2208           0 :                         r = cos2*r25 + cos4*r34 + r1
    2209           0 :                         s = sin2*s25 + sin4*s34
    2210           0 :                         zout(1, j, nout2) = r - s
    2211           0 :                         zout(1, j, nout5) = r + s
    2212           0 :                         r = cos4*r25 + cos2*r34 + r1
    2213           0 :                         s = sin4*s25 - sin2*s34
    2214           0 :                         zout(1, j, nout3) = r - s
    2215           0 :                         zout(1, j, nout4) = r + s
    2216           0 :                         r25 = r2 - r5
    2217           0 :                         r34 = r3 - r4
    2218           0 :                         s25 = s2 + s5
    2219           0 :                         s34 = s3 + s4
    2220           0 :                         zout(2, j, nout1) = s1 + s25 + s34
    2221           0 :                         r = cos2*s25 + cos4*s34 + s1
    2222           0 :                         s = sin2*r25 + sin4*r34
    2223           0 :                         zout(2, j, nout2) = r + s
    2224           0 :                         zout(2, j, nout5) = r - s
    2225           0 :                         r = cos4*s25 + cos2*s34 + s1
    2226           0 :                         s = sin4*r25 - sin2*r34
    2227           0 :                         zout(2, j, nout3) = r + s
    2228           0 :                         zout(2, j, nout4) = r - s
    2229             :                      END DO
    2230             :                   END DO
    2231             :                END IF
    2232             :             ELSE
    2233           0 :                ias = ia - 1
    2234           0 :                itt = ias*before
    2235           0 :                itrig = itt + 1
    2236           0 :                cr2 = trig(1, itrig)
    2237           0 :                ci2 = trig(2, itrig)
    2238           0 :                itrig = itrig + itt
    2239           0 :                cr3 = trig(1, itrig)
    2240           0 :                ci3 = trig(2, itrig)
    2241           0 :                itrig = itrig + itt
    2242           0 :                cr4 = trig(1, itrig)
    2243           0 :                ci4 = trig(2, itrig)
    2244           0 :                itrig = itrig + itt
    2245           0 :                cr5 = trig(1, itrig)
    2246           0 :                ci5 = trig(2, itrig)
    2247           0 :                nin1 = ia - after
    2248           0 :                nout1 = ia - atn
    2249           0 :                DO ib = 1, before
    2250           0 :                   nin1 = nin1 + after
    2251           0 :                   nin2 = nin1 + atb
    2252           0 :                   nin3 = nin2 + atb
    2253           0 :                   nin4 = nin3 + atb
    2254           0 :                   nin5 = nin4 + atb
    2255           0 :                   nout1 = nout1 + atn
    2256           0 :                   nout2 = nout1 + after
    2257           0 :                   nout3 = nout2 + after
    2258           0 :                   nout4 = nout3 + after
    2259           0 :                   nout5 = nout4 + after
    2260           0 :                   DO j = 1, nfft
    2261           0 :                      r1 = zin(1, nin1, j)
    2262           0 :                      s1 = zin(2, nin1, j)
    2263           0 :                      r = zin(1, nin2, j)
    2264           0 :                      s = zin(2, nin2, j)
    2265           0 :                      r2 = r*cr2 - s*ci2
    2266           0 :                      s2 = r*ci2 + s*cr2
    2267           0 :                      r = zin(1, nin3, j)
    2268           0 :                      s = zin(2, nin3, j)
    2269           0 :                      r3 = r*cr3 - s*ci3
    2270           0 :                      s3 = r*ci3 + s*cr3
    2271           0 :                      r = zin(1, nin4, j)
    2272           0 :                      s = zin(2, nin4, j)
    2273           0 :                      r4 = r*cr4 - s*ci4
    2274           0 :                      s4 = r*ci4 + s*cr4
    2275           0 :                      r = zin(1, nin5, j)
    2276           0 :                      s = zin(2, nin5, j)
    2277           0 :                      r5 = r*cr5 - s*ci5
    2278           0 :                      s5 = r*ci5 + s*cr5
    2279           0 :                      r25 = r2 + r5
    2280           0 :                      r34 = r3 + r4
    2281           0 :                      s25 = s2 - s5
    2282           0 :                      s34 = s3 - s4
    2283           0 :                      zout(1, j, nout1) = r1 + r25 + r34
    2284           0 :                      r = cos2*r25 + cos4*r34 + r1
    2285           0 :                      s = sin2*s25 + sin4*s34
    2286           0 :                      zout(1, j, nout2) = r - s
    2287           0 :                      zout(1, j, nout5) = r + s
    2288           0 :                      r = cos4*r25 + cos2*r34 + r1
    2289           0 :                      s = sin4*s25 - sin2*s34
    2290           0 :                      zout(1, j, nout3) = r - s
    2291           0 :                      zout(1, j, nout4) = r + s
    2292           0 :                      r25 = r2 - r5
    2293           0 :                      r34 = r3 - r4
    2294           0 :                      s25 = s2 + s5
    2295           0 :                      s34 = s3 + s4
    2296           0 :                      zout(2, j, nout1) = s1 + s25 + s34
    2297           0 :                      r = cos2*s25 + cos4*s34 + s1
    2298           0 :                      s = sin2*r25 + sin4*r34
    2299           0 :                      zout(2, j, nout2) = r + s
    2300           0 :                      zout(2, j, nout5) = r - s
    2301           0 :                      r = cos4*s25 + cos2*s34 + s1
    2302           0 :                      s = sin4*r25 - sin2*r34
    2303           0 :                      zout(2, j, nout3) = r + s
    2304           0 :                      zout(2, j, nout4) = r - s
    2305             :                   END DO
    2306             :                END DO
    2307             :             END IF
    2308             :          END DO
    2309             :       ELSE IF (now == 6) THEN
    2310      214272 :          bbs = isign*bb
    2311      214272 :          ia = 1
    2312      214272 :          nin1 = ia - after
    2313      214272 :          nout1 = ia - atn
    2314     2812392 :          DO ib = 1, before
    2315     2598120 :             nin1 = nin1 + after
    2316     2598120 :             nin2 = nin1 + atb
    2317     2598120 :             nin3 = nin2 + atb
    2318     2598120 :             nin4 = nin3 + atb
    2319     2598120 :             nin5 = nin4 + atb
    2320     2598120 :             nin6 = nin5 + atb
    2321     2598120 :             nout1 = nout1 + atn
    2322     2598120 :             nout2 = nout1 + after
    2323     2598120 :             nout3 = nout2 + after
    2324     2598120 :             nout4 = nout3 + after
    2325     2598120 :             nout5 = nout4 + after
    2326     2598120 :             nout6 = nout5 + after
    2327    19119420 :             DO j = 1, nfft
    2328    16307028 :                r2 = zin(1, nin3, j)
    2329    16307028 :                s2 = zin(2, nin3, j)
    2330    16307028 :                r3 = zin(1, nin5, j)
    2331    16307028 :                s3 = zin(2, nin5, j)
    2332    16307028 :                r = r2 + r3
    2333    16307028 :                s = s2 + s3
    2334    16307028 :                r1 = zin(1, nin1, j)
    2335    16307028 :                s1 = zin(2, nin1, j)
    2336    16307028 :                ur1 = r + r1
    2337    16307028 :                ui1 = s + s1
    2338    16307028 :                r1 = r1 - 0.5_dp*r
    2339    16307028 :                s1 = s1 - 0.5_dp*s
    2340    16307028 :                r = r2 - r3
    2341    16307028 :                s = s2 - s3
    2342    16307028 :                ur2 = r1 - s*bbs
    2343    16307028 :                ui2 = s1 + r*bbs
    2344    16307028 :                ur3 = r1 + s*bbs
    2345    16307028 :                ui3 = s1 - r*bbs
    2346             : 
    2347    16307028 :                r2 = zin(1, nin6, j)
    2348    16307028 :                s2 = zin(2, nin6, j)
    2349    16307028 :                r3 = zin(1, nin2, j)
    2350    16307028 :                s3 = zin(2, nin2, j)
    2351    16307028 :                r = r2 + r3
    2352    16307028 :                s = s2 + s3
    2353    16307028 :                r1 = zin(1, nin4, j)
    2354    16307028 :                s1 = zin(2, nin4, j)
    2355    16307028 :                vr1 = r + r1
    2356    16307028 :                vi1 = s + s1
    2357    16307028 :                r1 = r1 - 0.5_dp*r
    2358    16307028 :                s1 = s1 - 0.5_dp*s
    2359    16307028 :                r = r2 - r3
    2360    16307028 :                s = s2 - s3
    2361    16307028 :                vr2 = r1 - s*bbs
    2362    16307028 :                vi2 = s1 + r*bbs
    2363    16307028 :                vr3 = r1 + s*bbs
    2364    16307028 :                vi3 = s1 - r*bbs
    2365             : 
    2366    16307028 :                zout(1, j, nout1) = ur1 + vr1
    2367    16307028 :                zout(2, j, nout1) = ui1 + vi1
    2368    16307028 :                zout(1, j, nout5) = ur2 + vr2
    2369    16307028 :                zout(2, j, nout5) = ui2 + vi2
    2370    16307028 :                zout(1, j, nout3) = ur3 + vr3
    2371    16307028 :                zout(2, j, nout3) = ui3 + vi3
    2372    16307028 :                zout(1, j, nout4) = ur1 - vr1
    2373    16307028 :                zout(2, j, nout4) = ui1 - vi1
    2374    16307028 :                zout(1, j, nout2) = ur2 - vr2
    2375    16307028 :                zout(2, j, nout2) = ui2 - vi2
    2376    16307028 :                zout(1, j, nout6) = ur3 - vr3
    2377    18905148 :                zout(2, j, nout6) = ui3 - vi3
    2378             :             END DO
    2379             :          END DO
    2380             :       ELSE
    2381           0 :          CPABORT('Error fftpre')
    2382             :       END IF
    2383             : 
    2384             : !-----------------------------------------------------------------------------!
    2385             : 
    2386      479475 :    END SUBROUTINE fftpre
    2387             : 
    2388             : !-----------------------------------------------------------------------------!
    2389             : 
    2390             : !-----------------------------------------------------------------------------!
    2391             : !  Copyright (C) Stefan Goedecker, Lausanne, Switzerland, August 1, 1991
    2392             : !  Copyright (C) Stefan Goedecker, Cornell University, Ithaca, USA, 1994
    2393             : !  Copyright (C) Stefan Goedecker, MPI Stuttgart, Germany, 1999
    2394             : !  This file is distributed under the terms of the
    2395             : !  GNU General Public License version 2 (or later),
    2396             : !  see http://www.gnu.org/copyleft/gpl.txt .
    2397             : !-----------------------------------------------------------------------------!
    2398             : !  S. Goedecker: Rotating a three-dimensional array in optimal
    2399             : !  positions for vector processing: Case study for a three-dimensional Fast
    2400             : !  Fourier Transform, Comp. Phys. Commun. 76, 294 (1993)
    2401             : ! **************************************************************************************************
    2402             : !> \brief ...
    2403             : !> \param mm ...
    2404             : !> \param nfft ...
    2405             : !> \param m ...
    2406             : !> \param nn ...
    2407             : !> \param n ...
    2408             : !> \param zin ...
    2409             : !> \param zout ...
    2410             : !> \param trig ...
    2411             : !> \param now ...
    2412             : !> \param after ...
    2413             : !> \param before ...
    2414             : !> \param isign ...
    2415             : ! **************************************************************************************************
    2416     1310530 :    SUBROUTINE fftstp(mm, nfft, m, nn, n, zin, zout, trig, now, after, before, isign)
    2417             : 
    2418             :       INTEGER, INTENT(IN)                                :: mm, nfft, m, nn, n
    2419             :       REAL(dp), DIMENSION(2, mm, m), INTENT(IN)          :: zin
    2420             :       REAL(dp), DIMENSION(2, nn, n), INTENT(INOUT)       :: zout
    2421             :       REAL(dp), DIMENSION(2, ctrig_length), INTENT(IN)   :: trig
    2422             :       INTEGER, INTENT(IN)                                :: now, after, before, isign
    2423             : 
    2424             :       REAL(dp), PARAMETER :: bb = 0.8660254037844387_dp, cos2 = 0.3090169943749474_dp, &
    2425             :          cos4 = -0.8090169943749474_dp, rt2i = 0.7071067811865475_dp, &
    2426             :          sin2p = 0.9510565162951536_dp, sin4p = 0.5877852522924731_dp
    2427             : 
    2428             :       INTEGER                                            :: atb, atn, ia, ias, ib, itrig, itt, j, &
    2429             :                                                             nin1, nin2, nin3, nin4, nin5, nin6, &
    2430             :                                                             nin7, nin8, nout1, nout2, nout3, &
    2431             :                                                             nout4, nout5, nout6, nout7, nout8
    2432             :       REAL(dp) :: am, ap, bbs, bm, bp, ci2, ci3, ci4, ci5, cm, cp, cr2, cr3, cr4, cr5, dbl, dm, r, &
    2433             :          r1, r2, r25, r3, r34, r4, r5, r6, r7, r8, s, s1, s2, s25, s3, s34, s4, s5, s6, s7, s8, &
    2434             :          sin2, sin4, ui1, ui2, ui3, ur1, ur2, ur3, vi1, vi2, vi3, vr1, vr2, vr3
    2435             : 
    2436             : ! sqrt(0.5)
    2437             : ! sqrt(3)/2
    2438             : ! cos(2*pi/5)
    2439             : !  cos(4*pi/5)
    2440             : ! sin(2*pi/5)
    2441             : ! sin(4*pi/5)
    2442             : !-----------------------------------------------------------------------------!
    2443             : 
    2444     1310530 :       atn = after*now
    2445     1310530 :       atb = after*before
    2446             : 
    2447             :       IF (now == 4) THEN
    2448      209228 :          IF (isign == 1) THEN
    2449      145569 :             ia = 1
    2450      145569 :             nin1 = ia - after
    2451      145569 :             nout1 = ia - atn
    2452      477276 :             DO ib = 1, before
    2453      331707 :                nin1 = nin1 + after
    2454      331707 :                nin2 = nin1 + atb
    2455      331707 :                nin3 = nin2 + atb
    2456      331707 :                nin4 = nin3 + atb
    2457      331707 :                nout1 = nout1 + atn
    2458      331707 :                nout2 = nout1 + after
    2459      331707 :                nout3 = nout2 + after
    2460      331707 :                nout4 = nout3 + after
    2461     3211299 :                DO j = 1, nfft
    2462     2734023 :                   r1 = zin(1, j, nin1)
    2463     2734023 :                   s1 = zin(2, j, nin1)
    2464     2734023 :                   r2 = zin(1, j, nin2)
    2465     2734023 :                   s2 = zin(2, j, nin2)
    2466     2734023 :                   r3 = zin(1, j, nin3)
    2467     2734023 :                   s3 = zin(2, j, nin3)
    2468     2734023 :                   r4 = zin(1, j, nin4)
    2469     2734023 :                   s4 = zin(2, j, nin4)
    2470     2734023 :                   r = r1 + r3
    2471     2734023 :                   s = r2 + r4
    2472     2734023 :                   zout(1, j, nout1) = r + s
    2473     2734023 :                   zout(1, j, nout3) = r - s
    2474     2734023 :                   r = r1 - r3
    2475     2734023 :                   s = s2 - s4
    2476     2734023 :                   zout(1, j, nout2) = r - s
    2477     2734023 :                   zout(1, j, nout4) = r + s
    2478     2734023 :                   r = s1 + s3
    2479     2734023 :                   s = s2 + s4
    2480     2734023 :                   zout(2, j, nout1) = r + s
    2481     2734023 :                   zout(2, j, nout3) = r - s
    2482     2734023 :                   r = s1 - s3
    2483     2734023 :                   s = r2 - r4
    2484     2734023 :                   zout(2, j, nout2) = r + s
    2485     3065730 :                   zout(2, j, nout4) = r - s
    2486             :                END DO
    2487             :             END DO
    2488      927153 :             DO ia = 2, after
    2489      781584 :                ias = ia - 1
    2490      927153 :                IF (2*ias == after) THEN
    2491       99204 :                   nin1 = ia - after
    2492       99204 :                   nout1 = ia - atn
    2493      291816 :                   DO ib = 1, before
    2494      192612 :                      nin1 = nin1 + after
    2495      192612 :                      nin2 = nin1 + atb
    2496      192612 :                      nin3 = nin2 + atb
    2497      192612 :                      nin4 = nin3 + atb
    2498      192612 :                      nout1 = nout1 + atn
    2499      192612 :                      nout2 = nout1 + after
    2500      192612 :                      nout3 = nout2 + after
    2501      192612 :                      nout4 = nout3 + after
    2502     2055144 :                      DO j = 1, nfft
    2503     1763328 :                         r1 = zin(1, j, nin1)
    2504     1763328 :                         s1 = zin(2, j, nin1)
    2505     1763328 :                         r = zin(1, j, nin2)
    2506     1763328 :                         s = zin(2, j, nin2)
    2507     1763328 :                         r2 = (r - s)*rt2i
    2508     1763328 :                         s2 = (r + s)*rt2i
    2509     1763328 :                         r3 = -zin(2, j, nin3)
    2510     1763328 :                         s3 = zin(1, j, nin3)
    2511     1763328 :                         r = zin(1, j, nin4)
    2512     1763328 :                         s = zin(2, j, nin4)
    2513     1763328 :                         r4 = -(r + s)*rt2i
    2514     1763328 :                         s4 = (r - s)*rt2i
    2515     1763328 :                         r = r1 + r3
    2516     1763328 :                         s = r2 + r4
    2517     1763328 :                         zout(1, j, nout1) = r + s
    2518     1763328 :                         zout(1, j, nout3) = r - s
    2519     1763328 :                         r = r1 - r3
    2520     1763328 :                         s = s2 - s4
    2521     1763328 :                         zout(1, j, nout2) = r - s
    2522     1763328 :                         zout(1, j, nout4) = r + s
    2523     1763328 :                         r = s1 + s3
    2524     1763328 :                         s = s2 + s4
    2525     1763328 :                         zout(2, j, nout1) = r + s
    2526     1763328 :                         zout(2, j, nout3) = r - s
    2527     1763328 :                         r = s1 - s3
    2528     1763328 :                         s = r2 - r4
    2529     1763328 :                         zout(2, j, nout2) = r + s
    2530     1955940 :                         zout(2, j, nout4) = r - s
    2531             :                      END DO
    2532             :                   END DO
    2533             :                ELSE
    2534      682380 :                   itt = ias*before
    2535      682380 :                   itrig = itt + 1
    2536      682380 :                   cr2 = trig(1, itrig)
    2537      682380 :                   ci2 = trig(2, itrig)
    2538      682380 :                   itrig = itrig + itt
    2539      682380 :                   cr3 = trig(1, itrig)
    2540      682380 :                   ci3 = trig(2, itrig)
    2541      682380 :                   itrig = itrig + itt
    2542      682380 :                   cr4 = trig(1, itrig)
    2543      682380 :                   ci4 = trig(2, itrig)
    2544      682380 :                   nin1 = ia - after
    2545      682380 :                   nout1 = ia - atn
    2546     2099520 :                   DO ib = 1, before
    2547     1417140 :                      nin1 = nin1 + after
    2548     1417140 :                      nin2 = nin1 + atb
    2549     1417140 :                      nin3 = nin2 + atb
    2550     1417140 :                      nin4 = nin3 + atb
    2551     1417140 :                      nout1 = nout1 + atn
    2552     1417140 :                      nout2 = nout1 + after
    2553     1417140 :                      nout3 = nout2 + after
    2554     1417140 :                      nout4 = nout3 + after
    2555    13908060 :                      DO j = 1, nfft
    2556    11808540 :                         r1 = zin(1, j, nin1)
    2557    11808540 :                         s1 = zin(2, j, nin1)
    2558    11808540 :                         r = zin(1, j, nin2)
    2559    11808540 :                         s = zin(2, j, nin2)
    2560    11808540 :                         r2 = r*cr2 - s*ci2
    2561    11808540 :                         s2 = r*ci2 + s*cr2
    2562    11808540 :                         r = zin(1, j, nin3)
    2563    11808540 :                         s = zin(2, j, nin3)
    2564    11808540 :                         r3 = r*cr3 - s*ci3
    2565    11808540 :                         s3 = r*ci3 + s*cr3
    2566    11808540 :                         r = zin(1, j, nin4)
    2567    11808540 :                         s = zin(2, j, nin4)
    2568    11808540 :                         r4 = r*cr4 - s*ci4
    2569    11808540 :                         s4 = r*ci4 + s*cr4
    2570    11808540 :                         r = r1 + r3
    2571    11808540 :                         s = r2 + r4
    2572    11808540 :                         zout(1, j, nout1) = r + s
    2573    11808540 :                         zout(1, j, nout3) = r - s
    2574    11808540 :                         r = r1 - r3
    2575    11808540 :                         s = s2 - s4
    2576    11808540 :                         zout(1, j, nout2) = r - s
    2577    11808540 :                         zout(1, j, nout4) = r + s
    2578    11808540 :                         r = s1 + s3
    2579    11808540 :                         s = s2 + s4
    2580    11808540 :                         zout(2, j, nout1) = r + s
    2581    11808540 :                         zout(2, j, nout3) = r - s
    2582    11808540 :                         r = s1 - s3
    2583    11808540 :                         s = r2 - r4
    2584    11808540 :                         zout(2, j, nout2) = r + s
    2585    13225680 :                         zout(2, j, nout4) = r - s
    2586             :                      END DO
    2587             :                   END DO
    2588             :                END IF
    2589             :             END DO
    2590             :          ELSE
    2591       63659 :             ia = 1
    2592       63659 :             nin1 = ia - after
    2593       63659 :             nout1 = ia - atn
    2594      254636 :             DO ib = 1, before
    2595      190977 :                nin1 = nin1 + after
    2596      190977 :                nin2 = nin1 + atb
    2597      190977 :                nin3 = nin2 + atb
    2598      190977 :                nin4 = nin3 + atb
    2599      190977 :                nout1 = nout1 + atn
    2600      190977 :                nout2 = nout1 + after
    2601      190977 :                nout3 = nout2 + after
    2602      190977 :                nout4 = nout3 + after
    2603     1735529 :                DO j = 1, nfft
    2604     1480893 :                   r1 = zin(1, j, nin1)
    2605     1480893 :                   s1 = zin(2, j, nin1)
    2606     1480893 :                   r2 = zin(1, j, nin2)
    2607     1480893 :                   s2 = zin(2, j, nin2)
    2608     1480893 :                   r3 = zin(1, j, nin3)
    2609     1480893 :                   s3 = zin(2, j, nin3)
    2610     1480893 :                   r4 = zin(1, j, nin4)
    2611     1480893 :                   s4 = zin(2, j, nin4)
    2612     1480893 :                   r = r1 + r3
    2613     1480893 :                   s = r2 + r4
    2614     1480893 :                   zout(1, j, nout1) = r + s
    2615     1480893 :                   zout(1, j, nout3) = r - s
    2616     1480893 :                   r = r1 - r3
    2617     1480893 :                   s = s2 - s4
    2618     1480893 :                   zout(1, j, nout2) = r + s
    2619     1480893 :                   zout(1, j, nout4) = r - s
    2620     1480893 :                   r = s1 + s3
    2621     1480893 :                   s = s2 + s4
    2622     1480893 :                   zout(2, j, nout1) = r + s
    2623     1480893 :                   zout(2, j, nout3) = r - s
    2624     1480893 :                   r = s1 - s3
    2625     1480893 :                   s = r2 - r4
    2626     1480893 :                   zout(2, j, nout2) = r - s
    2627     1671870 :                   zout(2, j, nout4) = r + s
    2628             :                END DO
    2629             :             END DO
    2630      354103 :             DO ia = 2, after
    2631      290444 :                ias = ia - 1
    2632      354103 :                IF (2*ias == after) THEN
    2633       46704 :                   nin1 = ia - after
    2634       46704 :                   nout1 = ia - atn
    2635      186816 :                   DO ib = 1, before
    2636      140112 :                      nin1 = nin1 + after
    2637      140112 :                      nin2 = nin1 + atb
    2638      140112 :                      nin3 = nin2 + atb
    2639      140112 :                      nin4 = nin3 + atb
    2640      140112 :                      nout1 = nout1 + atn
    2641      140112 :                      nout2 = nout1 + after
    2642      140112 :                      nout3 = nout2 + after
    2643      140112 :                      nout4 = nout3 + after
    2644     1182144 :                      DO j = 1, nfft
    2645      995328 :                         r1 = zin(1, j, nin1)
    2646      995328 :                         s1 = zin(2, j, nin1)
    2647      995328 :                         r = zin(1, j, nin2)
    2648      995328 :                         s = zin(2, j, nin2)
    2649      995328 :                         r2 = (r + s)*rt2i
    2650      995328 :                         s2 = (s - r)*rt2i
    2651      995328 :                         r3 = zin(2, j, nin3)
    2652      995328 :                         s3 = -zin(1, j, nin3)
    2653      995328 :                         r = zin(1, j, nin4)
    2654      995328 :                         s = zin(2, j, nin4)
    2655      995328 :                         r4 = (s - r)*rt2i
    2656      995328 :                         s4 = -(r + s)*rt2i
    2657      995328 :                         r = r1 + r3
    2658      995328 :                         s = r2 + r4
    2659      995328 :                         zout(1, j, nout1) = r + s
    2660      995328 :                         zout(1, j, nout3) = r - s
    2661      995328 :                         r = r1 - r3
    2662      995328 :                         s = s2 - s4
    2663      995328 :                         zout(1, j, nout2) = r + s
    2664      995328 :                         zout(1, j, nout4) = r - s
    2665      995328 :                         r = s1 + s3
    2666      995328 :                         s = s2 + s4
    2667      995328 :                         zout(2, j, nout1) = r + s
    2668      995328 :                         zout(2, j, nout3) = r - s
    2669      995328 :                         r = s1 - s3
    2670      995328 :                         s = r2 - r4
    2671      995328 :                         zout(2, j, nout2) = r - s
    2672     1135440 :                         zout(2, j, nout4) = r + s
    2673             :                      END DO
    2674             :                   END DO
    2675             :                ELSE
    2676      243740 :                   itt = ias*before
    2677      243740 :                   itrig = itt + 1
    2678      243740 :                   cr2 = trig(1, itrig)
    2679      243740 :                   ci2 = trig(2, itrig)
    2680      243740 :                   itrig = itrig + itt
    2681      243740 :                   cr3 = trig(1, itrig)
    2682      243740 :                   ci3 = trig(2, itrig)
    2683      243740 :                   itrig = itrig + itt
    2684      243740 :                   cr4 = trig(1, itrig)
    2685      243740 :                   ci4 = trig(2, itrig)
    2686      243740 :                   nin1 = ia - after
    2687      243740 :                   nout1 = ia - atn
    2688      974960 :                   DO ib = 1, before
    2689      731220 :                      nin1 = nin1 + after
    2690      731220 :                      nin2 = nin1 + atb
    2691      731220 :                      nin3 = nin2 + atb
    2692      731220 :                      nin4 = nin3 + atb
    2693      731220 :                      nout1 = nout1 + atn
    2694      731220 :                      nout2 = nout1 + after
    2695      731220 :                      nout3 = nout2 + after
    2696      731220 :                      nout4 = nout3 + after
    2697     5586980 :                      DO j = 1, nfft
    2698     4612020 :                         r1 = zin(1, j, nin1)
    2699     4612020 :                         s1 = zin(2, j, nin1)
    2700     4612020 :                         r = zin(1, j, nin2)
    2701     4612020 :                         s = zin(2, j, nin2)
    2702     4612020 :                         r2 = r*cr2 - s*ci2
    2703     4612020 :                         s2 = r*ci2 + s*cr2
    2704     4612020 :                         r = zin(1, j, nin3)
    2705     4612020 :                         s = zin(2, j, nin3)
    2706     4612020 :                         r3 = r*cr3 - s*ci3
    2707     4612020 :                         s3 = r*ci3 + s*cr3
    2708     4612020 :                         r = zin(1, j, nin4)
    2709     4612020 :                         s = zin(2, j, nin4)
    2710     4612020 :                         r4 = r*cr4 - s*ci4
    2711     4612020 :                         s4 = r*ci4 + s*cr4
    2712     4612020 :                         r = r1 + r3
    2713     4612020 :                         s = r2 + r4
    2714     4612020 :                         zout(1, j, nout1) = r + s
    2715     4612020 :                         zout(1, j, nout3) = r - s
    2716     4612020 :                         r = r1 - r3
    2717     4612020 :                         s = s2 - s4
    2718     4612020 :                         zout(1, j, nout2) = r + s
    2719     4612020 :                         zout(1, j, nout4) = r - s
    2720     4612020 :                         r = s1 + s3
    2721     4612020 :                         s = s2 + s4
    2722     4612020 :                         zout(2, j, nout1) = r + s
    2723     4612020 :                         zout(2, j, nout3) = r - s
    2724     4612020 :                         r = s1 - s3
    2725     4612020 :                         s = r2 - r4
    2726     4612020 :                         zout(2, j, nout2) = r - s
    2727     5343240 :                         zout(2, j, nout4) = r + s
    2728             :                      END DO
    2729             :                   END DO
    2730             :                END IF
    2731             :             END DO
    2732             :          END IF
    2733             :       ELSE IF (now == 8) THEN
    2734       56088 :          IF (isign == -1) THEN
    2735       56088 :             ia = 1
    2736       56088 :             nin1 = ia - after
    2737       56088 :             nout1 = ia - atn
    2738      280878 :             DO ib = 1, before
    2739      224790 :                nin1 = nin1 + after
    2740      224790 :                nin2 = nin1 + atb
    2741      224790 :                nin3 = nin2 + atb
    2742      224790 :                nin4 = nin3 + atb
    2743      224790 :                nin5 = nin4 + atb
    2744      224790 :                nin6 = nin5 + atb
    2745      224790 :                nin7 = nin6 + atb
    2746      224790 :                nin8 = nin7 + atb
    2747      224790 :                nout1 = nout1 + atn
    2748      224790 :                nout2 = nout1 + after
    2749      224790 :                nout3 = nout2 + after
    2750      224790 :                nout4 = nout3 + after
    2751      224790 :                nout5 = nout4 + after
    2752      224790 :                nout6 = nout5 + after
    2753      224790 :                nout7 = nout6 + after
    2754      224790 :                nout8 = nout7 + after
    2755     3561198 :                DO j = 1, nfft
    2756     3280320 :                   r1 = zin(1, j, nin1)
    2757     3280320 :                   s1 = zin(2, j, nin1)
    2758     3280320 :                   r2 = zin(1, j, nin2)
    2759     3280320 :                   s2 = zin(2, j, nin2)
    2760     3280320 :                   r3 = zin(1, j, nin3)
    2761     3280320 :                   s3 = zin(2, j, nin3)
    2762     3280320 :                   r4 = zin(1, j, nin4)
    2763     3280320 :                   s4 = zin(2, j, nin4)
    2764     3280320 :                   r5 = zin(1, j, nin5)
    2765     3280320 :                   s5 = zin(2, j, nin5)
    2766     3280320 :                   r6 = zin(1, j, nin6)
    2767     3280320 :                   s6 = zin(2, j, nin6)
    2768     3280320 :                   r7 = zin(1, j, nin7)
    2769     3280320 :                   s7 = zin(2, j, nin7)
    2770     3280320 :                   r8 = zin(1, j, nin8)
    2771     3280320 :                   s8 = zin(2, j, nin8)
    2772     3280320 :                   r = r1 + r5
    2773     3280320 :                   s = r3 + r7
    2774     3280320 :                   ap = r + s
    2775     3280320 :                   am = r - s
    2776     3280320 :                   r = r2 + r6
    2777     3280320 :                   s = r4 + r8
    2778     3280320 :                   bp = r + s
    2779     3280320 :                   bm = r - s
    2780     3280320 :                   r = s1 + s5
    2781     3280320 :                   s = s3 + s7
    2782     3280320 :                   cp = r + s
    2783     3280320 :                   cm = r - s
    2784     3280320 :                   r = s2 + s6
    2785     3280320 :                   s = s4 + s8
    2786     3280320 :                   dbl = r + s
    2787     3280320 :                   dm = r - s
    2788     3280320 :                   zout(1, j, nout1) = ap + bp
    2789     3280320 :                   zout(2, j, nout1) = cp + dbl
    2790     3280320 :                   zout(1, j, nout5) = ap - bp
    2791     3280320 :                   zout(2, j, nout5) = cp - dbl
    2792     3280320 :                   zout(1, j, nout3) = am + dm
    2793     3280320 :                   zout(2, j, nout3) = cm - bm
    2794     3280320 :                   zout(1, j, nout7) = am - dm
    2795     3280320 :                   zout(2, j, nout7) = cm + bm
    2796     3280320 :                   r = r1 - r5
    2797     3280320 :                   s = s3 - s7
    2798     3280320 :                   ap = r + s
    2799     3280320 :                   am = r - s
    2800     3280320 :                   r = s1 - s5
    2801     3280320 :                   s = r3 - r7
    2802     3280320 :                   bp = r + s
    2803     3280320 :                   bm = r - s
    2804     3280320 :                   r = s4 - s8
    2805     3280320 :                   s = r2 - r6
    2806     3280320 :                   cp = r + s
    2807     3280320 :                   cm = r - s
    2808     3280320 :                   r = s2 - s6
    2809     3280320 :                   s = r4 - r8
    2810     3280320 :                   dbl = r + s
    2811     3280320 :                   dm = r - s
    2812     3280320 :                   r = (cp + dm)*rt2i
    2813     3280320 :                   s = (-cp + dm)*rt2i
    2814     3280320 :                   cp = (cm + dbl)*rt2i
    2815     3280320 :                   dbl = (cm - dbl)*rt2i
    2816     3280320 :                   zout(1, j, nout2) = ap + r
    2817     3280320 :                   zout(2, j, nout2) = bm + s
    2818     3280320 :                   zout(1, j, nout6) = ap - r
    2819     3280320 :                   zout(2, j, nout6) = bm - s
    2820     3280320 :                   zout(1, j, nout4) = am + cp
    2821     3280320 :                   zout(2, j, nout4) = bp + dbl
    2822     3280320 :                   zout(1, j, nout8) = am - cp
    2823     3505110 :                   zout(2, j, nout8) = bp - dbl
    2824             :                END DO
    2825             :             END DO
    2826             :          ELSE
    2827           0 :             ia = 1
    2828           0 :             nin1 = ia - after
    2829           0 :             nout1 = ia - atn
    2830           0 :             DO ib = 1, before
    2831           0 :                nin1 = nin1 + after
    2832           0 :                nin2 = nin1 + atb
    2833           0 :                nin3 = nin2 + atb
    2834           0 :                nin4 = nin3 + atb
    2835           0 :                nin5 = nin4 + atb
    2836           0 :                nin6 = nin5 + atb
    2837           0 :                nin7 = nin6 + atb
    2838           0 :                nin8 = nin7 + atb
    2839           0 :                nout1 = nout1 + atn
    2840           0 :                nout2 = nout1 + after
    2841           0 :                nout3 = nout2 + after
    2842           0 :                nout4 = nout3 + after
    2843           0 :                nout5 = nout4 + after
    2844           0 :                nout6 = nout5 + after
    2845           0 :                nout7 = nout6 + after
    2846           0 :                nout8 = nout7 + after
    2847           0 :                DO j = 1, nfft
    2848           0 :                   r1 = zin(1, j, nin1)
    2849           0 :                   s1 = zin(2, j, nin1)
    2850           0 :                   r2 = zin(1, j, nin2)
    2851           0 :                   s2 = zin(2, j, nin2)
    2852           0 :                   r3 = zin(1, j, nin3)
    2853           0 :                   s3 = zin(2, j, nin3)
    2854           0 :                   r4 = zin(1, j, nin4)
    2855           0 :                   s4 = zin(2, j, nin4)
    2856           0 :                   r5 = zin(1, j, nin5)
    2857           0 :                   s5 = zin(2, j, nin5)
    2858           0 :                   r6 = zin(1, j, nin6)
    2859           0 :                   s6 = zin(2, j, nin6)
    2860           0 :                   r7 = zin(1, j, nin7)
    2861           0 :                   s7 = zin(2, j, nin7)
    2862           0 :                   r8 = zin(1, j, nin8)
    2863           0 :                   s8 = zin(2, j, nin8)
    2864           0 :                   r = r1 + r5
    2865           0 :                   s = r3 + r7
    2866           0 :                   ap = r + s
    2867           0 :                   am = r - s
    2868           0 :                   r = r2 + r6
    2869           0 :                   s = r4 + r8
    2870           0 :                   bp = r + s
    2871           0 :                   bm = r - s
    2872           0 :                   r = s1 + s5
    2873           0 :                   s = s3 + s7
    2874           0 :                   cp = r + s
    2875           0 :                   cm = r - s
    2876           0 :                   r = s2 + s6
    2877           0 :                   s = s4 + s8
    2878           0 :                   dbl = r + s
    2879           0 :                   dm = r - s
    2880           0 :                   zout(1, j, nout1) = ap + bp
    2881           0 :                   zout(2, j, nout1) = cp + dbl
    2882           0 :                   zout(1, j, nout5) = ap - bp
    2883           0 :                   zout(2, j, nout5) = cp - dbl
    2884           0 :                   zout(1, j, nout3) = am - dm
    2885           0 :                   zout(2, j, nout3) = cm + bm
    2886           0 :                   zout(1, j, nout7) = am + dm
    2887           0 :                   zout(2, j, nout7) = cm - bm
    2888           0 :                   r = r1 - r5
    2889           0 :                   s = -s3 + s7
    2890           0 :                   ap = r + s
    2891           0 :                   am = r - s
    2892           0 :                   r = s1 - s5
    2893           0 :                   s = r7 - r3
    2894           0 :                   bp = r + s
    2895           0 :                   bm = r - s
    2896           0 :                   r = -s4 + s8
    2897           0 :                   s = r2 - r6
    2898           0 :                   cp = r + s
    2899           0 :                   cm = r - s
    2900           0 :                   r = -s2 + s6
    2901           0 :                   s = r4 - r8
    2902           0 :                   dbl = r + s
    2903           0 :                   dm = r - s
    2904           0 :                   r = (cp + dm)*rt2i
    2905           0 :                   s = (cp - dm)*rt2i
    2906           0 :                   cp = (cm + dbl)*rt2i
    2907           0 :                   dbl = (-cm + dbl)*rt2i
    2908           0 :                   zout(1, j, nout2) = ap + r
    2909           0 :                   zout(2, j, nout2) = bm + s
    2910           0 :                   zout(1, j, nout6) = ap - r
    2911           0 :                   zout(2, j, nout6) = bm - s
    2912           0 :                   zout(1, j, nout4) = am + cp
    2913           0 :                   zout(2, j, nout4) = bp + dbl
    2914           0 :                   zout(1, j, nout8) = am - cp
    2915           0 :                   zout(2, j, nout8) = bp - dbl
    2916             :                END DO
    2917             :             END DO
    2918             :          END IF
    2919             :       ELSE IF (now == 3) THEN
    2920      407397 :          bbs = isign*bb
    2921      407397 :          ia = 1
    2922      407397 :          nin1 = ia - after
    2923      407397 :          nout1 = ia - atn
    2924      903558 :          DO ib = 1, before
    2925      496161 :             nin1 = nin1 + after
    2926      496161 :             nin2 = nin1 + atb
    2927      496161 :             nin3 = nin2 + atb
    2928      496161 :             nout1 = nout1 + atn
    2929      496161 :             nout2 = nout1 + after
    2930      496161 :             nout3 = nout2 + after
    2931     5935626 :             DO j = 1, nfft
    2932     5032068 :                r1 = zin(1, j, nin1)
    2933     5032068 :                s1 = zin(2, j, nin1)
    2934     5032068 :                r2 = zin(1, j, nin2)
    2935     5032068 :                s2 = zin(2, j, nin2)
    2936     5032068 :                r3 = zin(1, j, nin3)
    2937     5032068 :                s3 = zin(2, j, nin3)
    2938     5032068 :                r = r2 + r3
    2939     5032068 :                s = s2 + s3
    2940     5032068 :                zout(1, j, nout1) = r + r1
    2941     5032068 :                zout(2, j, nout1) = s + s1
    2942     5032068 :                r1 = r1 - 0.5_dp*r
    2943     5032068 :                s1 = s1 - 0.5_dp*s
    2944     5032068 :                r2 = bbs*(r2 - r3)
    2945     5032068 :                s2 = bbs*(s2 - s3)
    2946     5032068 :                zout(1, j, nout2) = r1 - s2
    2947     5032068 :                zout(2, j, nout2) = s1 + r2
    2948     5032068 :                zout(1, j, nout3) = r1 + s2
    2949     5528229 :                zout(2, j, nout3) = s1 - r2
    2950             :             END DO
    2951             :          END DO
    2952     8604696 :          DO ia = 2, after
    2953     8197299 :             ias = ia - 1
    2954     8604696 :             IF (4*ias == 3*after) THEN
    2955      151209 :                IF (isign == 1) THEN
    2956       99537 :                   nin1 = ia - after
    2957       99537 :                   nout1 = ia - atn
    2958      199074 :                   DO ib = 1, before
    2959       99537 :                      nin1 = nin1 + after
    2960       99537 :                      nin2 = nin1 + atb
    2961       99537 :                      nin3 = nin2 + atb
    2962       99537 :                      nout1 = nout1 + atn
    2963       99537 :                      nout2 = nout1 + after
    2964       99537 :                      nout3 = nout2 + after
    2965     1084671 :                      DO j = 1, nfft
    2966      885597 :                         r1 = zin(1, j, nin1)
    2967      885597 :                         s1 = zin(2, j, nin1)
    2968      885597 :                         r2 = -zin(2, j, nin2)
    2969      885597 :                         s2 = zin(1, j, nin2)
    2970      885597 :                         r3 = -zin(1, j, nin3)
    2971      885597 :                         s3 = -zin(2, j, nin3)
    2972      885597 :                         r = r2 + r3
    2973      885597 :                         s = s2 + s3
    2974      885597 :                         zout(1, j, nout1) = r + r1
    2975      885597 :                         zout(2, j, nout1) = s + s1
    2976      885597 :                         r1 = r1 - 0.5_dp*r
    2977      885597 :                         s1 = s1 - 0.5_dp*s
    2978      885597 :                         r2 = bbs*(r2 - r3)
    2979      885597 :                         s2 = bbs*(s2 - s3)
    2980      885597 :                         zout(1, j, nout2) = r1 - s2
    2981      885597 :                         zout(2, j, nout2) = s1 + r2
    2982      885597 :                         zout(1, j, nout3) = r1 + s2
    2983      985134 :                         zout(2, j, nout3) = s1 - r2
    2984             :                      END DO
    2985             :                   END DO
    2986             :                ELSE
    2987       51672 :                   nin1 = ia - after
    2988       51672 :                   nout1 = ia - atn
    2989      103344 :                   DO ib = 1, before
    2990       51672 :                      nin1 = nin1 + after
    2991       51672 :                      nin2 = nin1 + atb
    2992       51672 :                      nin3 = nin2 + atb
    2993       51672 :                      nout1 = nout1 + atn
    2994       51672 :                      nout2 = nout1 + after
    2995       51672 :                      nout3 = nout2 + after
    2996      611376 :                      DO j = 1, nfft
    2997      508032 :                         r1 = zin(1, j, nin1)
    2998      508032 :                         s1 = zin(2, j, nin1)
    2999      508032 :                         r2 = zin(2, j, nin2)
    3000      508032 :                         s2 = -zin(1, j, nin2)
    3001      508032 :                         r3 = -zin(1, j, nin3)
    3002      508032 :                         s3 = -zin(2, j, nin3)
    3003      508032 :                         r = r2 + r3
    3004      508032 :                         s = s2 + s3
    3005      508032 :                         zout(1, j, nout1) = r + r1
    3006      508032 :                         zout(2, j, nout1) = s + s1
    3007      508032 :                         r1 = r1 - 0.5_dp*r
    3008      508032 :                         s1 = s1 - 0.5_dp*s
    3009      508032 :                         r2 = bbs*(r2 - r3)
    3010      508032 :                         s2 = bbs*(s2 - s3)
    3011      508032 :                         zout(1, j, nout2) = r1 - s2
    3012      508032 :                         zout(2, j, nout2) = s1 + r2
    3013      508032 :                         zout(1, j, nout3) = r1 + s2
    3014      559704 :                         zout(2, j, nout3) = s1 - r2
    3015             :                      END DO
    3016             :                   END DO
    3017             :                END IF
    3018     8046090 :             ELSE IF (8*ias == 3*after) THEN
    3019       93744 :                IF (isign == 1) THEN
    3020       46872 :                   nin1 = ia - after
    3021       46872 :                   nout1 = ia - atn
    3022       93744 :                   DO ib = 1, before
    3023       46872 :                      nin1 = nin1 + after
    3024       46872 :                      nin2 = nin1 + atb
    3025       46872 :                      nin3 = nin2 + atb
    3026       46872 :                      nout1 = nout1 + atn
    3027       46872 :                      nout2 = nout1 + after
    3028       46872 :                      nout3 = nout2 + after
    3029      428976 :                      DO j = 1, nfft
    3030      335232 :                         r1 = zin(1, j, nin1)
    3031      335232 :                         s1 = zin(2, j, nin1)
    3032      335232 :                         r = zin(1, j, nin2)
    3033      335232 :                         s = zin(2, j, nin2)
    3034      335232 :                         r2 = (r - s)*rt2i
    3035      335232 :                         s2 = (r + s)*rt2i
    3036      335232 :                         r3 = -zin(2, j, nin3)
    3037      335232 :                         s3 = zin(1, j, nin3)
    3038      335232 :                         r = r2 + r3
    3039      335232 :                         s = s2 + s3
    3040      335232 :                         zout(1, j, nout1) = r + r1
    3041      335232 :                         zout(2, j, nout1) = s + s1
    3042      335232 :                         r1 = r1 - 0.5_dp*r
    3043      335232 :                         s1 = s1 - 0.5_dp*s
    3044      335232 :                         r2 = bbs*(r2 - r3)
    3045      335232 :                         s2 = bbs*(s2 - s3)
    3046      335232 :                         zout(1, j, nout2) = r1 - s2
    3047      335232 :                         zout(2, j, nout2) = s1 + r2
    3048      335232 :                         zout(1, j, nout3) = r1 + s2
    3049      382104 :                         zout(2, j, nout3) = s1 - r2
    3050             :                      END DO
    3051             :                   END DO
    3052             :                ELSE
    3053       46872 :                   nin1 = ia - after
    3054       46872 :                   nout1 = ia - atn
    3055       93744 :                   DO ib = 1, before
    3056       46872 :                      nin1 = nin1 + after
    3057       46872 :                      nin2 = nin1 + atb
    3058       46872 :                      nin3 = nin2 + atb
    3059       46872 :                      nout1 = nout1 + atn
    3060       46872 :                      nout2 = nout1 + after
    3061       46872 :                      nout3 = nout2 + after
    3062      428976 :                      DO j = 1, nfft
    3063      335232 :                         r1 = zin(1, j, nin1)
    3064      335232 :                         s1 = zin(2, j, nin1)
    3065      335232 :                         r = zin(1, j, nin2)
    3066      335232 :                         s = zin(2, j, nin2)
    3067      335232 :                         r2 = (r + s)*rt2i
    3068      335232 :                         s2 = (-r + s)*rt2i
    3069      335232 :                         r3 = zin(2, j, nin3)
    3070      335232 :                         s3 = -zin(1, j, nin3)
    3071      335232 :                         r = r2 + r3
    3072      335232 :                         s = s2 + s3
    3073      335232 :                         zout(1, j, nout1) = r + r1
    3074      335232 :                         zout(2, j, nout1) = s + s1
    3075      335232 :                         r1 = r1 - 0.5_dp*r
    3076      335232 :                         s1 = s1 - 0.5_dp*s
    3077      335232 :                         r2 = bbs*(r2 - r3)
    3078      335232 :                         s2 = bbs*(s2 - s3)
    3079      335232 :                         zout(1, j, nout2) = r1 - s2
    3080      335232 :                         zout(2, j, nout2) = s1 + r2
    3081      335232 :                         zout(1, j, nout3) = r1 + s2
    3082      382104 :                         zout(2, j, nout3) = s1 - r2
    3083             :                      END DO
    3084             :                   END DO
    3085             :                END IF
    3086             :             ELSE
    3087     7952346 :                itt = ias*before
    3088     7952346 :                itrig = itt + 1
    3089     7952346 :                cr2 = trig(1, itrig)
    3090     7952346 :                ci2 = trig(2, itrig)
    3091     7952346 :                itrig = itrig + itt
    3092     7952346 :                cr3 = trig(1, itrig)
    3093     7952346 :                ci3 = trig(2, itrig)
    3094     7952346 :                nin1 = ia - after
    3095     7952346 :                nout1 = ia - atn
    3096    16232628 :                DO ib = 1, before
    3097     8280282 :                   nin1 = nin1 + after
    3098     8280282 :                   nin2 = nin1 + atb
    3099     8280282 :                   nin3 = nin2 + atb
    3100     8280282 :                   nout1 = nout1 + atn
    3101     8280282 :                   nout2 = nout1 + after
    3102     8280282 :                   nout3 = nout2 + after
    3103    70791744 :                   DO j = 1, nfft
    3104    54559116 :                      r1 = zin(1, j, nin1)
    3105    54559116 :                      s1 = zin(2, j, nin1)
    3106    54559116 :                      r = zin(1, j, nin2)
    3107    54559116 :                      s = zin(2, j, nin2)
    3108    54559116 :                      r2 = r*cr2 - s*ci2
    3109    54559116 :                      s2 = r*ci2 + s*cr2
    3110    54559116 :                      r = zin(1, j, nin3)
    3111    54559116 :                      s = zin(2, j, nin3)
    3112    54559116 :                      r3 = r*cr3 - s*ci3
    3113    54559116 :                      s3 = r*ci3 + s*cr3
    3114    54559116 :                      r = r2 + r3
    3115    54559116 :                      s = s2 + s3
    3116    54559116 :                      zout(1, j, nout1) = r + r1
    3117    54559116 :                      zout(2, j, nout1) = s + s1
    3118    54559116 :                      r1 = r1 - 0.5_dp*r
    3119    54559116 :                      s1 = s1 - 0.5_dp*s
    3120    54559116 :                      r2 = bbs*(r2 - r3)
    3121    54559116 :                      s2 = bbs*(s2 - s3)
    3122    54559116 :                      zout(1, j, nout2) = r1 - s2
    3123    54559116 :                      zout(2, j, nout2) = s1 + r2
    3124    54559116 :                      zout(1, j, nout3) = r1 + s2
    3125    62839398 :                      zout(2, j, nout3) = s1 - r2
    3126             :                   END DO
    3127             :                END DO
    3128             :             END IF
    3129             :          END DO
    3130             :       ELSE IF (now == 5) THEN
    3131      440873 :          sin2 = isign*sin2p
    3132      440873 :          sin4 = isign*sin4p
    3133      440873 :          ia = 1
    3134      440873 :          nin1 = ia - after
    3135      440873 :          nout1 = ia - atn
    3136     1869743 :          DO ib = 1, before
    3137     1428870 :             nin1 = nin1 + after
    3138     1428870 :             nin2 = nin1 + atb
    3139     1428870 :             nin3 = nin2 + atb
    3140     1428870 :             nin4 = nin3 + atb
    3141     1428870 :             nin5 = nin4 + atb
    3142     1428870 :             nout1 = nout1 + atn
    3143     1428870 :             nout2 = nout1 + after
    3144     1428870 :             nout3 = nout2 + after
    3145     1428870 :             nout4 = nout3 + after
    3146     1428870 :             nout5 = nout4 + after
    3147    12823853 :             DO j = 1, nfft
    3148    10954110 :                r1 = zin(1, j, nin1)
    3149    10954110 :                s1 = zin(2, j, nin1)
    3150    10954110 :                r2 = zin(1, j, nin2)
    3151    10954110 :                s2 = zin(2, j, nin2)
    3152    10954110 :                r3 = zin(1, j, nin3)
    3153    10954110 :                s3 = zin(2, j, nin3)
    3154    10954110 :                r4 = zin(1, j, nin4)
    3155    10954110 :                s4 = zin(2, j, nin4)
    3156    10954110 :                r5 = zin(1, j, nin5)
    3157    10954110 :                s5 = zin(2, j, nin5)
    3158    10954110 :                r25 = r2 + r5
    3159    10954110 :                r34 = r3 + r4
    3160    10954110 :                s25 = s2 - s5
    3161    10954110 :                s34 = s3 - s4
    3162    10954110 :                zout(1, j, nout1) = r1 + r25 + r34
    3163    10954110 :                r = cos2*r25 + cos4*r34 + r1
    3164    10954110 :                s = sin2*s25 + sin4*s34
    3165    10954110 :                zout(1, j, nout2) = r - s
    3166    10954110 :                zout(1, j, nout5) = r + s
    3167    10954110 :                r = cos4*r25 + cos2*r34 + r1
    3168    10954110 :                s = sin4*s25 - sin2*s34
    3169    10954110 :                zout(1, j, nout3) = r - s
    3170    10954110 :                zout(1, j, nout4) = r + s
    3171    10954110 :                r25 = r2 - r5
    3172    10954110 :                r34 = r3 - r4
    3173    10954110 :                s25 = s2 + s5
    3174    10954110 :                s34 = s3 + s4
    3175    10954110 :                zout(2, j, nout1) = s1 + s25 + s34
    3176    10954110 :                r = cos2*s25 + cos4*s34 + s1
    3177    10954110 :                s = sin2*r25 + sin4*r34
    3178    10954110 :                zout(2, j, nout2) = r + s
    3179    10954110 :                zout(2, j, nout5) = r - s
    3180    10954110 :                r = cos4*s25 + cos2*s34 + s1
    3181    10954110 :                s = sin4*r25 - sin2*r34
    3182    10954110 :                zout(2, j, nout3) = r + s
    3183    12382980 :                zout(2, j, nout4) = r - s
    3184             :             END DO
    3185             :          END DO
    3186     2311145 :          DO ia = 2, after
    3187     1870272 :             ias = ia - 1
    3188     2311145 :             IF (8*ias == 5*after) THEN
    3189           0 :                IF (isign == 1) THEN
    3190           0 :                   nin1 = ia - after
    3191           0 :                   nout1 = ia - atn
    3192           0 :                   DO ib = 1, before
    3193           0 :                      nin1 = nin1 + after
    3194           0 :                      nin2 = nin1 + atb
    3195           0 :                      nin3 = nin2 + atb
    3196           0 :                      nin4 = nin3 + atb
    3197           0 :                      nin5 = nin4 + atb
    3198           0 :                      nout1 = nout1 + atn
    3199           0 :                      nout2 = nout1 + after
    3200           0 :                      nout3 = nout2 + after
    3201           0 :                      nout4 = nout3 + after
    3202           0 :                      nout5 = nout4 + after
    3203           0 :                      DO j = 1, nfft
    3204           0 :                         r1 = zin(1, j, nin1)
    3205           0 :                         s1 = zin(2, j, nin1)
    3206           0 :                         r = zin(1, j, nin2)
    3207           0 :                         s = zin(2, j, nin2)
    3208           0 :                         r2 = (r - s)*rt2i
    3209           0 :                         s2 = (r + s)*rt2i
    3210           0 :                         r3 = -zin(2, j, nin3)
    3211           0 :                         s3 = zin(1, j, nin3)
    3212           0 :                         r = zin(1, j, nin4)
    3213           0 :                         s = zin(2, j, nin4)
    3214           0 :                         r4 = -(r + s)*rt2i
    3215           0 :                         s4 = (r - s)*rt2i
    3216           0 :                         r5 = -zin(1, j, nin5)
    3217           0 :                         s5 = -zin(2, j, nin5)
    3218           0 :                         r25 = r2 + r5
    3219           0 :                         r34 = r3 + r4
    3220           0 :                         s25 = s2 - s5
    3221           0 :                         s34 = s3 - s4
    3222           0 :                         zout(1, j, nout1) = r1 + r25 + r34
    3223           0 :                         r = cos2*r25 + cos4*r34 + r1
    3224           0 :                         s = sin2*s25 + sin4*s34
    3225           0 :                         zout(1, j, nout2) = r - s
    3226           0 :                         zout(1, j, nout5) = r + s
    3227           0 :                         r = cos4*r25 + cos2*r34 + r1
    3228           0 :                         s = sin4*s25 - sin2*s34
    3229           0 :                         zout(1, j, nout3) = r - s
    3230           0 :                         zout(1, j, nout4) = r + s
    3231           0 :                         r25 = r2 - r5
    3232           0 :                         r34 = r3 - r4
    3233           0 :                         s25 = s2 + s5
    3234           0 :                         s34 = s3 + s4
    3235           0 :                         zout(2, j, nout1) = s1 + s25 + s34
    3236           0 :                         r = cos2*s25 + cos4*s34 + s1
    3237           0 :                         s = sin2*r25 + sin4*r34
    3238           0 :                         zout(2, j, nout2) = r + s
    3239           0 :                         zout(2, j, nout5) = r - s
    3240           0 :                         r = cos4*s25 + cos2*s34 + s1
    3241           0 :                         s = sin4*r25 - sin2*r34
    3242           0 :                         zout(2, j, nout3) = r + s
    3243           0 :                         zout(2, j, nout4) = r - s
    3244             :                      END DO
    3245             :                   END DO
    3246             :                ELSE
    3247           0 :                   nin1 = ia - after
    3248           0 :                   nout1 = ia - atn
    3249           0 :                   DO ib = 1, before
    3250           0 :                      nin1 = nin1 + after
    3251           0 :                      nin2 = nin1 + atb
    3252           0 :                      nin3 = nin2 + atb
    3253           0 :                      nin4 = nin3 + atb
    3254           0 :                      nin5 = nin4 + atb
    3255           0 :                      nout1 = nout1 + atn
    3256           0 :                      nout2 = nout1 + after
    3257           0 :                      nout3 = nout2 + after
    3258           0 :                      nout4 = nout3 + after
    3259           0 :                      nout5 = nout4 + after
    3260           0 :                      DO j = 1, nfft
    3261           0 :                         r1 = zin(1, j, nin1)
    3262           0 :                         s1 = zin(2, j, nin1)
    3263           0 :                         r = zin(1, j, nin2)
    3264           0 :                         s = zin(2, j, nin2)
    3265           0 :                         r2 = (r + s)*rt2i
    3266           0 :                         s2 = (-r + s)*rt2i
    3267           0 :                         r3 = zin(2, j, nin3)
    3268           0 :                         s3 = -zin(1, j, nin3)
    3269           0 :                         r = zin(1, j, nin4)
    3270           0 :                         s = zin(2, j, nin4)
    3271           0 :                         r4 = (s - r)*rt2i
    3272           0 :                         s4 = -(r + s)*rt2i
    3273           0 :                         r5 = -zin(1, j, nin5)
    3274           0 :                         s5 = -zin(2, j, nin5)
    3275           0 :                         r25 = r2 + r5
    3276           0 :                         r34 = r3 + r4
    3277           0 :                         s25 = s2 - s5
    3278           0 :                         s34 = s3 - s4
    3279           0 :                         zout(1, j, nout1) = r1 + r25 + r34
    3280           0 :                         r = cos2*r25 + cos4*r34 + r1
    3281           0 :                         s = sin2*s25 + sin4*s34
    3282           0 :                         zout(1, j, nout2) = r - s
    3283           0 :                         zout(1, j, nout5) = r + s
    3284           0 :                         r = cos4*r25 + cos2*r34 + r1
    3285           0 :                         s = sin4*s25 - sin2*s34
    3286           0 :                         zout(1, j, nout3) = r - s
    3287           0 :                         zout(1, j, nout4) = r + s
    3288           0 :                         r25 = r2 - r5
    3289           0 :                         r34 = r3 - r4
    3290           0 :                         s25 = s2 + s5
    3291           0 :                         s34 = s3 + s4
    3292           0 :                         zout(2, j, nout1) = s1 + s25 + s34
    3293           0 :                         r = cos2*s25 + cos4*s34 + s1
    3294           0 :                         s = sin2*r25 + sin4*r34
    3295           0 :                         zout(2, j, nout2) = r + s
    3296           0 :                         zout(2, j, nout5) = r - s
    3297           0 :                         r = cos4*s25 + cos2*s34 + s1
    3298           0 :                         s = sin4*r25 - sin2*r34
    3299           0 :                         zout(2, j, nout3) = r + s
    3300           0 :                         zout(2, j, nout4) = r - s
    3301             :                      END DO
    3302             :                   END DO
    3303             :                END IF
    3304             :             ELSE
    3305     1870272 :                ias = ia - 1
    3306     1870272 :                itt = ias*before
    3307     1870272 :                itrig = itt + 1
    3308     1870272 :                cr2 = trig(1, itrig)
    3309     1870272 :                ci2 = trig(2, itrig)
    3310     1870272 :                itrig = itrig + itt
    3311     1870272 :                cr3 = trig(1, itrig)
    3312     1870272 :                ci3 = trig(2, itrig)
    3313     1870272 :                itrig = itrig + itt
    3314     1870272 :                cr4 = trig(1, itrig)
    3315     1870272 :                ci4 = trig(2, itrig)
    3316     1870272 :                itrig = itrig + itt
    3317     1870272 :                cr5 = trig(1, itrig)
    3318     1870272 :                ci5 = trig(2, itrig)
    3319     1870272 :                nin1 = ia - after
    3320     1870272 :                nout1 = ia - atn
    3321     7045344 :                DO ib = 1, before
    3322     5175072 :                   nin1 = nin1 + after
    3323     5175072 :                   nin2 = nin1 + atb
    3324     5175072 :                   nin3 = nin2 + atb
    3325     5175072 :                   nin4 = nin3 + atb
    3326     5175072 :                   nin5 = nin4 + atb
    3327     5175072 :                   nout1 = nout1 + atn
    3328     5175072 :                   nout2 = nout1 + after
    3329     5175072 :                   nout3 = nout2 + after
    3330     5175072 :                   nout4 = nout3 + after
    3331     5175072 :                   nout5 = nout4 + after
    3332    35836344 :                   DO j = 1, nfft
    3333    28791000 :                      r1 = zin(1, j, nin1)
    3334    28791000 :                      s1 = zin(2, j, nin1)
    3335    28791000 :                      r = zin(1, j, nin2)
    3336    28791000 :                      s = zin(2, j, nin2)
    3337    28791000 :                      r2 = r*cr2 - s*ci2
    3338    28791000 :                      s2 = r*ci2 + s*cr2
    3339    28791000 :                      r = zin(1, j, nin3)
    3340    28791000 :                      s = zin(2, j, nin3)
    3341    28791000 :                      r3 = r*cr3 - s*ci3
    3342    28791000 :                      s3 = r*ci3 + s*cr3
    3343    28791000 :                      r = zin(1, j, nin4)
    3344    28791000 :                      s = zin(2, j, nin4)
    3345    28791000 :                      r4 = r*cr4 - s*ci4
    3346    28791000 :                      s4 = r*ci4 + s*cr4
    3347    28791000 :                      r = zin(1, j, nin5)
    3348    28791000 :                      s = zin(2, j, nin5)
    3349    28791000 :                      r5 = r*cr5 - s*ci5
    3350    28791000 :                      s5 = r*ci5 + s*cr5
    3351    28791000 :                      r25 = r2 + r5
    3352    28791000 :                      r34 = r3 + r4
    3353    28791000 :                      s25 = s2 - s5
    3354    28791000 :                      s34 = s3 - s4
    3355    28791000 :                      zout(1, j, nout1) = r1 + r25 + r34
    3356    28791000 :                      r = cos2*r25 + cos4*r34 + r1
    3357    28791000 :                      s = sin2*s25 + sin4*s34
    3358    28791000 :                      zout(1, j, nout2) = r - s
    3359    28791000 :                      zout(1, j, nout5) = r + s
    3360    28791000 :                      r = cos4*r25 + cos2*r34 + r1
    3361    28791000 :                      s = sin4*s25 - sin2*s34
    3362    28791000 :                      zout(1, j, nout3) = r - s
    3363    28791000 :                      zout(1, j, nout4) = r + s
    3364    28791000 :                      r25 = r2 - r5
    3365    28791000 :                      r34 = r3 - r4
    3366    28791000 :                      s25 = s2 + s5
    3367    28791000 :                      s34 = s3 + s4
    3368    28791000 :                      zout(2, j, nout1) = s1 + s25 + s34
    3369    28791000 :                      r = cos2*s25 + cos4*s34 + s1
    3370    28791000 :                      s = sin2*r25 + sin4*r34
    3371    28791000 :                      zout(2, j, nout2) = r + s
    3372    28791000 :                      zout(2, j, nout5) = r - s
    3373    28791000 :                      r = cos4*s25 + cos2*s34 + s1
    3374    28791000 :                      s = sin4*r25 - sin2*r34
    3375    28791000 :                      zout(2, j, nout3) = r + s
    3376    33966072 :                      zout(2, j, nout4) = r - s
    3377             :                   END DO
    3378             :                END DO
    3379             :             END IF
    3380             :          END DO
    3381             :       ELSE IF (now == 6) THEN
    3382      196944 :          bbs = isign*bb
    3383      196944 :          ia = 1
    3384      196944 :          nin1 = ia - after
    3385      196944 :          nout1 = ia - atn
    3386     2977896 :          DO ib = 1, before
    3387     2780952 :             nin1 = nin1 + after
    3388     2780952 :             nin2 = nin1 + atb
    3389     2780952 :             nin3 = nin2 + atb
    3390     2780952 :             nin4 = nin3 + atb
    3391     2780952 :             nin5 = nin4 + atb
    3392     2780952 :             nin6 = nin5 + atb
    3393     2780952 :             nout1 = nout1 + atn
    3394     2780952 :             nout2 = nout1 + after
    3395     2780952 :             nout3 = nout2 + after
    3396     2780952 :             nout4 = nout3 + after
    3397     2780952 :             nout5 = nout4 + after
    3398     2780952 :             nout6 = nout5 + after
    3399    17795172 :             DO j = 1, nfft
    3400    14817276 :                r2 = zin(1, j, nin3)
    3401    14817276 :                s2 = zin(2, j, nin3)
    3402    14817276 :                r3 = zin(1, j, nin5)
    3403    14817276 :                s3 = zin(2, j, nin5)
    3404    14817276 :                r = r2 + r3
    3405    14817276 :                s = s2 + s3
    3406    14817276 :                r1 = zin(1, j, nin1)
    3407    14817276 :                s1 = zin(2, j, nin1)
    3408    14817276 :                ur1 = r + r1
    3409    14817276 :                ui1 = s + s1
    3410    14817276 :                r1 = r1 - 0.5_dp*r
    3411    14817276 :                s1 = s1 - 0.5_dp*s
    3412    14817276 :                r = r2 - r3
    3413    14817276 :                s = s2 - s3
    3414    14817276 :                ur2 = r1 - s*bbs
    3415    14817276 :                ui2 = s1 + r*bbs
    3416    14817276 :                ur3 = r1 + s*bbs
    3417    14817276 :                ui3 = s1 - r*bbs
    3418             : 
    3419    14817276 :                r2 = zin(1, j, nin6)
    3420    14817276 :                s2 = zin(2, j, nin6)
    3421    14817276 :                r3 = zin(1, j, nin2)
    3422    14817276 :                s3 = zin(2, j, nin2)
    3423    14817276 :                r = r2 + r3
    3424    14817276 :                s = s2 + s3
    3425    14817276 :                r1 = zin(1, j, nin4)
    3426    14817276 :                s1 = zin(2, j, nin4)
    3427    14817276 :                vr1 = r + r1
    3428    14817276 :                vi1 = s + s1
    3429    14817276 :                r1 = r1 - 0.5_dp*r
    3430    14817276 :                s1 = s1 - 0.5_dp*s
    3431    14817276 :                r = r2 - r3
    3432    14817276 :                s = s2 - s3
    3433    14817276 :                vr2 = r1 - s*bbs
    3434    14817276 :                vi2 = s1 + r*bbs
    3435    14817276 :                vr3 = r1 + s*bbs
    3436    14817276 :                vi3 = s1 - r*bbs
    3437             : 
    3438    14817276 :                zout(1, j, nout1) = ur1 + vr1
    3439    14817276 :                zout(2, j, nout1) = ui1 + vi1
    3440    14817276 :                zout(1, j, nout5) = ur2 + vr2
    3441    14817276 :                zout(2, j, nout5) = ui2 + vi2
    3442    14817276 :                zout(1, j, nout3) = ur3 + vr3
    3443    14817276 :                zout(2, j, nout3) = ui3 + vi3
    3444    14817276 :                zout(1, j, nout4) = ur1 - vr1
    3445    14817276 :                zout(2, j, nout4) = ui1 - vi1
    3446    14817276 :                zout(1, j, nout2) = ur2 - vr2
    3447    14817276 :                zout(2, j, nout2) = ui2 - vi2
    3448    14817276 :                zout(1, j, nout6) = ur3 - vr3
    3449    17598228 :                zout(2, j, nout6) = ui3 - vi3
    3450             :             END DO
    3451             :          END DO
    3452             :       ELSE
    3453           0 :          CPABORT('Error fftstp')
    3454             :       END IF
    3455             : 
    3456             : !-----------------------------------------------------------------------------!
    3457             : 
    3458     1310530 :    END SUBROUTINE fftstp
    3459             : 
    3460             : !-----------------------------------------------------------------------------!
    3461             : !-----------------------------------------------------------------------------!
    3462             : !  Copyright (C) Stefan Goedecker, Lausanne, Switzerland, August 1, 1991
    3463             : !  Copyright (C) Stefan Goedecker, Cornell University, Ithaca, USA, 1994
    3464             : !  Copyright (C) Stefan Goedecker, MPI Stuttgart, Germany, 1999
    3465             : !  This file is distributed under the terms of the
    3466             : !  GNU General Public License version 2 (or later),
    3467             : !  see http://www.gnu.org/copyleft/gpl.txt .
    3468             : !-----------------------------------------------------------------------------!
    3469             : !  S. Goedecker: Rotating a three-dimensional array in optimal
    3470             : !  positions for vector processing: Case study for a three-dimensional Fast
    3471             : !  Fourier Transform, Comp. Phys. Commun. 76, 294 (1993)
    3472             : ! **************************************************************************************************
    3473             : !> \brief ...
    3474             : !> \param n ...
    3475             : !> \param trig ...
    3476             : !> \param after ...
    3477             : !> \param before ...
    3478             : !> \param now ...
    3479             : !> \param isign ...
    3480             : !> \param ic ...
    3481             : ! **************************************************************************************************
    3482       25890 :    SUBROUTINE ctrig(n, trig, after, before, now, isign, ic)
    3483             :       INTEGER, INTENT(IN)                                :: n
    3484             :       REAL(dp), DIMENSION(2, ctrig_length), INTENT(OUT)  :: trig
    3485             :       INTEGER, DIMENSION(7), INTENT(OUT)                 :: after, before, now
    3486             :       INTEGER, INTENT(IN)                                :: isign
    3487             :       INTEGER, INTENT(OUT)                               :: ic
    3488             : 
    3489             :       INTEGER, PARAMETER                                 :: nt = 82
    3490             :       INTEGER, DIMENSION(7, nt), PARAMETER :: idata = RESHAPE((/3, 3, 1, 1, 1, 1, 1, 4, 4, 1, 1, 1,&
    3491             :          1, 1, 5, 5, 1, 1, 1, 1, 1, 6, 6, 1, 1, 1, 1, 1, 8, 8, 1, 1, 1, 1, 1, 9, 3, 3, 1, 1, 1, 1, &
    3492             :          12, 4, 3, 1, 1, 1, 1, 15, 5, 3, 1, 1, 1, 1, 16, 4, 4, 1, 1, 1, 1, 18, 6, 3, 1, 1, 1, 1, 20&
    3493             :          , 5, 4, 1, 1, 1, 1, 24, 8, 3, 1, 1, 1, 1, 25, 5, 5, 1, 1, 1, 1, 27, 3, 3, 3, 1, 1, 1, 30, &
    3494             :          6, 5, 1, 1, 1, 1, 32, 8, 4, 1, 1, 1, 1, 36, 4, 3, 3, 1, 1, 1, 40, 8, 5, 1, 1, 1, 1, 45, 5 &
    3495             :          , 3, 3, 1, 1, 1, 48, 4, 4, 3, 1, 1, 1, 54, 6, 3, 3, 1, 1, 1, 60, 5, 4, 3, 1, 1, 1, 64, 4, &
    3496             :          4, 4, 1, 1, 1, 72, 8, 3, 3, 1, 1, 1, 75, 5, 5, 3, 1, 1, 1, 80, 5, 4, 4, 1, 1, 1, 81, 3, 3 &
    3497             :          , 3, 3, 1, 1, 90, 6, 5, 3, 1, 1, 1, 96, 8, 4, 3, 1, 1, 1, 100, 5, 5, 4, 1, 1, 1, 108, 4, 3&
    3498             :          , 3, 3, 1, 1, 120, 8, 5, 3, 1, 1, 1, 125, 5, 5, 5, 1, 1, 1, 128, 8, 4, 4, 1, 1, 1, 135, 5 &
    3499             :          , 3, 3, 3, 1, 1, 144, 4, 4, 3, 3, 1, 1, 150, 6, 5, 5, 1, 1, 1, 160, 8, 5, 4, 1, 1, 1, 162,&
    3500             :          6, 3, 3, 3, 1, 1, 180, 5, 4, 3, 3, 1, 1, 192, 4, 4, 4, 3, 1, 1, 200, 8, 5, 5, 1, 1, 1, 216&
    3501             :          , 8, 3, 3, 3, 1, 1, 225, 5, 5, 3, 3, 1, 1, 240, 5, 4, 4, 3, 1, 1, 243, 3, 3, 3, 3, 3, 1, &
    3502             :          256, 4, 4, 4, 4, 1, 1, 270, 6, 5, 3, 3, 1, 1, 288, 8, 4, 3, 3, 1, 1, 300, 5, 5, 4, 3, 1, 1&
    3503             :          , 320, 5, 4, 4, 4, 1, 1, 324, 4, 3, 3, 3, 3, 1, 360, 8, 5, 3, 3, 1, 1, 375, 5, 5, 5, 3, 1,&
    3504             :          1, 384, 8, 4, 4, 3, 1, 1, 400, 5, 5, 4, 4, 1, 1, 405, 5, 3, 3, 3, 3, 1, 432, 4, 4, 3, 3, 3&
    3505             :          , 1, 450, 6, 5, 5, 3, 1, 1, 480, 8, 5, 4, 3, 1, 1, 486, 6, 3, 3, 3, 3, 1, 500, 5, 5, 5, 4,&
    3506             :          1, 1, 512, 8, 4, 4, 4, 1, 1, 540, 5, 4, 3, 3, 3, 1, 576, 4, 4, 4, 3, 3, 1, 600, 8, 5, 5, 3&
    3507             :          , 1, 1, 625, 5, 5, 5, 5, 1, 1, 640, 8, 5, 4, 4, 1, 1, 648, 8, 3, 3, 3, 3, 1, 675, 5, 5, 3,&
    3508             :          3, 3, 1, 720, 5, 4, 4, 3, 3, 1, 729, 3, 3, 3, 3, 3, 3, 750, 6, 5, 5, 5, 1, 1, 768, 4, 4, 4&
    3509             :          , 4, 3, 1, 800, 8, 5, 5, 4, 1, 1, 810, 6, 5, 3, 3, 3, 1, 864, 8, 4, 3, 3, 3, 1, 900, 5, 5,&
    3510             :          4, 3, 3, 1, 960, 5, 4, 4, 4, 3, 1, 972, 4, 3, 3, 3, 3, 3, 1000, 8, 5, 5, 5, 1, 1, &
    3511             :          ctrig_length, 4, 4, 4, 4, 4, 1/), (/7, nt/))
    3512             : 
    3513             :       INTEGER                                            :: i, itt, j
    3514             :       REAL(dp)                                           :: angle, twopi
    3515             : 
    3516      258882 :       mloop: DO i = 1, nt
    3517      258882 :          IF (n == idata(1, i)) THEN
    3518       25890 :             ic = 0
    3519       74430 :             DO j = 1, 6
    3520       74430 :                itt = idata(1 + j, i)
    3521       74430 :                IF (itt > 1) THEN
    3522       48540 :                   ic = ic + 1
    3523       48540 :                   now(j) = idata(1 + j, i)
    3524             :                ELSE
    3525             :                   EXIT mloop
    3526             :                END IF
    3527             :             END DO
    3528             :             EXIT mloop
    3529             :          END IF
    3530      258882 :          IF (i == nt) THEN
    3531           0 :             WRITE (*, '(A,i5,A)') " Value of ", n, &
    3532           0 :                " not allowed for fft, allowed values are:"
    3533           0 :             WRITE (*, '(15i5)') (idata(1, j), j=1, nt)
    3534           0 :             CPABORT('ctrig')
    3535             :          END IF
    3536             :       END DO mloop
    3537             : 
    3538       25890 :       after(1) = 1
    3539       25890 :       before(ic) = 1
    3540       48540 :       DO i = 2, ic
    3541       22650 :          after(i) = after(i - 1)*now(i - 1)
    3542       48540 :          before(ic - i + 1) = before(ic - i + 2)*now(ic - i + 2)
    3543             :       END DO
    3544             : 
    3545       25890 :       twopi = 8._dp*ATAN(1._dp)
    3546       25890 :       angle = isign*twopi/REAL(n, dp)
    3547       25890 :       trig(1, 1) = 1._dp
    3548       25890 :       trig(2, 1) = 0._dp
    3549      503934 :       DO i = 1, n - 1
    3550      478044 :          trig(1, i + 1) = COS(REAL(i, dp)*angle)
    3551      503934 :          trig(2, i + 1) = SIN(REAL(i, dp)*angle)
    3552             :       END DO
    3553             : 
    3554       25890 :    END SUBROUTINE ctrig
    3555             : 
    3556             : ! **************************************************************************************************
    3557             : !> \brief ...
    3558             : !> \param n ...
    3559             : !> \param m ...
    3560             : !> \param a ...
    3561             : !> \param lda ...
    3562             : !> \param b ...
    3563             : !> \param ldb ...
    3564             : ! **************************************************************************************************
    3565        3156 :    SUBROUTINE matmov(n, m, a, lda, b, ldb)
    3566             :       INTEGER                                            :: n, m, lda
    3567             :       COMPLEX(dp)                                        :: a(lda, *)
    3568             :       INTEGER                                            :: ldb
    3569             :       COMPLEX(dp)                                        :: b(ldb, *)
    3570             : 
    3571      423036 :       b(1:n, 1:m) = a(1:n, 1:m)
    3572        3156 :    END SUBROUTINE matmov
    3573             : 
    3574             : ! **************************************************************************************************
    3575             : !> \brief ...
    3576             : !> \param a ...
    3577             : !> \param lda ...
    3578             : !> \param m ...
    3579             : !> \param n ...
    3580             : !> \param b ...
    3581             : !> \param ldb ...
    3582             : ! **************************************************************************************************
    3583        1356 :    SUBROUTINE zgetmo(a, lda, m, n, b, ldb)
    3584             :       INTEGER                                            :: lda, m, n
    3585             :       COMPLEX(dp)                                        :: a(lda, n)
    3586             :       INTEGER                                            :: ldb
    3587             :       COMPLEX(dp)                                        :: b(ldb, m)
    3588             : 
    3589      172212 :       b(1:n, 1:m) = TRANSPOSE(a(1:m, 1:n))
    3590        1356 :    END SUBROUTINE zgetmo
    3591             : 
    3592             : ! **************************************************************************************************
    3593             : !> \brief ...
    3594             : !> \param n ...
    3595             : !> \param sc ...
    3596             : !> \param a ...
    3597             : ! **************************************************************************************************
    3598      180132 :    SUBROUTINE scaled(n, sc, a)
    3599             :       INTEGER                                            :: n
    3600             :       REAL(dp)                                           :: sc
    3601             :       COMPLEX(dp)                                        :: a(n)
    3602             : 
    3603      180132 :       CALL dscal(n, sc, a, 1)
    3604             : 
    3605      180132 :    END SUBROUTINE scaled
    3606             : 
    3607             : END MODULE mltfftsg_tools

Generated by: LCOV version 1.15