LCOV - code coverage report
Current view: top level - hybrid - HF_init.F90 (source / functions) Hit Total Coverage
Test: FLEUR test coverage Lines: 21 21 100.0 %
Date: 2024-04-25 04:21:55 Functions: 1 1 100.0 %

          Line data    Source code
       1             : MODULE m_hf_init
       2             :    !
       3             :    !     preparations for HF and fi%hybinp functional calculation
       4             :    !
       5             : CONTAINS
       6          24 :    SUBROUTINE hf_init(mpdata,fi, hybdat)
       7             :       USE m_types
       8             :       USE m_hybrid_core
       9             :       USE m_util
      10             :       use m_intgrf
      11             :       USE m_types_hybdat
      12             :       IMPLICIT NONE
      13             :       TYPE(t_mpdata), intent(inout)     :: mpdata
      14             :       type(t_fleurinput), intent(in)    :: fi
      15             :       TYPE(t_hybdat), INTENT(INOUT)     :: hybdat
      16             : 
      17             :       INTEGER:: l, m, i, l1, l2, m1, m2
      18             : 
      19             : 
      20             :       !initialize hybdat%gridf for radial integration
      21          12 :       CALL intgrf_init(fi%atoms%ntype, fi%atoms%jmtd, fi%atoms%jri, fi%atoms%dx, fi%atoms%rmsh, hybdat%gridf)
      22             :       ! preparations for core states
      23          12 :       CALL core_init( fi%input, fi%atoms, hybdat%lmaxcd, hybdat%maxindxc)
      24          32 :       hybdat%maxfac = max(2*fi%atoms%lmaxd + maxval(fi%hybinp%lcutm1) + 1, 2*hybdat%lmaxcd + 2*fi%atoms%lmaxd + 1)
      25             : 
      26             :       !Alloc variables
      27          12 :       call hybdat%free()
      28          12 :       call hybdat%allocate(fi, mpdata%num_radfun_per_l)
      29             : 
      30             :       ! pre-calculate gaunt coefficients
      31          12 :       hybdat%fac(0) = 1
      32          12 :       hybdat%sfac(0) = 1
      33         280 :       DO i = 1, hybdat%maxfac
      34         268 :          hybdat%fac(i) = hybdat%fac(i - 1)*i            ! hybdat%fac(i)    = i!
      35         280 :          hybdat%sfac(i) = hybdat%sfac(i - 1)*sqrt(i*1.0) ! hybdat%sfac(i)   = sqrt(i!)
      36             :       END DO
      37             : 
      38         128 :       DO l2 = 0, fi%atoms%lmaxd
      39        1260 :          DO l1 = 0, fi%atoms%lmaxd
      40        5368 :             DO l = abs(l1 - l2), min(l1 + l2, maxval(fi%hybinp%lcutm1))
      41       17052 :                DO m = -l, l
      42      163148 :                   DO m1 = -l1, l1
      43      147228 :                      m2 = m1 + m ! Gaunt condition -m1+m2-m = 0
      44      147228 :                      IF (abs(m2) <= l2) hybdat%gauntarr(1, l1, l2, l, m1, m) = gaunt(l1, l2, l, m1, m2, m, hybdat%maxfac, hybdat%fac, hybdat%sfac)
      45      147228 :                      m2 = m1 - m ! switch role of l2-index
      46      160968 :                      IF (abs(m2) <= l2) hybdat%gauntarr(2, l1, l2, l, m1, m) = gaunt(l2, l1, l, m2, m1, m, hybdat%maxfac, hybdat%fac, hybdat%sfac)
      47             :                   END DO
      48             :                END DO
      49             :             END DO
      50             :          END DO
      51             :       END DO
      52          12 :    END SUBROUTINE hf_init
      53             : END MODULE m_hf_init

Generated by: LCOV version 1.14