LCOV - code coverage report
Current view: top level - greensf - lorentzian_smooth.f90 (source / functions) Hit Total Coverage
Test: FLEUR test coverage Lines: 19 24 79.2 %
Date: 2024-05-15 04:28:08 Functions: 1 2 50.0 %

          Line data    Source code
       1             : MODULE m_lorentzian_smooth
       2             : 
       3             :    USE m_constants
       4             : 
       5             :    IMPLICIT NONE
       6             : 
       7             :    !PARAMETER FOR LORENTZIAN SMOOTHING
       8             :    REAL,    PARAMETER :: cut              = 1e-8
       9             : 
      10             :    INTERFACE lorentzian_smooth
      11             :       PROCEDURE lorentzian_smooth_r, lorentzian_smooth_c
      12             :    END INTERFACE
      13             : 
      14             :    CONTAINS
      15             : 
      16           0 :    SUBROUTINE lorentzian_smooth_r(e,f,sigma,n)
      17             : 
      18             :       INTEGER, INTENT(IN)    :: n
      19             :       REAL,    INTENT(INOUT) :: f(:)
      20             :       REAL,    INTENT(IN)    :: sigma , e(:)
      21             : 
      22             :       COMPLEX, ALLOCATABLE :: f_c(:)
      23             : 
      24           0 :       f_c = f
      25           0 :       CALL lorentzian_smooth_c(e,f_c,sigma,n)
      26           0 :       f = REAL(f_c)
      27             : 
      28           0 :    END SUBROUTINE lorentzian_smooth_r
      29             : 
      30             :    !This is essentially smooth out of m_smooth but with a lorentzian distribution
      31         196 :    SUBROUTINE lorentzian_smooth_c(e,f,sigma,n)
      32             : 
      33             :       INTEGER, INTENT(IN)    :: n
      34             :       COMPLEX, INTENT(INOUT) :: f(:)
      35             :       REAL,    INTENT(IN)    :: sigma
      36             :       REAL,    INTENT(IN)    :: e(:)
      37             : 
      38             :       REAL :: dx
      39         196 :       COMPLEX :: f0(n)
      40         196 :       REAL :: ee(n)
      41             :       INTEGER :: ie , je , j1 , j2 , numPoints
      42             : 
      43     1058596 :       f0 = f
      44     1058596 :       f = 0.0
      45     1058596 :       ee = 0.0
      46         196 :       dx = e(2)-e(1)
      47             : 
      48     1058596 :       DO ie =1,  n
      49             : 
      50     1058400 :          ee(ie) = 1/pi_const * sigma/dx * 1.0/((ie-1)**2+(sigma/dx)**2)
      51             : 
      52     1058596 :          IF ( ee(ie).LT.cut ) EXIT
      53             :       ENDDO
      54         196 :       numPoints = ie - 1
      55             : 
      56     1058596 :       DO ie = 1, n
      57             : 
      58     1058400 :          j1 = ie - numPoints + 1
      59     1058400 :          j1 = MERGE(1,j1,j1.LT.1)
      60     1058400 :          j2 = ie + numPoints - 1
      61     1058400 :          j2 = MERGE(n,j2,j2.GT.n)
      62  5716418596 :          DO je = j1 , j2
      63  5716418400 :             f(ie) = f(ie) + ee(IABS(je-ie)+1)*f0(je)
      64             :          ENDDO
      65             : 
      66             :       ENDDO
      67             : 
      68         196 :    END SUBROUTINE lorentzian_smooth_c
      69             : 
      70             : END MODULE m_lorentzian_smooth

Generated by: LCOV version 1.14