LCOV - code coverage report
Current view: top level - xc-pot - vxcepbe.f90 (source / functions) Hit Total Coverage
Test: combined.info Lines: 54 56 96.4 %
Date: 2019-09-08 04:53:50 Functions: 2 2 100.0 %

          Line data    Source code
       1             : MODULE m_vxcepbe
       2             : !.....-----------------------------------------------------------------
       3             : !.....epbe(easy_pbe) exchange-correlation potential in hartree.
       4             : !     vxcepbe - easypbe
       5             : !.....------------------------------------------------------------------
       6             : CONTAINS
       7        1596 :    SUBROUTINE vxcepbe( &
       8             :       xcpot,jspins,mirm,irmx, &
       9        1596 :       rh,agr,agru,agrd, &
      10        1596 :       g2ru,g2rd,gggr,gggru,gggrd, &
      11        1596 :       vx,vxc)
      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):: vx(mirm,jspins),vxc(mirm,jspins)
      26             : 
      27             : ! .. local variables ..
      28             :       INTEGER :: lcor,lpot,i
      29             :       REAL :: ro,rou,rod,xcptu,xcptd, &
      30             :               vxlu,vclu,vxld,vcld,vxgu,vcgu,vxgd,vcgd
      31             :       REAL :: up,agrup,delgrup,uplap,dn,agrdn,delgrdn,dnlap, &
      32             :               agrt,delgrt, &
      33             :               exlsd,vxuplsd,vxdnlsd,eclsd,vcuplsd,vcdnlsd, &
      34             :               expbe,vxuppbe,vxdnpbe,ecpbe,vcuppbe,vcdnpbe, &
      35             :               vxupsr,vxdnsr
      36             : 
      37             :       REAL, PARAMETER :: sml = 1.e-14
      38             :       REAL, PARAMETER :: smlc = 2.01e-14
      39             :       LOGICAL         :: l_hse
      40        1596 :       l_hse=(xcpot%is_hse)
      41             : 
      42             : !$OMP PARALLEL DO DEFAULT(none) &
      43             : !$OMP SHARED(irmx,rh,xcpot,jspins,l_hse) &
      44             : !$OMP SHARED(agr,agru,agrd,g2ru,g2rd,gggr,gggru,gggrd) &
      45             : !$OMP SHARED(vx,vxc) &
      46             : !$OMP PRIVATE(rou,rod,vxlu,vclu,vxld,vcld,vxgu,vcgu,vxgd,vcgd) &
      47             : !$OMP PRIVATE(vxupsr,vxdnsr,ro,lcor,lpot,up,agrup,delgrup) &
      48             : !$OMP PRIVATE(uplap,dn,agrdn,delgrdn,dnlap,agrt,delgrt) &
      49             : !$OMP PRIVATE(exlsd,vxuplsd,vxdnlsd,eclsd,vcuplsd,vcdnlsd) &
      50             : !$OMP PRIVATE(expbe,vxuppbe,vxdnpbe,ecpbe,vcuppbe,vcdnpbe) &
      51        1596 : !$OMP PRIVATE(xcptu,xcptd)
      52             :       DO i = 1,irmx
      53             : 
      54    31190373 :          IF (jspins == 1) THEN
      55     8682130 :             rou=rh(i,1)/2
      56     8682130 :             rou=max(rou,sml)
      57             :             rod=rou
      58             :          ELSE
      59    22508243 :             rou=rh(i,1)
      60    22508243 :             rod=rh(i,jspins)
      61    22508243 :             rou=max(rou,sml)
      62    22508243 :             rod=max(rod,sml)
      63             :          ENDIF
      64             : 
      65             :          !.....
      66             :          !       vxlu,vxld,vxgu,vxgd: exchange potential in ry.(local,grad),
      67             :          !c        (up,dw).
      68             :          !       vclu,vcld,vcgu,vcgd: correl. potential in ry.(local,grad),
      69             :          !c        (up,dw).
      70             :          !       all later in hartree.
      71             :          !.....
      72    31190373 :          vxlu   = 0.0e0
      73    31190373 :          vclu   = 0.0e0
      74    31190373 :          vxld   = 0.0e0
      75    31190373 :          vcld   = 0.0e0
      76    31190373 :          vxgu   = 0.0e0
      77    31190373 :          vcgu   = 0.0e0
      78    31190373 :          vxgd   = 0.0e0
      79    31190373 :          vcgd   = 0.0e0
      80    31190373 :          vxupsr = 0.0e0
      81    31190373 :          vxdnsr = 0.0e0
      82             : 
      83             :          !.....
      84    31190373 :          ro=rou+rod
      85             : 
      86    31190373 :          IF (ro > smlc) THEN
      87             : 
      88    31170628 :             lcor    = 1
      89    31170628 :             lpot    = 1
      90    31170628 :             up      = rou
      91    31170628 :             agrup   = agru(i)
      92    31170628 :             delgrup = gggru(i)
      93    31170628 :             uplap   = g2ru(i)
      94    31170628 :             dn      = rod
      95    31170628 :             agrdn   = agrd(i)
      96    31170628 :             delgrdn = gggrd(i)
      97    31170628 :             dnlap   = g2rd(i)
      98    31170628 :             agrt    = agr(i)
      99    31170628 :             delgrt  = gggr(i)
     100             : 
     101             :             CALL easypbe(xcpot, &
     102             :                          up,agrup,delgrup,uplap,dn,agrdn,delgrdn,dnlap, &
     103             :                          agrt,delgrt,lcor,lpot, &
     104             :                          exlsd,vxuplsd,vxdnlsd,eclsd,vcuplsd,vcdnlsd, &
     105             :                          expbe,vxuppbe,vxdnpbe,ecpbe,vcuppbe,vcdnpbe, &
     106    31170628 :                          vxupsr,vxdnsr)
     107             : 
     108    31170628 :             vxlu=vxuplsd
     109    31170628 :             vclu=vcuplsd
     110    31170628 :             vxgu=vxuppbe-vxuplsd
     111    31170628 :             vcgu=vcuppbe-vcuplsd
     112             : 
     113    31170628 :             vxld=vxdnlsd
     114    31170628 :             vcld=vcdnlsd
     115    31170628 :             vxgd=vxdnpbe-vxdnlsd
     116    31170628 :             vcgd=vcdnpbe-vcdnlsd
     117             : 
     118             :          END IF ! ro > smlc
     119             : 
     120    31190373 :          xcptu = vxlu + vclu + vxgu + vcgu
     121    31190373 :          xcptd = vxld + vcld + vxgd + vcgd
     122             : 
     123    31190373 :          IF (l_hse)then
     124           0 :             vx(i,1)       = vxupsr * 2
     125           0 :             vx(i,jspins)  = vxdnsr * 2
     126             :          ELSE
     127    31190373 :             vx(i,1)       = (vxlu + vxgu)*2
     128    31190373 :             vx(i,jspins)  = (vxld + vxgd)*2
     129             :          END IF
     130             : 
     131    31190373 :          vxc(i,1)      = xcptu*2    ! transform to Ry, will be converted
     132    31193565 :          vxc(i,jspins) = xcptd*2    ! back to htr in calling routine
     133             : 
     134             :       END DO
     135             : !$OMP END PARALLEL DO
     136             : 
     137        1596 :    END SUBROUTINE vxcepbe
     138             : END MODULE m_vxcepbe

Generated by: LCOV version 1.13