LCOV - code coverage report
Current view: top level - core - coredr.F90 (source / functions) Hit Total Coverage
Test: FLEUR test coverage Lines: 63 75 84.0 %
Date: 2024-04-26 04:44:34 Functions: 1 1 100.0 %

          Line data    Source code
       1             : MODULE m_coredr
       2             : CONTAINS
       3           2 :   SUBROUTINE coredr(input,atoms,seig, rho,sphhar, vrs, qints,rhc)
       4             :     !     *******************************************************
       5             :     !     *****   set up the core densities for compounds   *****
       6             :     !     *****   for relativistic core                     *****
       7             :     !     *******************************************************
       8             : 
       9             :     USE m_etabinit
      10             :     USE m_spratm
      11             :     USE m_ccdnup
      12             :     USE m_cdn_io
      13             :     USE m_types
      14             :     IMPLICIT NONE
      15             :     
      16             :     TYPE(t_input),INTENT(IN)     :: input
      17             :     TYPE(t_sphhar),INTENT(IN)    :: sphhar
      18             :     TYPE(t_atoms),INTENT(IN)     :: atoms
      19             :     !
      20             :     !     .. Scalar Arguments ..
      21             :     REAL seig
      22             :     !     ..
      23             :     !     .. Array Arguments ..
      24             :     REAL   , INTENT (IN) :: vrs(atoms%jmtd,atoms%ntype,input%jspins)
      25             :     REAL,    INTENT (INOUT) :: rho(atoms%jmtd,0:sphhar%nlhd,atoms%ntype,input%jspins)
      26             :     REAL,    INTENT (OUT) :: rhc(atoms%msh,atoms%ntype,input%jspins),qints(atoms%ntype,input%jspins)
      27             :     !     ..
      28             :     !     .. Local Scalars ..
      29             :     REAL dxx,rnot,sume,t2,t2b,z,t1,rr,d,v1,v2
      30             :     INTEGER i,j,jatom,jspin,k,n,ncmsh
      31             :     LOGICAL exetab
      32             :     !     ..
      33             :     !     .. Local Arrays ..
      34           2 :     REAL br(atoms%jmtd,atoms%ntype),brd(atoms%msh),etab(100,atoms%ntype),&
      35           2 :          rhcs(atoms%jmtd,atoms%ntype,input%jspins),rhochr(atoms%msh),rhospn(atoms%msh),&
      36           2 :          tecs(atoms%ntype,input%jspins),vr(atoms%jmtd,atoms%ntype),vrd(atoms%msh)
      37           2 :     INTEGER nkmust(atoms%ntype),ntab(100,atoms%ntype),ltab(100,atoms%ntype)
      38             : 
      39             :     !     ..
      40         608 :     ntab(:,:) = -1 ; ltab(:,:) = -1 ; etab(:,:) = 0.0
      41             :     !
      42             :     ! setup potential and field
      43             :     !
      44           2 :     IF (input%jspins.EQ.1) THEN
      45           0 :        DO n = 1,atoms%ntype
      46           0 :           DO j = 1,atoms%jmtd
      47           0 :              vr(j,n) = vrs(j,n,1)
      48           0 :              br(j,n) = 0.0
      49             :           END DO
      50             :        END DO
      51             :     ELSE
      52           4 :        DO n = 1,atoms%ntype
      53        1134 :           DO j = 1,atoms%jmtd
      54        1130 :              vr(j,n) = (vrs(j,n,1)+vrs(j,n,input%jspins))/2.
      55        1132 :              br(j,n) = (vrs(j,n,input%jspins)-vrs(j,n,1))/2.
      56             :           END DO
      57             :        END DO
      58             :     END IF
      59             :     !
      60             :     ! setup eigenvalues
      61           2 :     exetab = .FALSE.
      62           2 :     INQUIRE (file='core.dat',exist=exetab)
      63           2 :     IF (exetab) THEN
      64           1 :        OPEN (58,file='core.dat',form='formatted',status='old')
      65           1 :        REWIND 58
      66           2 :        DO n = 1,atoms%ntype
      67           1 :           READ (58,FMT=*) nkmust(n)
      68          20 :           DO k = 1,nkmust(n)
      69          18 :              READ (58,FMT='(f12.6,2i3)') etab(k,n),ntab(k,n),&
      70          37 :                   &                                               ltab(k,n)
      71             : 
      72             :           END DO
      73             :        END DO
      74             :     ELSE
      75           1 :        OPEN (58,file='core.dat',form='formatted',status='new')
      76           1 :        CALL etabinit(atoms,input, vr, etab,ntab,ltab,nkmust)
      77             :     END IF
      78             :     !
      79           2 :     ncmsh = atoms%msh
      80           2 :     seig = 0.
      81             :     ! ---> set up densities
      82           4 :     DO jatom = 1,atoms%ntype
      83             :        !
      84        1132 :        DO j = 1,atoms%jri(jatom)
      85        1130 :           vrd(j) = vr(j,jatom)
      86        1132 :           brd(j) = br(j,jatom)
      87             :        END DO
      88             : 
      89           2 :        IF (input%l_core_confpot) THEN
      90             :           !--->    linear extension of the potential with slope t1 / a.u.
      91           2 :           rr = atoms%rmt(jatom)
      92           2 :           d = EXP(atoms%dx(jatom))
      93           2 :           t1=0.125
      94             :           !         t2  = vrd(jri(jatom))/rr - rr*t1
      95             :           !         t2b = brd(jri(jatom))/rr - rr*t1
      96           2 :           t2  = vrs(atoms%jri(jatom),jatom,1)     /rr - rr*t1
      97           2 :           t2b = vrs(atoms%jri(jatom),jatom,input%jspins)/rr - rr*t1
      98             :        ELSE
      99           0 :           t2 = vrd(atoms%jri(jatom))/ (atoms%jri(jatom)-ncmsh)
     100           0 :           t2b = brd(atoms%jri(jatom))/ (atoms%jri(jatom)-ncmsh)
     101             :        ENDIF
     102           2 :        IF (atoms%jri(jatom).LT.ncmsh) THEN
     103         218 :           DO i = atoms%jri(jatom) + 1,ncmsh
     104         218 :              IF (input%l_core_confpot) THEN
     105         216 :                 rr = d*rr
     106         216 :                 v1 = rr*( t2  + rr*t1 )
     107         216 :                 v2 = rr*( t2b + rr*t1 )
     108         216 :                 vrd(i) = 0.5*(v2 + v1)
     109         216 :                 brd(i) = 0.5*(v2 - v1)
     110             :              ELSE
     111           0 :                 vrd(i) = vrd(atoms%jri(jatom)) + t2* (i-atoms%jri(jatom))
     112           0 :                 brd(i) = brd(atoms%jri(jatom)) + t2b* (i-atoms%jri(jatom))
     113             :              ENDIF
     114             :           END DO
     115             :        END IF
     116             : 
     117             :        !        rr = rmsh(1,jatom)
     118             :        !        do i =1, ncmsh
     119             :        !          rr = d*rr
     120             :        !         write(*,'(3f20.10)') rr,vrd(i),brd(i)
     121             :        !        enddo
     122             : 
     123             :        !
     124           2 :        rnot = atoms%rmsh(1,jatom)
     125           2 :        z = atoms%zatom(jatom)
     126           2 :        dxx = atoms%dx(jatom)
     127             : 
     128             :        CALL spratm(atoms%msh,vrd,brd,z,rnot,dxx,ncmsh,&
     129           2 :             etab(1,jatom),ntab(1,jatom),ltab(1,jatom), sume,rhochr,rhospn)
     130             : 
     131           2 :        seig = seig + atoms%neq(jatom)*sume
     132             :        !
     133             :        !     rho_up=2(ir) = (rhochr(ir)  + rhospn(ir))*0.5
     134             :        !     rho_dw=1(ir) = (rhochr(ir)  - rhospn(ir))*0.5
     135             :        !
     136           2 :        IF (input%jspins.EQ.2) THEN
     137        1132 :           DO j = 1,atoms%jri(jatom)
     138        1130 :              rhcs(j,jatom,input%jspins) = (rhochr(j)+rhospn(j))*0.5
     139        1132 :              rhcs(j,jatom,1) = (rhochr(j)-rhospn(j))*0.5
     140             :           END DO
     141             :        ELSE
     142           0 :           DO j = 1,atoms%jri(jatom)
     143           0 :              rhcs(j,jatom,1) = rhochr(j)
     144             :           END DO
     145             :        END IF
     146           2 :        IF (input%jspins.EQ.2) THEN
     147        1348 :           DO j = 1,atoms%msh
     148        1346 :              rhc(j,jatom,input%jspins) = (rhochr(j)+rhospn(j))*0.5
     149        1348 :              rhc(j,jatom,1) = (rhochr(j)-rhospn(j))*0.5
     150             :           ENDDO
     151             :        ELSE
     152           0 :           DO j = 1,atoms%msh
     153           0 :              rhc(j,jatom,1) = rhochr(j)
     154             :           END DO
     155             :        END IF
     156             :        !
     157             :        ! store atomic eigenvalues to file.58
     158           2 :        IF (jatom.EQ.1) REWIND 58
     159           2 :        WRITE (58,FMT=*) nkmust(jatom)
     160          38 :        DO k = 1,nkmust(jatom)
     161          38 :           WRITE (58,FMT='(f12.6,2i3)') etab(k,jatom),ntab(k,jatom), ltab(k,jatom)
     162             :        END DO
     163             :        !---->update spherical charge density rho with the core density.
     164           6 :        CALL ccdnup(atoms,sphhar,input,jatom, rho, sume,vrs,rhochr,rhospn, tecs,qints)
     165             : 
     166             :     END DO ! loop over atoms (jatom)
     167             :     !
     168             :     !----> store core charge densities
     169           2 :     CALL writeCoreDensity(input,atoms,rhcs,tecs,qints)
     170           2 :   END SUBROUTINE coredr
     171             : END MODULE m_coredr

Generated by: LCOV version 1.14