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

          Line data    Source code
       1             : MODULE m_greensfEigVecCoeffs
       2             : 
       3             :    USE m_juDFT
       4             :    USE m_types
       5             :    USE m_constants
       6             : 
       7             :    IMPLICIT NONE
       8             : 
       9             :    CONTAINS
      10             : 
      11       20700 :    SUBROUTINE greensfEigVecCoeffs(nBands,l,lp,natom,natomp,atomType,atomTypep,spin1,spin2,&
      12       20700 :                                   l_sphavg,atoms,scalarGF,eigVecCoeffs,im)
      13             : 
      14             :       INTEGER,                   INTENT(IN)     :: nBands !Bands handled on this rank
      15             :       INTEGER,                   INTENT(IN)     :: l,lp,natom,natomp,atomType,atomTypep,spin1,spin2 !Information about the current element
      16             :       LOGICAL,                   INTENT(IN)     :: l_sphavg
      17             :       TYPE(t_atoms),             INTENT(IN)     :: atoms
      18             :       TYPE(t_scalarGF),          INTENT(IN)     :: scalarGF
      19             :       TYPE(t_eigVecCoeffs),      INTENT(IN)     :: eigVecCoeffs
      20             :       COMPLEX,                   INTENT(INOUT)  :: im(-lmaxU_const:,-lmaxU_const:,:,:)
      21             : 
      22             :       INTEGER :: m,mp,lm,lmp,ilo,ilop,nLO_ind,nLOp_ind,imat
      23             : 
      24    87285246 :       im = cmplx_0
      25             : 
      26             :       !$OMP parallel do default(none) collapse(2) &
      27             :       !$OMP shared(eigVecCoeffs,im,scalarGF,atoms) &
      28             :       !$OMP shared(l,lp,natom,natomp,nBands,atomType,atomTypep,spin1,spin2,l_sphavg) &
      29       20700 :       !$OMP private(m,mp,lm,lmp,ilo,ilop,nLO_ind,nLOp_ind,imat)
      30             :       DO m = -l, l
      31             :          DO mp = -lp,lp
      32             :             nLO_ind  = 0
      33             :             nLOp_ind = 0
      34             :             lm = l*(l+1)+m
      35             :             lmp = lp*(lp+1)+mp
      36             : 
      37             :             !-------------------------
      38             :             !Contribution from valence states
      39             :             !-------------------------
      40             :             IF(l_sphavg) THEN
      41             :                im(m,mp,:,1) = im(m,mp,:,1) &
      42             :                              + scalarGF%uun(spin1,spin2) * conjg(eigVecCoeffs%abcof(:nBands,lmp,0,natomp,spin1))&
      43             :                                                          *       eigVecCoeffs%abcof(:nBands,lm ,0,natom ,spin2) &
      44             :                              + scalarGF%udn(spin1,spin2) * conjg(eigVecCoeffs%abcof(:nBands,lmp,0,natomp,spin1))&
      45             :                                                          *       eigVecCoeffs%abcof(:nBands,lm ,1,natom ,spin2) &
      46             :                              + scalarGF%dun(spin1,spin2) * conjg(eigVecCoeffs%abcof(:nBands,lmp,1,natomp,spin1))&
      47             :                                                          *       eigVecCoeffs%abcof(:nBands,lm ,0,natom ,spin2) &
      48             :                              + scalarGF%ddn(spin1,spin2) * conjg(eigVecCoeffs%abcof(:nBands,lmp,1,natomp,spin1))&
      49             :                                                          *       eigVecCoeffs%abcof(:nBands,lm ,1,natom ,spin2)
      50             :             ELSE
      51             :                im(m,mp,:,1) = im(m,mp,:,1) + conjg(eigVecCoeffs%abcof(:nBands,lmp,0,natomp,spin1))&
      52             :                                                  * eigVecCoeffs%abcof(:nBands,lm ,0,natom ,spin2)
      53             :                im(m,mp,:,2) = im(m,mp,:,2) + conjg(eigVecCoeffs%abcof(:nBands,lmp,1,natomp,spin1))&
      54             :                                                  * eigVecCoeffs%abcof(:nBands,lm ,1,natom ,spin2)
      55             :                im(m,mp,:,3) = im(m,mp,:,3) + conjg(eigVecCoeffs%abcof(:nBands,lmp,0,natomp,spin1))&
      56             :                                                  * eigVecCoeffs%abcof(:nBands,lm ,1,natom ,spin2)
      57             :                im(m,mp,:,4) = im(m,mp,:,4) + conjg(eigVecCoeffs%abcof(:nBands,lmp,1,natomp,spin1))&
      58             :                                                  * eigVecCoeffs%abcof(:nBands,lm ,0,natom ,spin2)
      59             :             END IF
      60             : 
      61             :             !------------------------------------------------------------------------------------------------------
      62             :             ! add local orbital contribution (not tested)
      63             :             !------------------------------------------------------------------------------------------------------
      64             :             DO ilo = 1, atoms%nlo(atomType)
      65             :                IF(atoms%llo(ilo,atomType).NE.l) CYCLE
      66             :                IF(l_sphavg) THEN
      67             :                   im(m,mp,:,1) = im(m,mp,:,1) &
      68             :                                 + scalarGF%uulon(ilo,spin1,spin2) * conjg(eigVecCoeffs%abcof(   :nBands,lmp,0,natomp,spin1))&
      69             :                                                                   *       eigVecCoeffs%ccof(m ,:nBands,ilo,natom ,spin2) &
      70             :                                 + scalarGF%dulon(ilo,spin1,spin2) * conjg(eigVecCoeffs%abcof(   :nBands,lmp,1,natomp,spin1))&
      71             :                                                                   *       eigVecCoeffs%ccof(m ,:nBands,ilo,natom ,spin2)
      72             :                ELSE
      73             :                   nLO_ind = nLO_ind + 1
      74             :                   imat    = 4+(nLO_ind-1)*2
      75             :                   im(m,mp,:,imat+1) = im(m,mp,:,imat+1) + conjg(eigVecCoeffs%abcof(  :nBands,lmp,0,natomp,spin1))&
      76             :                                                               * eigVecCoeffs%ccof(m,:nBands,ilo,natom ,spin2)
      77             :                   im(m,mp,:,imat+2) = im(m,mp,:,imat+2) + conjg(eigVecCoeffs%abcof(  :nBands,lmp,1,natomp,spin1))&
      78             :                                                               * eigVecCoeffs%ccof(m,:nBands,ilo,natom ,spin2)
      79             :                ENDIF
      80             :             ENDDO
      81             :             DO ilo = 1, atoms%nlo(atomTypep)
      82             :                IF(atoms%llo(ilo,atomTypep).NE.lp) CYCLE
      83             :                IF(l_sphavg) THEN
      84             :                   im(m,mp,:,1) = im(m,mp,:,1) &
      85             :                                 + scalarGF%uloun(ilo,spin1,spin2) * conjg(eigVecCoeffs%ccof(mp,:nBands,ilo,natomp,spin1))&
      86             :                                                                   *       eigVecCoeffs%abcof(   :nBands,lm ,0,natom ,spin2) &
      87             :                                 + scalarGF%ulodn(ilo,spin1,spin2) * conjg(eigVecCoeffs%ccof(mp,:nBands,ilo,natomp,spin1))&
      88             :                                                                   *       eigVecCoeffs%abcof(   :nBands,lm ,1,natom ,spin2)
      89             :                ELSE
      90             :                   nLO_ind = nLO_ind + 1
      91             :                   imat    = 4+(nLO_ind-1)*2
      92             :                   im(m,mp,:,imat+1) = im(m,mp,:,imat+1) + conjg(eigVecCoeffs%ccof(mp,:nBands,ilo,natomp,spin1))&
      93             :                                                               * eigVecCoeffs%abcof(   :nBands,lm ,0,natom ,spin2)
      94             :                   im(m,mp,:,imat+2) = im(m,mp,:,imat+2) + conjg(eigVecCoeffs%ccof(mp,:nBands,ilo,natomp,spin1))&
      95             :                                                               * eigVecCoeffs%abcof(   :nBands,lm ,1,natom ,spin2)
      96             :                ENDIF
      97             :             ENDDO
      98             : 
      99             :             DO ilo = 1, atoms%nlo(atomType)
     100             :                IF(atoms%llo(ilo,atomType).NE.l) CYCLE
     101             :                DO ilop = 1, atoms%nlo(atomTypep)
     102             :                   IF (atoms%llo(ilop,atomTypep).NE.lp) CYCLE
     103             :                   IF(l_sphavg) THEN
     104             :                      im(m,mp,:,1) = im(m,mp,:,1) &
     105             :                                    + scalarGF%uloulopn(ilo,ilop,spin1,spin2) * conjg(eigVecCoeffs%ccof(mp,:nBands,ilop,natomp,spin1))&
     106             :                                                                              *       eigVecCoeffs%ccof(m ,:nBands,ilo ,natom ,spin2)
     107             :                   ELSE
     108             :                      nLOp_ind = nLOp_ind + 1
     109             :                      imat = 4+nLO_ind*2+nLOp_ind
     110             :                      im(m,mp,:,imat) = im(m,mp,:,imat) + conjg(eigVecCoeffs%ccof(mp,:nBands,ilop,natomp,spin1))&
     111             :                                                              * eigVecCoeffs%ccof(m ,:nBands,ilo ,natom ,spin2)
     112             :                   ENDIF
     113             :                ENDDO
     114             :             ENDDO
     115             :          ENDDO!mp
     116             :       ENDDO !m
     117             :       !$OMP end parallel do
     118             : 
     119       20700 :    END SUBROUTINE greensfEigVecCoeffs
     120             : END MODULE m_greensfEigVecCoeffs

Generated by: LCOV version 1.14