File: hflocal.f90

package info (click to toggle)
elkcode 5.4.24-2
  • links: PTS, VCS
  • area: main
  • in suites: buster, sid
  • size: 12,840 kB
  • sloc: f90: 48,415; fortran: 22,457; perl: 965; makefile: 384; sh: 369; python: 105; ansic: 67
file content (53 lines) | stat: -rw-r--r-- 1,576 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53

! Copyright (C) 2012 J. K. Dewhurst, S. Sharma and E. K. U. Gross.
! This file is distributed under the terms of the GNU General Public License.
! See the file COPYING for license details.

subroutine hflocal(hyb,vmt,vir,bmt,bir)
use modmain
implicit none
! arguments
logical, intent(in) :: hyb
real(8), intent(out) :: vmt(npcmtmax,natmtot),vir(ngtot)
real(8), intent(out) :: bmt(npcmtmax,natmtot,ndmag),bir(ngtot,ndmag)
! local variables
integer idm,is,ias,np
! automatic arrays
real(8) rfmt1(npmtmax),rfmt2(npcmtmax)
! compute the Coulomb potential
call potcoul
! convert to spherical coordinates and store in output arrays
if (hyb) then
! hybrid functional case
  call potxc(.true.,xctype,rhomt,rhoir,magmt,magir,taumt,tauir,exmt,exir,ecmt, &
   ecir,vxcmt,vxcir,bxcmt,bxcir,wxcmt,wxcir)
  do ias=1,natmtot
    is=idxis(ias)
    np=npmt(is)
    rfmt1(1:np)=vclmt(1:np,ias)+vxcmt(1:np,ias)
    call rfmtftoc(nrmt(is),nrmti(is),rfmt1,rfmt2)
    call rbsht(nrcmt(is),nrcmti(is),rfmt2,vmt(:,ias))
  end do
  vir(:)=(vclir(:)+vxcir(:))*cfunir(:)
  if (spinpol) then
    do idm=1,ndmag
      do ias=1,natmtot
        is=idxis(ias)
        call rfmtftoc(nrmt(is),nrmti(is),bxcmt(:,ias,idm),rfmt1)
        call rbsht(nrcmt(is),nrcmti(is),rfmt1,bmt(:,ias,idm))
      end do
      bir(:,idm)=bxcir(:,idm)*cfunir(:)
    end do
  end if
else
! normal Hartree-Fock case
  do ias=1,natmtot
    is=idxis(ias)
    call rfmtftoc(nrmt(is),nrmti(is),vclmt(:,ias),rfmt1)
    call rbsht(nrcmt(is),nrcmti(is),rfmt1,vmt(:,ias))
  end do
  vir(:)=vclir(:)*cfunir(:)
end if
return
end subroutine