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

            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           27 :       SUBROUTINE mkgz(
      12           27 :      >     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           27 :       sml = 1.e-14
      26              : 
      27           27 :       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           27 :       IF (jspins == 1) THEN
      43              : 
      44         3542 :         DO i = 1,nmzdf
      45              : 
      46         3519 :           vlu = max(rh1(i)/2,sml)
      47         3519 :           dvzu = rhdz1(i)/2
      48         3519 :           dvzzu = rhdzz1(i)/2
      49         3519 :           vld = vlu
      50         3519 :           dvzd = dvzu
      51         3519 :           dvzzd = dvzzu
      52              : 
      53         3519 :           vlt = vlu+vld
      54         3519 :           dvzt = dvzu+dvzd
      55         3519 :           dvzzt = dvzzu+dvzzd
      56              : 
      57              : c         agrt: abs(grad(ro)), u,d for up and down.
      58              : 
      59         3519 :           grad%agrt(idx+i) = max(abs(dvzt),sml)
      60         3519 :           grad%agru(idx+i) = max(abs(dvzu),sml)
      61         3519 :           grad%agrd(idx+i) = max(abs(dvzd),sml)
      62              : 
      63         3519 :           dagrzt= dvzt*dvzzt/grad%agrt(idx+i)
      64         3519 :           dagrzu= dvzu*dvzzu/grad%agru(idx+i)
      65         3519 :           dagrzd= dvzd*dvzzd/grad%agrd(idx+i)
      66              : 
      67         3519 :           grad%gggrt(idx+i) = dvzt*dagrzt
      68         3519 :           grad%gggru(idx+i) = dvzu*dagrzu
      69         3519 :           grad%gggrd(idx+i) = dvzd*dagrzd
      70              : 
      71              : c         dztadz=d(zeta)/dz,..
      72              : 
      73         3519 :           dztadz = (dvzu-dvzd)/vlt - (vlu-vld)*dvzt/vlt**2
      74              : 
      75              : c         gzgr=grad(zeta)*grad(ro).
      76              : 
      77         3519 :           grad%gzgr(idx+i) = dztadz*dvzt
      78              : 
      79              : c         g2rt: grad(grad(ro))
      80              : 
      81         3519 :           grad%g2rt(idx+i)  = dvzzt
      82         3519 :           grad%g2ru(idx+i)  = dvzzu
      83         3542 :           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 2.0-1