LCOV - code coverage report
Current view: top level - cdn - nIJ_mat.f90 (source / functions) Hit Total Coverage
Test: FLEUR test coverage Lines: 0 34 0.0 %
Date: 2024-04-28 04:28:00 Functions: 0 1 0.0 %

          Line data    Source code
       1             : MODULE m_nIJmat
       2             : 
       3             :     !------------------------------------------------------------------------------ !
       4             :     !                                                                               !
       5             :     ! MODULE: m_nIJmat                                                              !
       6             :     !                                                                               !
       7             :     ! Author : Wejdan Beida                                                         !
       8             :     !                                                                               !
       9             :     ! Description: This module calculates the occupation matrix between two atoms.  !
      10             :     !                                                                               !
      11             :     !------------------------------------------------------------------------------ !
      12             : 
      13             :      
      14             :     CONTAINS
      15             : 
      16           0 :     SUBROUTINE nIJ_mat(input,atoms,ne,usdus,jspin,we,eigVecCoeffs,cell,kpts,kptindx,nIJ_llp_mmp,enpara,v)
      17             : 
      18             :       USE m_types
      19             :       USE m_constants
      20             :       USE m_juDFT
      21             :       USE m_intgr, ONLY : intgr0
      22             :       USE m_radfun
      23             :       !USE m_check_mt_radii
      24             : 
      25             :       IMPLICIT NONE
      26             : 
      27             :       TYPE(t_usdus),       INTENT(IN)     :: usdus
      28             :       TYPE(t_input),       INTENT(IN)     :: input
      29             :       TYPE(t_atoms),       INTENT(IN)     :: atoms
      30             :       TYPE(t_eigVecCoeffs),INTENT(IN)     :: eigVecCoeffs
      31             :       TYPE(t_kpts),        INTENT(IN)     :: kpts
      32             :       TYPE(t_cell),        INTENT(IN)     :: cell
      33             :       INTEGER,             INTENT(IN)     :: ne,jspin,kptindx
      34             :       REAL,                INTENT(IN)     :: we(:)
      35             :       COMPLEX,             INTENT(INOUT)  :: nIJ_llp_mmp(-lmaxU_const:,-lmaxU_const:,:)
      36             :       TYPE(t_enpara),      INTENT(IN)     :: enpara
      37             :       TYPE(t_potden),      INTENT(IN)     :: v
      38           0 :       TYPE(t_usdus)                       :: usdustemp 
      39             : 
      40             :       INTEGER i,i_v,i_pair,natom1,latom1,ll1atom1,atom2,natom2,latom2,ll1atom2,matom1,matom2,lm1atom1,lm1atom2,counter
      41             :       COMPLEX c_0,A1, B1, A2, B2, power_factor, exponent
      42             :       REAL  norm1_W, norm2_W
      43             : 
      44           0 :       counter=0
      45           0 :         DO i_v = 1,atoms%n_v
      46             :             Do atom2=1,atoms%lda_v(i_v)%numOtherAtoms
      47             :                 counter=counter+1
      48             :             ENDDO
      49             :         ENDDO
      50             : 
      51           0 :         CALL usdustemp%init(atoms,input%jspins)
      52           0 :         CALL timestart("nIJ_mat")
      53             : 
      54           0 :         i_pair=1 
      55           0 :         DO i_v = 1,atoms%n_v
      56           0 :             natom1=atoms%lda_v(i_v)%atomIndex
      57           0 :             latom1=atoms%lda_v(i_v)%thisAtomL
      58           0 :             ll1atom1=latom1*(latom1+1)
      59           0 :             norm1_W = usdus%ddn(latom1,atoms%itype(natom1),jspin)**0.5
      60           0 :             Do atom2=1,atoms%lda_v(i_v)%numOtherAtoms
      61           0 :                 natom2=atoms%lda_v(i_v)%otherAtomIndices(atom2)
      62           0 :                 latom2=atoms%lda_v(i_v)%otherAtomL
      63           0 :                 ll1atom2=latom2*(latom2+1)
      64           0 :                 norm2_W = usdus%ddn(latom2,atoms%itype(natom2),jspin)**0.5
      65           0 :                 power_factor=(cmplx(0, 1)**latom1) *(cmplx(0, -1)**latom2)
      66           0 :                 exponent=EXP(cmplx(0.0,-tpi_const)*dot_product(atoms%lda_v(i_v)%atomShifts(:,atom2),kpts%bk(:,kptindx)))
      67           0 :                 Do matom1=-latom1,latom1
      68           0 :                     lm1atom1=ll1atom1+matom1
      69           0 :                     Do matom2=-latom2,latom2
      70           0 :                         lm1atom2=ll1atom2+matom2
      71           0 :                         c_0=cmplx_0
      72           0 :                         Do i=1,ne 
      73           0 :                              A1 = eigVecCoeffs%abcof(i,lm1atom1,0,natom1,jspin)
      74           0 :                              B1 = eigVecCoeffs%abcof(i,lm1atom1,1,natom1,jspin)
      75           0 :                              A2 = eigVecCoeffs%abcof(i,lm1atom2,0,natom2,jspin)
      76           0 :                              B2 = eigVecCoeffs%abcof(i,lm1atom2,1,natom2,jspin)   
      77           0 :                              c_0 = c_0 + we(i) * (conjg(A2)*A1 + conjg(A2)*B1*norm1_W + conjg(B2)*A1*norm2_W + conjg(B2)*B1*norm1_W*norm2_W) * power_factor * exponent
      78             :                         ENDDO
      79           0 :                         nIJ_llp_mmp(matom1,matom2,i_pair) = nIJ_llp_mmp(matom1,matom2,i_pair) + c_0
      80             :                     ENDDO
      81             :                 ENDDO
      82           0 :                 i_pair=i_pair+1
      83             :             ENDDO
      84             :         ENDDO
      85           0 :         call timestop("nIJ_mat")
      86             :         
      87           0 :     END SUBROUTINE nIJ_mat
      88             : END MODULE m_nIJmat
      89             : 
      90             : 

Generated by: LCOV version 1.14