LCOV - code coverage report
Current view: top level - src/53_ffts - fftur_driver.finc Coverage Total Hit
Test: coverage.info Lines: 90.6 % 32 29
Test Date: 2026-11-06 12:58:16 Functions: - 0 0
Branches: 61.1 % 144 88

             Branch data     Line data    Source code
       1                 :             : block
       2                 :             : !Local variables-------------------------------
       3                 :             : !scalars
       4                 :             :  integer,parameter :: cplex0=0,option3=3,npwin0=0,ndat1=1
       5                 :             :  integer :: nx,ny,nz,ldx,ldy,ldz,fftalg,fftalga,fftalgc,fftcache
       6                 :             :  integer :: idat,rspad,gspad,ix,iy,iz,ifft,ipw
       7                 :             :  real(dp),parameter :: weight1_i=one,weight1_r=one
       8                 :             : !arrays
       9                 :             :  integer :: kg_kin0(3,0)
      10                 :             :  real(dp) :: dum_denpot(0,0,0),dum_fofgin(0,0)
      11                 :      780045 :  real(dp),allocatable :: fofgout(:,:),fofr(:,:,:,:),fg_box(:,:,:,:)
      12                 :             : ! *************************************************************************
      13                 :             : 
      14                 :      780045 :  fftalg=ngfft(7); fftalga=fftalg/100; fftalgc=MOD(fftalg,10); fftcache=ngfft(8)
      15                 :      780045 :  nx=ngfft(1); ny=ngfft(2); nz=ngfft(3)
      16                 :             : 
      17                 :           0 :  select case (fftalga)
      18                 :             :  case (FFT_FFTW3)
      19                 :           0 :    ldx=nx; ldy=ny; ldz=nz ! No augmentation, the caller does not support it.
      20                 :             :    call fftw3_fftur(fftalg, fftcache, npw_k, nx, ny, nz, ldx, ldy, ldz, nspinor*ndat, istwf_k, mgfft, &
      21                 :           0 :                     kg_k, gbound_k, ur, ug)
      22                 :             : 
      23                 :             :  case (FFT_DFTI)
      24                 :      780004 :    ldx=nx; ldy=ny; ldz=nz ! No augmentation, the caller does not support it.
      25                 :             :    call dfti_fftur(fftalg, fftcache, npw_k, nx, ny, nz, ldx, ldy, ldz, nspinor*ndat, istwf_k, mgfft, &
      26                 :      780004 :                    kg_k, gbound_k, ur, ug)
      27                 :             : 
      28                 :             :  case (FFT_SG, FFT_SG2002)
      29                 :             :    ! Goedecker routines.
      30                 :             :    ! 1) sg_fftrisc does not support istwkf >= 2 for the u(r) --> u(G) transform.
      31                 :          41 :    ldx=ngfft(4); ldy=ngfft(5); ldz=ngfft(6)
      32   [ -  +  +  -  :         123 :    ABI_MALLOC(fofgout,(2,npw_k))
          +  -  +  -  -  
          +  -  +  -  +  
          +  -  +  -  +  
             -  -  +  -  
                      + ]
      33   [ -  +  +  -  :         205 :    ABI_MALLOC(fofr,(2,ldx,ldy,ldz))
          -  +  +  -  -  
          +  +  -  +  -  
          +  -  -  +  -  
          +  -  +  +  -  
          -  +  +  -  -  
          +  +  -  +  -  
          +  -  -  +  -  
                      + ]
      34                 :             : 
      35   [ +  +  +  + ]:          41 :    if (istwf_k/=1) then
      36   [ -  +  +  -  :         128 :      ABI_MALLOC(fg_box,(2,ldx,ldy,ldz))
          -  +  +  -  -  
          +  +  -  -  +  
          -  +  -  +  +  
          -  -  +  +  -  
          -  +  +  -  -  
                +  -  + ]
      37                 :             :    end if
      38                 :             : 
      39   [ +  +  +  + ]:         136 :    do idat=1,nspinor*ndat
      40                 :          95 :      gspad = (idat-1)*npw_k
      41                 :          95 :      rspad = (idat-1)*nfft
      42                 :             :      !
      43                 :             :      ! Fill fofr from input ur array.
      44   [ +  +  +  + ]:        9545 :      do iz=1,nz
      45   [ +  +  +  + ]:      950045 :        do iy=1,ny
      46   [ +  +  +  + ]:    94594950 :          do ix=1,nx
      47                 :    93645000 :            ifft = ix + (iy-1)*nx + (iz-1)*nx*ny + rspad
      48                 :    93645000 :            fofr(1,ix,iy,iz) = REAL( ur(ifft))
      49                 :    94585500 :            fofr(2,ix,iy,iz) = AIMAG(ur(ifft))
      50                 :             :          end do
      51                 :             :        end do
      52                 :             :      end do
      53                 :             : 
      54   [ +  +  +  + ]:          95 :      if (istwf_k==1) then
      55                 :             :        !
      56                 :             :        ! option=3 --> real space to reciprocal space.
      57                 :             :        ! NOTE that in this case, istwf_k=1 must be used.
      58                 :             :        ! this is not thread-safe! use ndat1
      59                 :             :        call sg_fftrisc(cplex0,dum_denpot,dum_fofgin,fofgout,fofr,&
      60                 :             :                        gbound_k,gbound_k,istwf_k,kg_kin0,kg_k,mgfft,ndat1,ngfft,npwin0,npw_k,ldx,ldy,ldz,&
      61                 :          15 :                        option3,weight1_r,weight1_i)
      62                 :             : 
      63                 :             :      else
      64                 :             :        ! Zero-padded on the Box, then transfer data from box to sphere. ndat=1 here.
      65                 :          80 :        call sg_fftpad(fftcache,mgfft,nx,ny,nz,ldx,ldy,ldz,ndat1,gbound_k,-1,fofr,fg_box)
      66                 :             : 
      67                 :          80 :        call cg_box2gsph(nx,ny,nz,ldx,ldy,ldz,ndat1,npw_k,kg_k,fg_box,fofgout,rscal=one/(nx*ny*nz))
      68                 :             :      end if
      69                 :             : 
      70   [ +  +  +  + ]:     3310966 :      do ipw=1,npw_k ! Have to convert from REAL to CMPLX
      71                 :     3310925 :        ug(ipw+gspad) = DCMPLX(fofgout(1,ipw), fofgout(2,ipw))
      72                 :             :      end do
      73                 :             :      !
      74                 :             :    end do ! idat
      75                 :             : 
      76   [ -  +  -  + ]:          41 :    ABI_FREE(fofgout)
      77   [ -  +  -  + ]:          41 :    ABI_FREE(fofr)
      78   [ +  +  +  + ]:          41 :    ABI_SFREE(fg_box)
      79                 :             : 
      80                 :             :  case default
      81   [ -  +  +  -  :      780045 :    ABI_ERROR(sjoin("Wrong fftalga:", itoa(fftalga)))
             -  +  +  - ]
      82                 :             :  end select
      83                 :             : 
      84                 :             : end block
        

Generated by: LCOV version 2.3-1