LCOV - code coverage report
Current view: top level - vgen - mkgz.f (source / functions) Hit Total Coverage
Test: FLEUR test coverage Lines: 53 61 86.9 %
Date: 2024-04-23 04:28:20 Functions: 1 1 100.0 %

          Line data    Source code
       1             :       MODULE m_mkgz
       2             : c.....------------------------------------------------------------------
       3             : c     by use of cartesian x,y,z components of charge density gradients,
       4             : c     make the quantities
       5             : cc      agrt,agru,agrd,g2rt,g2ru,g2rd,gggrt,gggru,gggrd,
       6             : cc      gzgr
       7             : cc    used to calculate gradient contribution to xc potential and
       8             : cc    energy.
       9             : c.....------------------------------------------------------------------
      10             :       CONTAINS
      11          34 :       SUBROUTINE mkgz(
      12          34 :      >     nmzdf,jspins,rh1,rh2,rhdz1,rhdz2,rhdzz1,rhdzz2,idx,
      13             :      <     grad)
      14             :       USE m_types
      15             :       IMPLICIT NONE
      16             :       INTEGER, INTENT (IN) :: nmzdf,jspins,idx
      17             :       REAL,    INTENT (IN) :: rh1(nmzdf),rhdz1(nmzdf),rhdzz1(nmzdf)
      18             :       REAL,    INTENT (IN) :: rh2(nmzdf),rhdz2(nmzdf),rhdzz2(nmzdf)
      19             :       TYPE(t_gradients),INTENT(INOUT)::grad
      20             : 
      21             :       INTEGER i
      22             :       REAL    vlt,dvzt,dvzzt,vlu,dvzu,dvzzu,vld,dvzd,dvzzd
      23             :       REAL    dagrzt,dagrzu,dagrzd,dztadz,sml
      24             : 
      25          34 :       sml = 1.e-14
      26             : 
      27          34 :       IF (ALLOCATED(grad%sigma)) THEN
      28           0 :          IF(jspins==1) THEN
      29           0 :             DO i=1,nmzdf
      30           0 :                grad%sigma(1,idx+i)=rhdz1(i)*rhdz1(i)
      31             :             ENDDO
      32             :          ELSE
      33           0 :              DO i=1,nmzdf
      34           0 :                grad%sigma(1,idx+i)=rhdz1(i)*rhdz1(i)
      35           0 :                grad%sigma(2,idx+i)=rhdz1(i)*rhdz2(i)
      36           0 :                grad%sigma(3,idx+i)=rhdz2(i)*rhdz2(i)
      37             :             ENDDO
      38             :          ENDIF
      39           0 :          RETURN
      40             :       ENDIF
      41             : 
      42          34 :       IF (jspins == 1) THEN
      43             : 
      44        4620 :         DO i = 1,nmzdf
      45             : 
      46        4590 :           vlu = max(rh1(i)/2,sml)
      47        4590 :           dvzu = rhdz1(i)/2
      48        4590 :           dvzzu = rhdzz1(i)/2
      49        4590 :           vld = vlu
      50        4590 :           dvzd = dvzu
      51        4590 :           dvzzd = dvzzu
      52             : 
      53        4590 :           vlt = vlu+vld
      54        4590 :           dvzt = dvzu+dvzd
      55        4590 :           dvzzt = dvzzu+dvzzd
      56             : 
      57             : c         agrt: abs(grad(ro)), u,d for up and down.
      58             : 
      59        4590 :           grad%agrt(idx+i) = max(abs(dvzt),sml)
      60        4590 :           grad%agru(idx+i) = max(abs(dvzu),sml)
      61        4590 :           grad%agrd(idx+i) = max(abs(dvzd),sml)
      62             : 
      63        4590 :           dagrzt= dvzt*dvzzt/grad%agrt(idx+i)
      64        4590 :           dagrzu= dvzu*dvzzu/grad%agru(idx+i)
      65        4590 :           dagrzd= dvzd*dvzzd/grad%agrd(idx+i)
      66             : 
      67        4590 :           grad%gggrt(idx+i) = dvzt*dagrzt
      68        4590 :           grad%gggru(idx+i) = dvzu*dagrzu
      69        4590 :           grad%gggrd(idx+i) = dvzd*dagrzd
      70             : 
      71             : c         dztadz=d(zeta)/dz,..
      72             : 
      73        4590 :           dztadz = (dvzu-dvzd)/vlt - (vlu-vld)*dvzt/vlt**2
      74             : 
      75             : c         gzgr=grad(zeta)*grad(ro).
      76             : 
      77        4590 :           grad%gzgr(idx+i) = dztadz*dvzt
      78             : 
      79             : c         g2rt: grad(grad(ro))
      80             : 
      81        4590 :           grad%g2rt(idx+i)  = dvzzt
      82        4590 :           grad%g2ru(idx+i)  = dvzzu
      83        4620 :           grad%g2rd(idx+i)  = dvzzd
      84             : 
      85             :         ENDDO
      86             : 
      87             :       ELSE
      88             : 
      89         616 :         DO i = 1,nmzdf
      90             : 
      91         612 :           vlu = max(rh1(i),sml)
      92         612 :           dvzu = rhdz1(i)
      93         612 :           dvzzu = rhdzz1(i)
      94         612 :           vld = max(rh2(i),sml)
      95         612 :           dvzd = rhdz2(i)
      96         612 :           dvzzd = rhdzz2(i)
      97             : 
      98         612 :           vlt = vlu+vld
      99         612 :           dvzt = dvzu+dvzd
     100         612 :           dvzzt = dvzzu+dvzzd
     101             : 
     102             : c         agrt: abs(grad(ro)), u,d for up and down.
     103             : 
     104         612 :           grad%agrt(idx+i) = max(abs(dvzt),sml)
     105         612 :           grad%agru(idx+i) = max(abs(dvzu),sml)
     106         612 :           grad%agrd(idx+i) = max(abs(dvzd),sml)
     107             : 
     108         612 :           dagrzt= dvzt*dvzzt/grad%agrt(idx+i)
     109         612 :           dagrzu= dvzu*dvzzu/grad%agru(idx+i)
     110         612 :           dagrzd= dvzd*dvzzd/grad%agrd(idx+i)
     111             : 
     112         612 :           grad%gggrt(idx+i) = dvzt*dagrzt
     113         612 :           grad%gggru(idx+i) = dvzu*dagrzu
     114         612 :           grad%gggrd(idx+i) = dvzd*dagrzd
     115             : 
     116             : c         dztadz=d(zeta)/dz,..
     117             : 
     118         612 :           dztadz = (dvzu-dvzd)/vlt - (vlu-vld)*dvzt/vlt**2
     119             : 
     120             : c         gzgr=grad(zeta)*grad(ro).
     121             : 
     122         612 :           grad%gzgr(idx+i) = dztadz*dvzt
     123             : 
     124             : c         g2rt: grad(grad(ro))
     125             : 
     126         612 :           grad%g2rt(idx+i)  = dvzzt
     127         612 :           grad%g2ru(idx+i)  = dvzzu
     128         616 :           grad%g2rd(idx+i)  = dvzzd
     129             : 
     130             : 
     131             :         ENDDO
     132             :       ENDIF
     133             : 
     134             :       END SUBROUTINE mkgz
     135             :       END MODULE m_mkgz

Generated by: LCOV version 1.14