LCOV - code coverage report
Current view: top level - fft - selecFFT.F90 (source / functions) Hit Total Coverage
Test: FLEUR test coverage Lines: 13 13 100.0 %
Date: 2024-05-15 04:28:08 Functions: 1 1 100.0 %

          Line data    Source code
       1             : MODULE m_selecFFT
       2             : 
       3             :    USE m_juDFT
       4             : 
       5             :    IMPLICIT NONE
       6             : 
       7             :    INTEGER, PARAMETER :: defaultFFT_const = 0
       8             :    INTEGER, PARAMETER :: mklFFT_const     = 1
       9             :    INTEGER, PARAMETER :: spFFT_const      = 2
      10             :    INTEGER, PARAMETER :: fftw_const       = 3
      11             :    integer, parameter :: cufft_const      = 4
      12             : 
      13             : #ifdef CPP_FFT_MKL
      14             :    LOGICAL, PARAMETER :: mklFFT_available = .TRUE.
      15             : #else
      16             :    LOGICAL, PARAMETER :: mklFFT_available = .FALSE.
      17             : #endif
      18             : 
      19             : #ifdef CPP_FFTW
      20             :    LOGICAL, PARAMETER :: fftw_available = .TRUE.
      21             : #else
      22             :    LOGICAL, PARAMETER :: fftw_available = .FALSE.
      23             : #endif
      24             : 
      25             : #ifdef CPP_SPFFT
      26             :    LOGICAL, PARAMETER :: spFFT_available = .TRUE.
      27             : #else
      28             :    LOGICAL, PARAMETER :: spFFT_available = .FALSE.
      29             : #endif
      30             : 
      31             : #ifdef _OPENACC
      32             :    LOGICAL, PARAMETER :: cuFFT_available = .TRUE.
      33             : #else
      34             :    LOGICAL, PARAMETER :: cuFFT_available = .FALSE.
      35             : #endif
      36             : 
      37             : 
      38             : CONTAINS
      39             : 
      40      185423 :    FUNCTION selecFFT(l_sparse, l_gpu)
      41             : 
      42             :       INTEGER             :: selecFFT
      43             :       LOGICAL, INTENT(IN) :: l_sparse
      44             :       logical,optional, intent(in) :: l_gpu
      45             : 
      46             :       INTEGER :: fftRoutine
      47             : 
      48             :       fftRoutine = defaultFFT_const
      49             : #ifdef CPP_FFTW
      50      185423 :       fftRoutine = fftw_const
      51             : #endif
      52             : 
      53             : #ifdef CPP_FFT_MKL
      54             :       fftRoutine = mklFFT_const
      55             : #endif
      56             : 
      57             : #ifdef CPP_SPFFT
      58             :       IF(l_sparse) fftRoutine = spFFT_const
      59             : #endif
      60             : 
      61             : #ifdef _OPENACC
      62             :       if(present(l_gpu)) then
      63             :          if(l_gpu) fftRoutine = cufft_const
      64             :       endif
      65             : #endif
      66             : 
      67             :       IF (TRIM(juDFT_string_for_argument("-fft"))=="fftw") THEN
      68             : #ifdef CPP_FFTW
      69      185423 :          fftRoutine = fftw_const
      70             : #else
      71             :          CALL juDFT_error("Selected fftw is not available!", calledby="selecFFT")
      72             : #endif
      73             : 
      74             :       END IF
      75      185423 :       IF (TRIM(juDFT_string_for_argument("-fft"))=="mkl") THEN
      76             : #ifdef CPP_FFT_MKL
      77             :          fftRoutine = mklFFT_const
      78             : #else
      79      185423 :          CALL juDFT_error("Selected FFT (mkl) is not available!", calledby="selecFFT")
      80             : #endif
      81             :       END IF
      82             : 
      83      185423 :       IF (TRIM(juDFT_string_for_argument("-fft"))=="spfft") THEN
      84             : #ifdef CPP_SPFFT
      85             :          IF(l_sparse) fftRoutine = spFFT_const
      86             : #else
      87      185423 :          CALL juDFT_error("Selected FFT (spfft) is not available!", calledby="selecFFT")
      88             : #endif
      89             :       END IF
      90             : 
      91      185423 :       IF (TRIM(juDFT_string_for_argument("-fft"))=="cufft") THEN
      92             : #ifdef _OPENACC
      93             :          if(present(l_gpu)) then
      94             :             IF(l_gpu) fftRoutine = cuFFT_const
      95             :          endif
      96             : #else
      97      185423 :          CALL juDFT_error("Selected FFT (spfft) is not available!", calledby="selecFFT")
      98             : #endif
      99             :       END IF
     100             : 
     101      185423 :       IF (TRIM(juDFT_string_for_argument("-fft"))=="inbuilt") THEN
     102      185423 :          IF(l_sparse) fftRoutine = defaultFFT_const
     103             :       END IF
     104             : 
     105      185423 :       selecFFT = fftRoutine
     106             : 
     107      185423 :    END FUNCTION
     108             : 
     109             : END MODULE m_selecFFT

Generated by: LCOV version 1.14