LCOV - code coverage report
Current view: top level - xc-pot - excepbe.f90 (source / functions) Hit Total Coverage
Test: FLEUR test coverage Lines: 6 6 100.0 %
Date: 2024-03-29 04:21:46 Functions: 1 1 100.0 %

          Line data    Source code
       1             : MODULE m_excepbe
       2             : !.....-----------------------------------------------------------------
       3             : !.....epbe(easy_pbe) exchange-correlation energy density  in hartree.
       4             : !     excepbe - easypbe
       5             : !.....------------------------------------------------------------------
       6             : CONTAINS
       7         807 :    SUBROUTINE excepbe( &
       8             :       xcpot,jspins,mirm,irmx, &
       9         807 :       rh,agr,agru,agrd, &
      10         807 :       g2ru,g2rd,gggr,gggru,gggrd, &
      11         807 :       exc)
      12             : 
      13             :       USE m_easypbe
      14             :       USE m_types_xcpot_data
      15             : 
      16             :       IMPLICIT NONE
      17             : 
      18             : ! .. Arguments ..
      19             :       TYPE(t_xcpot_data),INTENT(IN)::xcpot
      20             :       INTEGER, INTENT (IN) :: irmx,jspins,mirm
      21             :       REAL,    INTENT (IN) :: rh(mirm,jspins)
      22             :       REAL,    INTENT (IN) :: agr(mirm),agru(mirm),agrd(mirm)
      23             :       REAL,    INTENT (IN) :: g2ru(mirm),g2rd(mirm),gggr(mirm)
      24             :       REAL,    INTENT (IN) :: gggru(mirm),gggrd(mirm)
      25             :       REAL,    INTENT (OUT) :: exc(mirm)
      26             : 
      27             : ! .. local variables ..
      28             :       INTEGER :: lcor,lpot,i
      29             :       REAL :: ro,rou,rod,xedl,cedl,xedg,cedg,xced
      30             :       REAL :: up,agrup,delgrup,uplap,dn,agrdn,delgrdn,dnlap, &
      31             :               agrt,delgrt, &
      32             :               exlsd,vxuplsd,vxdnlsd,eclsd,vcuplsd,vcdnlsd, &
      33             :               expbe,vxuppbe,vxdnpbe,ecpbe,vcuppbe,vcdnpbe, &
      34             :               vxupsr,vxdnsr
      35             : 
      36             :       REAL, PARAMETER :: sml = 1.e-14
      37             :       REAL, PARAMETER :: smlc = 2.01e-14
      38             : 
      39             : !$OMP parallel do default(private) &
      40             : !$OMP SHARED(xcpot,jspins,mirm,irmx) &
      41             : !$OMP SHARED(rh,agr,agru,agrd) &
      42             : !$OMP SHARED(g2ru,g2rd,gggr,gggru,gggrd) &
      43         807 : !$OMP SHARED(exc)
      44             :       DO i = 1,irmx
      45             : 
      46             :          IF (jspins == 1) THEN
      47             :             rou=rh(i,1)/2
      48             :             rou=max(rou,sml)
      49             :             rod=rou
      50             :          ELSE
      51             :             rou=rh(i,1)
      52             :             rod=rh(i,jspins)
      53             :             rou=max(rou,sml)
      54             :             rod=max(rod,sml)
      55             :          ENDIF
      56             : 
      57             :          ro=rou+rod
      58             : 
      59             :          !.....
      60             :          !       xedl,xedg: exchange energy density (local,grad.exp.) in ry.
      61             :          !       cedl,cedg: exchange energy density (local,grad.expnd.) in ry.
      62             :          !.....
      63             :          xedl = 0.0e0
      64             :          cedl = 0.0e0
      65             :          xedg = 0.0e0
      66             :          cedg = 0.0e0
      67             : 
      68             :          IF (ro > smlc) THEN
      69             : 
      70             :             lcor=1
      71             :             lpot=1
      72             :             up=rou
      73             :             agrup=agru(i)
      74             :             delgrup=gggru(i)
      75             :             uplap=g2ru(i)
      76             :             dn=rod
      77             :             agrdn=agrd(i)
      78             :             delgrdn=gggrd(i)
      79             :             dnlap=g2rd(i)
      80             :             agrt=agr(i)
      81             :             delgrt=gggr(i)
      82             : 
      83             :             CALL easypbe (xcpot, &
      84             :                           up,agrup,delgrup,uplap,dn,agrdn,delgrdn,dnlap, &
      85             :                           agrt,delgrt,lcor,lpot, &
      86             :                           exlsd,vxuplsd,vxdnlsd,eclsd,vcuplsd,vcdnlsd, &
      87             :                           expbe,vxuppbe,vxdnpbe,ecpbe,vcuppbe,vcdnpbe, &
      88             :                           vxupsr,vxdnsr)
      89             : 
      90             :             xedl=exlsd
      91             :             cedl=eclsd
      92             :             xedg=expbe-exlsd
      93             :             cedg=ecpbe-eclsd
      94             : 
      95             :          ENDIF ! ro > smlc
      96             : 
      97             :          IF(xcpot%is_pbe0) THEN
      98             :             !pbe0: weight exchange energy with factor 0.75
      99             :             xced = (0.75*xedl+cedl+0.75*xedg+cedg)
     100             :          ELSE
     101             :             xced = (xedl+cedl+xedg+cedg)
     102             :          END IF
     103             : 
     104             :          exc(i) = xced*2  ! in ry
     105             : 
     106             :       ENDDO
     107             : !$OMP end parallel do
     108         807 :    END SUBROUTINE excepbe
     109             : END MODULE m_excepbe

Generated by: LCOV version 1.14