Line data Source code
1 : !--------------------------------------------------------------------------------
2 : ! Copyright (c) 2016 Peter Grünberg Institut, Forschungszentrum Jülich, Germany
3 : ! This file is part of FLEUR and available as free software under the conditions
4 : ! of the MIT license as expressed in the LICENSE file in more detail.
5 : !--------------------------------------------------------------------------------
6 : MODULE m_dosint
7 : !
8 : ! integrated dos to ei
9 : !
10 : USE m_trisrt
11 : USE m_types
12 :
13 : IMPLICIT NONE
14 :
15 : CONTAINS
16 0 : SUBROUTINE dosint(ei,nemax,jspins,kpts,sfac,eig,ct)
17 :
18 : INTEGER, INTENT(IN) :: jspins
19 : REAL, INTENT(IN) :: ei,sfac
20 : TYPE(t_kpts), INTENT(IN) :: kpts
21 : INTEGER, INTENT(IN) :: nemax(:)
22 : REAL, INTENT(IN) :: eig(:,:,:) !(neig,nkpt,jspins)
23 : REAL, INTENT(OUT) :: ct
24 :
25 : INTEGER :: jspin,iBand,itria
26 : INTEGER :: k1,k2,k3
27 : INTEGER :: neig
28 : REAL :: e1,e2,e3
29 : REAl :: ee,e32,e31,e21,s
30 :
31 0 : s = 0.0
32 0 : DO jspin = 1,jspins
33 0 : neig = nemax(jspin)
34 0 : DO iBand = 1,neig
35 0 : DO itria = 1,kpts%ntet
36 : !Get the k-points and eigenvalues
37 : !of the current triangle
38 0 : k1 = kpts%ntetra(1,itria)
39 0 : k2 = kpts%ntetra(2,itria)
40 0 : k3 = kpts%ntetra(3,itria)
41 0 : e1 = eig(iBand,k1,jspin)
42 0 : e2 = eig(iBand,k2,jspin)
43 0 : e3 = eig(iBand,k3,jspin)
44 : !Sort by ascending eigenvalues
45 0 : CALL trisrt(e1,e2,e3,k1,k2,k3)
46 0 : IF (e1.LE.-9999.0) CYCLE !Not all eigenvalues available
47 0 : IF (ei.LE.e1) CYCLE !triangle not occupied
48 0 : IF (ei.GE.e3) THEN
49 0 : s = s + kpts%voltet(itria)/kpts%ntet
50 0 : ELSEIF (ei.GT.e2) THEN
51 0 : e31 = e3 - e1
52 0 : e32 = e3 - e2
53 0 : ee = e3 - ei
54 : s = s + kpts%voltet(itria)/kpts%ntet &
55 0 : * (1.0-ee*ee/ (e31*e32))
56 : ELSE
57 0 : e21 = e2 - e1
58 0 : e31 = e3 - e1
59 0 : ee = ei - e1
60 : s = s + kpts%voltet(itria)/kpts%ntet &
61 0 : * ee*ee/ (e21*e31)
62 : ENDIF
63 : ENDDO
64 : ENDDO
65 : ENDDO
66 :
67 : !Take into account spin-degeneracy
68 : !jr ct=2.*s
69 : !gb ct = (2./jspins)*s
70 0 : ct = sfac * s
71 :
72 0 : END SUBROUTINE dosint
73 : END MODULE m_dosint
|