LCOV - code coverage report
Current view: top level - src/53_ffts - fftbox_ip_driver.finc Coverage Total Hit
Test: coverage.info Lines: 91.4 % 35 32
Test Date: 2026-11-10 13:31:01 Functions: - 0 0
Branches: 66.9 % 136 91

             Branch data     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                 :       12223 :  real(dp),allocatable :: arr(:,:,:,:),ftarr(:,:,:,:)
      10                 :             : ! *************************************************************************
      11                 :             : 
      12                 :       12223 :   nx = plan%dims(1);   ny=plan%dims(2);   nz=plan%dims(3)
      13                 :       12223 :  ldx = plan%embed(1); ldy=plan%embed(2); ldz=plan%embed(3)
      14                 :       12223 :  fftalga = plan%fftalg/100
      15                 :             : 
      16                 :             :  ! Cpu version
      17                 :           0 :  select case (fftalga)
      18                 :             :  case (FFT_FFTW3)
      19                 :           0 :    call fftw3_c2c_ip(nx, ny, nz, ldx, ldy, ldz, ndat__, iscale__, isign, ff)
      20                 :             : 
      21                 :             :  case (FFT_DFTI)
      22                 :       12145 :    call dfti_c2c_ip(nx, ny, nz, ldx, ldy, ldz, ndat__, iscale__, isign, ff)
      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) transform is out-of-place here
      28                 :             :    ! 3) Cannot use [ZC]copy: this is a template used both for single and double precision.
      29                 :             : 
      30                 :             :    ! MG: Well, now one can use, intrinsic :: iso_c_binding for dp version but there's no point in optimizing
      31                 :             :    !     this part as fftw3/dfti are much faster.
      32                 :             : 
      33   [ -  +  +  -  :         390 :    ABI_MALLOC(arr,   (2, ldx, ldy, ldz))
          -  +  +  -  -  
          +  +  -  +  -  
          +  -  -  +  -  
          +  -  +  +  -  
          -  +  +  -  -  
          +  +  -  +  -  
          +  -  -  +  -  
                      + ]
      34   [ -  +  +  -  :         312 :    ABI_MALLOC(ftarr, (2, ldx, ldy, ldz))
          -  +  +  -  -  
          +  +  -  -  +  
          +  -  -  +  +  
          -  -  +  +  -  
          -  +  +  -  -  
                +  +  - ]
      35                 :             : 
      36   [ +  +  +  + ]:         228 :    do dat=1,ndat__
      37                 :         150 :      padat = (dat-1) * plan%ldxyz
      38                 :             : 
      39                 :             :      ! Copy input data in arr
      40   [ +  +  +  + ]:        4650 :      do iz=1,nz
      41   [ +  +  +  + ]:      280050 :        do iy=1,ny
      42   [ +  +  +  + ]:    22538700 :          do ix=1,nx
      43                 :    22258800 :            ifft = ix + (iy-1)*ldx + (iz-1)*ldx*ldy + padat
      44                 :    22258800 :            arr(1,ix,iy,iz) = DBLE (ff(ifft))
      45                 :    22534200 :            arr(2,ix,iy,iz) = AIMAG(ff(ifft))
      46                 :             :          end do
      47                 :             :        end do
      48                 :             :      end do
      49                 :             : 
      50                 :             :      ! c2c with ndat = 1
      51                 :         150 :      call sg_fft_cc(plan%fftcache, nx, ny, nz, ldx, ldy, ldz, 1, isign, arr, ftarr)
      52                 :             :      !
      53                 :             :      ! Copy results stored in ftarr
      54                 :             :      !
      55   [ +  +  +  + ]:         228 :      if (isign == -1) then
      56                 :             :        ! Copy and scale the transform
      57                 :          80 :        fact = one/plan%nfft
      58   [ -  +  +  + ]:          80 :        if (iscale__ == 0) fact = one
      59   [ +  +  +  + ]:        2780 :        do iz=1,nz
      60   [ +  +  +  + ]:      180980 :          do iy=1,ny
      61   [ +  +  +  + ]:    14955300 :            do ix=1,nx
      62                 :    14774400 :              ifft = ix + (iy-1)*ldx + (iz-1)*ldx*ldy + padat
      63                 :    14952600 :              ff(ifft) = fact * DCMPLX(ftarr(1,ix,iy,iz), ftarr(2,ix,iy,iz))
      64                 :             :            end do
      65                 :             :          end do
      66                 :             :        end do
      67                 :             :        !
      68                 :             :      else
      69                 :             :        ! Direct copy.
      70   [ +  +  +  + ]:        1870 :        do iz=1,nz
      71   [ +  +  +  + ]:       99070 :          do iy=1,ny
      72   [ +  +  +  + ]:     7583400 :            do ix=1,nx
      73                 :     7484400 :              ifft = ix + (iy-1)*ldx + (iz-1)*ldx*ldy + padat
      74                 :     7581600 :              ff(ifft) = DCMPLX(ftarr(1,ix,iy,iz), ftarr(2,ix,iy,iz))
      75                 :             :            end do
      76                 :             :          end do
      77                 :             :        end do
      78                 :             :      end if
      79                 :             : 
      80                 :             :    end do
      81                 :             : 
      82   [ -  +  -  + ]:          78 :    ABI_FREE(arr)
      83   [ -  +  -  + ]:          78 :    ABI_FREE(ftarr)
      84                 :             : 
      85                 :             :  case default
      86                 :           0 :    write(msg,'(a,i0)')"Wrong fftalga: ",fftalga
      87   [ -  +  +  -  :       12223 :    ABI_ERROR(msg)
             -  +  +  - ]
      88                 :             :  end select
      89                 :             : 
      90                 :             : end block
        

Generated by: LCOV version 2.3-1