LCOV - code coverage report
Current view: top level - src/53_ffts - fftbox_op_driver.finc Coverage Total Hit
Test: coverage.info Lines: 91.4 % 35 32
Test Date: 2026-09-20 15:27:41 Functions: - 0 0

            Line data    Source code
       1              : block 
       2              : 
       3              : !Local variables ------------------------------
       4              : !scalars
       5              :  integer :: ifft,ix,iy,iz,nx,ny,nz,ldx,ldy,ldz,dat,fftalga,padat
       6              :  real(dp) :: fact
       7              :  character(len=500) :: msg
       8              : !arrays
       9         2958 :  real(dp),allocatable :: arr(:,:,:,:),ftarr(:,:,:,:) 
      10              : 
      11              : ! *************************************************************************
      12              : 
      13         2958 :   nx = plan%dims(1);   ny=plan%dims(2);   nz=plan%dims(3)
      14         2958 :  ldx = plan%embed(1); ldy=plan%embed(2); ldz=plan%embed(3)
      15         2958 :  fftalga = plan%fftalg/100
      16              : 
      17            0 :  select case (fftalga)
      18              :  case (FFT_FFTW3) 
      19            0 :    call fftw3_c2c_op(nx, ny, nz, ldx, ldy, ldz, ndat__, iscale__, isign, ff, gg)
      20              : 
      21              :  case (FFT_DFTI) 
      22         2890 :    call dfti_c2c_op(nx, ny, nz, ldx, ldy, ldz, ndat__, iscale__, isign, ff, gg)
      23              : 
      24              :  case (FFT_SG, FFT_SG2002)
      25              :    ! Fallback to sg_fft_cc 
      26              :    ! 1) we have to change shape and type complex -> double because we have an explicit interface. 
      27              :    ! 2) Cannot use [ZC]copy: this is a template used both for single and double precision.
      28              : 
      29          340 :    ABI_MALLOC(arr,   (2,ldx,ldy,ldz))
      30          272 :    ABI_MALLOC(ftarr, (2,ldx,ldy,ldz))
      31              : 
      32          208 :    do dat=1,ndat__
      33          140 :      padat = (dat-1) * plan%ldxyz
      34              :      !  
      35              :      ! Copy input data in arr
      36         3740 :      do iz=1,nz
      37       198140 :        do iy=1,ny
      38     15166800 :          do ix=1,nx
      39     14968800 :            ifft = ix + (iy-1)*ldx + (iz-1)*ldx*ldy + padat
      40     14968800 :            arr(1,ix,iy,iz) = DBLE (ff(ifft))
      41     15163200 :            arr(2,ix,iy,iz) = AIMAG(ff(ifft)) 
      42              :          end do 
      43              :        end do
      44              :      end do
      45              : 
      46              :      ! c2c with ndat = 1
      47          140 :      call sg_fft_cc(plan%fftcache,nx,ny,nz,ldx,ldy,ldz,1,isign,arr,ftarr)
      48              : 
      49          208 :      if (isign == -1) then  
      50              :        ! Copy and scale the transform
      51           70 :        fact = one/plan%nfft
      52           70 :        if (iscale__ == 0) fact = one
      53         1870 :        do iz=1,nz
      54        99070 :          do iy=1,ny
      55      7583400 :            do ix=1,nx
      56      7484400 :              ifft = ix + (iy-1)*ldx + (iz-1)*ldx*ldy + padat
      57      7581600 :              gg(ifft) = fact * DCMPLX(ftarr(1,ix,iy,iz), ftarr(2,ix,iy,iz))
      58              :            end do 
      59              :          end do
      60              :        end do
      61              :        !
      62              :      else
      63              :        ! Direct copy.
      64         1870 :        do iz=1,nz
      65        99070 :          do iy=1,ny
      66      7583400 :            do ix=1,nx
      67      7484400 :              ifft = ix + (iy-1)*ldx + (iz-1)*ldx*ldy + padat
      68      7581600 :              gg(ifft) = DCMPLX(ftarr(1,ix,iy,iz), ftarr(2,ix,iy,iz))
      69              :            end do 
      70              :          end do
      71              :        end do
      72              :      end if
      73              : 
      74              :    end do
      75              : 
      76           68 :    ABI_FREE(arr)
      77           68 :    ABI_FREE(ftarr)
      78              : 
      79              :  case default
      80            0 :    write(msg,'(a,i0)')"Wrong fftalga ",fftalga
      81         2958 :    ABI_ERROR(msg)
      82              :  end select
      83              : 
      84              : end block
        

Generated by: LCOV version 2.3-1