File: energyfdu.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 (68 lines) | stat: -rw-r--r-- 1,617 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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68

! Copyright (C) 2008 F. Bultmark, F. Cricchio, L. Nordstrom and J. K. Dewhurst.
! This file is distributed under the terms of the GNU General Public License.
! See the file COPYING for license details.

!BOP
! !ROUTINE: energyfdu
! !INTERFACE:
subroutine energyfdu
! !USES:
use modmain
use moddftu
use modmpi
! !DESCRIPTION:
!   Calculates the energies of radial functions to be used to calculate the
!   Slater integrals. By convention those energies are chosen to be the ones at
!   the center of the band.
!
! !REVISION HISTORY:
!   Created April 2008 (F. Cricchio)
!EOP
!BOC
implicit none
! local variables
integer is,ia,ja,ias,jas
integer nr,nri,nnf,i,l
logical fnd
! automatic arrays
logical done(natmmax)
real(8) vr(nrmtmax)
nnf=0
! loop over DFT+U entries
do i=1,ndftu
  is=idftu(1,i)
  l=idftu(2,i)
  nr=nrmt(is)
  nri=nrmti(is)
  done(:)=.false.
  do ia=1,natoms(is)
    if (done(ia)) cycle
    ias=idxas(ia,is)
    call rfmtlm(1,nr,nri,vsmt(:,ias),vr)
    vr(1:nr)=vr(1:nr)*y00
! find the center of the band starting from -0.5 Ha
    fdue(l,ias)=-0.5d0
    call findband(solsc,l,nrmt(is),rsp(1,is),vr,epsband,demaxbnd,fdue(l,ias), &
     fnd)
    if (.not.fnd) nnf=nnf+1
    done(ia)=.true.
! copy to equivalent atoms
    do ja=1,natoms(is)
      if ((.not.done(ja)).and.(eqatoms(ia,ja,is))) then
        jas=idxas(ja,is)
        fdue(l,jas)=fdue(l,ias)
        done(ja)=.true.
      end if
    end do
! end loops over atoms and species
  end do
end do
if (mp_mpi.and.(nnf.gt.0)) then
  write(*,*)
  write(*,'("Warning(energyfdu): could not find ",I3," energies")') nnf
end if
return
end subroutine
!EOC