LCOV - code coverage report
Current view: top level - vgen - convol.f90 (source / functions) Coverage Total Hit
Test: FLEUR test coverage Lines: 21.0 % 62 13
Test Date: 2025-06-14 04:34:23 Functions: 25.0 % 4 1

            Line data    Source code
       1              : MODULE m_convol
       2              : CONTAINS
       3         5358 :    SUBROUTINE convol(stars, fg3, ag3)
       4              : 
       5              :    !************************************************************
       6              :    !*                                                          *
       7              :    !* calculate f(G) = \sum_G' U(G - G') a(G')                 *
       8              :    !*                                                          *
       9              :    !* U is already given on the real space mesh as U(r)        *
      10              :    !*                                                          *
      11              :    !*       ag3(star) -- FFT --> gfft(r,1)                     *
      12              :    !*                            gfft(r,1)=gfft(r,1) * U (r)   *
      13              :    !*       fg3(star) <- FFT --- gfft(r,1)                     *
      14              :    !*                                                          *
      15              :    !* dimension of gfft is                                     *
      16              :    !* (3*stars%mx1 x 3*stars%mx2 x 3*stars%mx3)                *
      17              :    !*                                                          *
      18              :    !************************************************************
      19              :       USE m_types_fftGrid
      20              :       USE m_juDFT
      21              :       USE m_types_stars
      22              : 
      23              :       IMPLICIT NONE
      24              : 
      25              :       TYPE(t_stars), INTENT(IN) :: stars
      26              : 
      27              :       COMPLEX, INTENT(INOUT)          :: fg3(:)
      28              :       COMPLEX, INTENT(IN),   OPTIONAL :: ag3(:)
      29              : 
      30        42864 :       TYPE(t_fftgrid) :: fftgrid
      31              : 
      32        21432 :       CALL fftgrid%init((/3*stars%mx1,3*stars%mx2,3*stars%mx3/))
      33              : 
      34         5358 :       IF (SIZE(fftgrid%grid)/=SIZE(stars%ufft)) CALL judft_error("Bug in t_stars%convol")
      35         5358 :       IF (PRESENT(ag3)) THEN
      36         4234 :         CALL fftgrid%putFieldOnGrid(stars,ag3)
      37              :       ELSE
      38              :         !In place version
      39         1124 :         CALL fftgrid%putFieldOnGrid(stars,fg3)
      40              :       END IF
      41         5358 :       CALL fftgrid%perform_fft(forward=.false.)
      42              : 
      43    216665655 :       fftgrid%grid = fftgrid%grid*stars%ufft
      44              : 
      45         5358 :       CALL fftgrid%perform_fft(forward=.true.)
      46         5358 :       CALL fftgrid%takeFieldFromGrid(stars,fg3)
      47      7663830 :       fg3 = fg3*stars%nstr
      48              : 
      49         5358 :    END SUBROUTINE convol
      50              : 
      51            0 :    SUBROUTINE dfpt_convol(stars, starsq, pw, pwq, pww)
      52              :       USE m_types_fftGrid
      53              :       USE m_juDFT
      54              :       USE m_types_stars
      55              : 
      56              :       IMPLICIT NONE
      57              : 
      58              :       TYPE(t_stars), INTENT(IN) :: stars, starsq
      59              : 
      60              :       COMPLEX, INTENT(IN)    :: pw(:), pwq(:)
      61              :       COMPLEX, INTENT(INOUT) :: pww(:)
      62              : 
      63            0 :       TYPE(t_fftgrid) :: fftgrid, fftgridq
      64              : 
      65            0 :       CALL fftgrid%init((/3*stars%mx1,3*stars%mx2,3*stars%mx3/))
      66            0 :       CALL fftgridq%init((/3*starsq%mx1,3*starsq%mx2,3*starsq%mx3/))
      67              : 
      68            0 :       IF (SIZE(fftgrid%grid)/=SIZE(stars%ufft)) CALL judft_error("Size mismatch in dfpt_convol (1)!")
      69            0 :       IF (SIZE(fftgridq%grid)/=SIZE(starsq%ufft1)) CALL judft_error("Size mismatch in dfpt_convol (2)!")
      70            0 :       IF (SIZE(fftgridq%grid)/=SIZE(fftgrid%grid)) CALL judft_error("Size mismatch in dfpt_convol (3)!")
      71              : 
      72            0 :       CALL fftgrid%putFieldOnGrid(stars,pw)
      73            0 :       CALL fftgridq%putFieldOnGrid(starsq,pwq)
      74            0 :       CALL fftgrid%perform_fft(forward=.false.)
      75            0 :       CALL fftgridq%perform_fft(forward=.false.)
      76              : 
      77            0 :       fftgrid%grid = fftgrid%grid*starsq%ufft1 + fftgridq%grid*stars%ufft
      78              : 
      79            0 :       CALL fftgrid%perform_fft(forward=.true.)
      80            0 :       CALL fftgrid%takeFieldFromGrid(stars,pww)
      81            0 :       pww = pww*stars%nstr
      82              : 
      83            0 :    END SUBROUTINE dfpt_convol
      84              : 
      85            0 :    SUBROUTINE dfpt_convol_direct(stars, starsq, pw, pwq, pwwq)
      86              :       ! TODO: Should probably be replaced by a "finer" function with full
      87              :       !       G-grid for ustep(1)
      88              :       USE m_types_fftGrid
      89              :       USE m_juDFT
      90              :       USE m_types_stars
      91              : 
      92              :       IMPLICIT NONE
      93              : 
      94              :       TYPE(t_stars), INTENT(IN) :: stars, starsq
      95              : 
      96              :       COMPLEX, INTENT(IN)    :: pw(:), pwq(:)
      97              :       COMPLEX, INTENT(INOUT) :: pwwq(:)
      98              : 
      99            0 :       TYPE(t_fftgrid) :: fftgrid, fftgridq
     100              : 
     101            0 :       CALL fftgrid%init((/3*stars%mx1,3*stars%mx2,3*stars%mx3/))
     102            0 :       CALL fftgridq%init((/3*starsq%mx1,3*starsq%mx2,3*starsq%mx3/))
     103              : 
     104            0 :       IF (SIZE(fftgridq%grid)/=SIZE(fftgrid%grid)) CALL judft_error("Size mismatch in dfpt_convol (3)!")
     105              : 
     106            0 :       CALL fftgrid%putFieldOnGrid(stars,pw)
     107            0 :       CALL fftgridq%putFieldOnGrid(starsq,pwq)
     108            0 :       CALL fftgrid%perform_fft(forward=.false.)
     109            0 :       CALL fftgridq%perform_fft(forward=.false.)
     110              : 
     111            0 :       fftgrid%grid = fftgrid%grid*fftgridq%grid
     112              : 
     113            0 :       CALL fftgrid%perform_fft(forward=.true.)
     114            0 :       CALL fftgrid%takeFieldFromGrid(starsq,pwwq)
     115            0 :       pwwq = pwwq*starsq%nstr
     116              : 
     117            0 :    END SUBROUTINE dfpt_convol_direct
     118              : 
     119            0 :    SUBROUTINE dfpt_convol_big(resultstar, stars, starsfull, pw, pwfull, pww)
     120              :       USE m_types_fftGrid
     121              :       USE m_juDFT
     122              :       USE m_types_stars
     123              : 
     124              :       IMPLICIT NONE
     125              : 
     126              :       INTEGER,       INTENT(IN) :: resultstar
     127              :       TYPE(t_stars), INTENT(IN) :: stars, starsfull
     128              : 
     129              :       COMPLEX, INTENT(IN)    :: pw(:), pwfull(0:)
     130              :       COMPLEX, INTENT(INOUT) :: pww(:)
     131              : 
     132            0 :       TYPE(t_fftgrid) :: fftgrid, fftgridfin
     133              : 
     134            0 :       CALL fftgrid%init((/3*stars%mx1,3*stars%mx2,3*stars%mx3/))
     135              : 
     136            0 :       IF (SIZE(pwfull)/=SIZE(fftgrid%grid)) CALL judft_error("Size mismatch in dfpt_convol (4)!")
     137              : 
     138            0 :       CALL fftgrid%putFieldOnGrid(stars,pw)
     139            0 :       CALL fftgrid%perform_fft(forward=.false.)
     140              : 
     141            0 :       IF (resultstar==1) THEN
     142            0 :          fftgrid%grid = fftgrid%grid*pwfull
     143            0 :          CALL fftgrid%perform_fft(forward=.true.)
     144            0 :          CALL fftgrid%takeFieldFromGrid(stars,pww)
     145            0 :          pww = pww*stars%nstr
     146            0 :       ELSE IF (resultstar==2) THEN
     147            0 :          CALL fftgridfin%init((/3*starsfull%mx1,3*starsfull%mx2,3*starsfull%mx3/))
     148            0 :          fftgridfin%grid = fftgrid%grid*pwfull
     149            0 :          CALL fftgridfin%perform_fft(forward=.true.)
     150            0 :          CALL fftgridfin%takeFieldFromGrid(starsfull,pww)
     151            0 :          pww = pww*starsfull%nstr
     152              :       ELSE
     153            0 :          CALL judft_error("Impossible star index!")
     154              :       END IF
     155              : 
     156            0 :    END SUBROUTINE dfpt_convol_big
     157              : 
     158              : END MODULE m_convol
        

Generated by: LCOV version 2.0-1