pwdft  0.1
PW-DFT code for education
libtetrabz_fermigr_mod.F90
Go to the documentation of this file.
1 !
2 ! Copyright (c) 2014 Mitsuaki Kawamura
3 !
4 ! Permission is hereby granted, free of charge, to any person obtaining a
5 ! copy of this software and associated documentation files (the
6 ! "Software"), to deal in the Software without restriction, including
7 ! without limitation the rights to use, copy, modify, merge, publish,
8 ! distribute, sublicense, and/or sell copies of the Software, and to
9 ! permit persons to whom the Software is furnished to do so, subject to
10 ! the following conditions:
11 !
12 ! The above copyright notice and this permission notice shall be included
13 ! in all copies or substantial portions of the Software.
14 !
15 ! THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
16 ! OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17 ! MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
18 ! IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY
19 ! CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
20 ! TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
21 ! SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
22 !
24  !
25  IMPLICIT NONE
26  !
27  PRIVATE
28  PUBLIC libtetrabz_fermigr
29  !
30 CONTAINS
31 !
32 ! Compute Fermi's golden rule
33 !
34 SUBROUTINE libtetrabz_fermigr(ltetra,bvec,nb,nge,eig1,eig2,ngw,wght,ne,e0,comm) BIND(C)
35  !
36  USE iso_c_binding
38  IMPLICIT NONE
39  !
40  INTEGER(C_INT),INTENT(IN) :: ltetra, nb, nge(3), ngw(3), ne
41  REAL(c_double),INTENT(IN) :: bvec(9), e0(ne), eig1(nb,product(nge(1:3))), eig2(nb,product(nge(1:3)))
42  REAL(c_double),INTENT(OUT) :: wght(ne*nb*nb,product(ngw(1:3)))
43  INTEGER(C_INT),INTENT(IN),OPTIONAL :: comm
44  !
45  LOGICAL :: linterpol
46  INTEGER :: nt_local, nk_local, nkbz, ik, kintp(8)
47  INTEGER,ALLOCATABLE :: ik_global(:,:), ik_local(:,:)
48  REAL(8) :: wlsm(4,20), wintp(1,8)
49  REAL(8),ALLOCATABLE :: wghtd(:,:,:), kvec(:,:)
50  !
51  IF(PRESENT(comm)) THEN
52  CALL libtetrabz_initialize(ltetra,nge,ngw,bvec,linterpol,wlsm,nk_local,&
53  & nt_local,nkbz,ik_global,ik_local,kvec,comm)
54  ELSE
55  CALL libtetrabz_initialize(ltetra,nge,ngw,bvec,linterpol,wlsm,nk_local,&
56  & nt_local,nkbz,ik_global,ik_local,kvec)
57  END IF
58  !
59  IF(linterpol) THEN
60  !
61  ALLOCATE(wghtd(ne*nb*nb,1,nk_local))
62  CALL libtetrabz_fermigr_main(wlsm,nt_local,ik_global,ik_local,nb,nkbz,eig1,eig2,ne,e0,nk_local,wghtd)
63  !
64  ! Interpolation
65  !
66  wght(1:ne*nb*nb,1:product(ngw(1:3))) = 0d0
67  DO ik = 1, nk_local
68  CALL libtetrabz_interpol_indx(ngw,kvec(1:3,ik),kintp,wintp)
69  wght(1:ne*nb*nb,kintp(1:8)) = wght(1:ne*nb*nb, kintp(1:8)) &
70  & + matmul(wghtd(1:ne*nb*nb,1:1,ik), wintp(1:1,1:8))
71  END DO ! ik = 1, nk_local
72  DEALLOCATE(wghtd, kvec)
73  !
74  IF(PRESENT(comm)) CALL libtetrabz_mpisum_dv(comm, ne*nb*nb*product(ngw(1:3)), wght)
75  !
76  ELSE
77  CALL libtetrabz_fermigr_main(wlsm,nt_local,ik_global,ik_local,nb,nkbz,eig1,eig2,ne,e0,nk_local,wght)
78  END IF
79  !
80  DEALLOCATE(ik_global, ik_local)
81  !
82 END SUBROUTINE libtetrabz_fermigr
83 !
84 ! Main SUBROUTINE for Fermi's Gorlden rule : Theta(- E1) * Theta(E2) * Delta(E2 - E1 - w)
85 !
86 SUBROUTINE libtetrabz_fermigr_main(wlsm,nt_local,ik_global,ik_local,nb,nkBZ,eig1,eig2,ne,e0,nk_local,fermigr)
87  !
88  USE libtetrabz_common, ONLY : libtetrabz_sort, &
93  IMPLICIT NONE
94  !
95  INTEGER,INTENT(IN) :: nt_local, nb, nkBZ, nk_local, ne, &
96  & ik_global(20,nt_local), ik_local(20,nt_local)
97  REAL(8),INTENT(IN) :: wlsm(4,20), eig1(nb,nkBZ), eig2(nb,nkBZ), e0(ne)
98  REAL(8),INTENT(OUT) :: fermigr(ne*nb,nb,nk_local)
99  !
100  INTEGER :: it, ib, indx(4)
101  REAL(8) :: e(4), ei1(4,nb), ei2(4), ej1(4,nb), ej2(4,nb), thr = 1d-10, tsmall(4,4), v, w1(ne*nb,4), w2(ne*nb,4)
102  !
103  fermigr(1:ne*nb,1:nb,1:nk_local) = 0d0
104  !
105  !$OMP PARALLEL DEFAULT(NONE) &
106  !$OMP & SHARED(eig1,eig2,e0,fermigr,ik_global,ik_local,nb,ne,nt_local,thr,wlsm) &
107  !$OMP & PRIVATE(e,ei1,ei2,ej1,ej2,ib,indx,it,tsmall,V,w1,w2)
108  !
109  DO it = 1, nt_local
110  !
111  DO ib = 1, nb
112  ei1(1:4, ib) = matmul(wlsm(1:4,1:20), eig1(ib, ik_global(1:20,it)))
113  ej1(1:4, ib) = matmul(wlsm(1:4,1:20), eig2(ib, ik_global(1:20,it)))
114  END DO
115  !
116  !$OMP DO
117  DO ib = 1, nb
118  !
119  w1(1:ne*nb,1:4) = 0d0
120  e(1:4) = ei1(1:4, ib)
121  CALL libtetrabz_sort(4,e,indx)
122  !
123  IF(e(1) <= 0d0 .AND. 0d0 < e(2)) THEN
124  !
125  CALL libtetrabz_tsmall_a1(e,v,tsmall)
126  !
127  IF(v > thr) THEN
128  !
129  ei2(1:4 ) = matmul(tsmall(1:4,1:4), ei1(indx(1:4), ib))
130  ej2(1:4,1:nb) = matmul(tsmall(1:4,1:4), ej1(indx(1:4),1:nb))
131  CALL libtetrabz_fermigr2(nb,ne,e0,ei2,ej2,w2)
132  w1(1:ne*nb,indx(1:4)) = w1(1:ne*nb,indx(1:4)) &
133  & + v * matmul(w2(1:ne*nb, 1:4 ), tsmall(1:4,1:4))
134  !
135  END IF
136  !
137  ELSE IF( e(2) <= 0d0 .AND. 0d0 < e(3)) THEN
138  !
139  CALL libtetrabz_tsmall_b1(e,v,tsmall)
140  !
141  IF(v > thr) THEN
142  !
143  ei2(1:4 ) = matmul(tsmall(1:4,1:4), ei1(indx(1:4), ib))
144  ej2(1:4,1:nb) = matmul(tsmall(1:4,1:4), ej1(indx(1:4),1:nb))
145  CALL libtetrabz_fermigr2(nb,ne,e0,ei2,ej2,w2)
146  w1(1:ne*nb,indx(1:4)) = w1(1:ne*nb,indx(1:4)) &
147  & + v * matmul(w2(1:ne*nb, 1:4 ), tsmall(1:4,1:4))
148  !
149  END IF
150  !
151  CALL libtetrabz_tsmall_b2(e,v,tsmall)
152  !
153  IF(v > thr) THEN
154  !
155  ei2(1:4 ) = matmul(tsmall(1:4,1:4), ei1(indx(1:4), ib))
156  ej2(1:4,1:nb) = matmul(tsmall(1:4,1:4), ej1(indx(1:4),1:nb))
157  CALL libtetrabz_fermigr2(nb,ne,e0,ei2,ej2,w2)
158  w1(1:ne*nb,indx(1:4)) = w1(1:ne*nb,indx(1:4)) &
159  & + v * matmul(w2(1:ne*nb, 1:4 ), tsmall(1:4,1:4))
160  !
161  END IF
162  !
163  CALL libtetrabz_tsmall_b3(e,v,tsmall)
164  !
165  IF(v > thr) THEN
166  !
167  ei2(1:4 ) = matmul(tsmall(1:4,1:4), ei1(indx(1:4), ib))
168  ej2(1:4,1:nb) = matmul(tsmall(1:4,1:4), ej1(indx(1:4),1:nb))
169  CALL libtetrabz_fermigr2(nb,ne,e0,ei2,ej2,w2)
170  w1(1:ne*nb,indx(1:4)) = w1(1:ne*nb,indx(1:4)) &
171  & + v * matmul(w2(1:ne*nb, 1:4 ), tsmall(1:4,1:4))
172  !
173  END IF
174  !
175  ELSE IF( e(3) <= 0d0 .AND. 0d0 < e(4)) THEN
176  !
177  CALL libtetrabz_tsmall_c1(e,v,tsmall)
178  !
179  IF(v > thr) THEN
180  !
181  ei2(1:4 ) = matmul(tsmall(1:4,1:4), ei1(indx(1:4), ib))
182  ej2(1:4,1:nb) = matmul(tsmall(1:4,1:4), ej1(indx(1:4),1:nb))
183  CALL libtetrabz_fermigr2(nb,ne,e0,ei2,ej2,w2)
184  w1(1:ne*nb,indx(1:4)) = w1(1:ne*nb,indx(1:4)) &
185  & + v * matmul(w2(1:ne*nb, 1:4 ), tsmall(1:4,1:4))
186  !
187  END IF
188  !
189  CALL libtetrabz_tsmall_c2(e,v,tsmall)
190  !
191  IF(v > thr) THEN
192  !
193  ei2(1:4 ) = matmul(tsmall(1:4,1:4), ei1(indx(1:4), ib))
194  ej2(1:4,1:nb) = matmul(tsmall(1:4,1:4), ej1(indx(1:4),1:nb))
195  CALL libtetrabz_fermigr2(nb,ne,e0,ei2,ej2,w2)
196  w1(1:ne*nb,indx(1:4)) = w1(1:ne*nb,indx(1:4)) &
197  & + v * matmul(w2(1:ne*nb, 1:4 ), tsmall(1:4,1:4))
198  !
199  END IF
200  !
201  CALL libtetrabz_tsmall_c3(e,v,tsmall)
202  !
203  IF(v > thr) THEN
204  !
205  ei2(1:4 ) = matmul(tsmall(1:4,1:4), ei1(indx(1:4), ib))
206  ej2(1:4,1:nb) = matmul(tsmall(1:4,1:4), ej1(indx(1:4),1:nb))
207  CALL libtetrabz_fermigr2(nb,ne,e0,ei2,ej2,w2)
208  w1(1:ne*nb,indx(1:4)) = w1(1:ne*nb,indx(1:4)) &
209  & + v * matmul(w2(1:ne*nb, 1:4 ), tsmall(1:4,1:4))
210  !
211  END IF
212  !
213  ELSE IF(e(4) <= 0d0) THEN
214  !
215  ei2(1:4 ) = ei1(1:4, ib)
216  ej2(1:4,1:nb) = ej1(1:4,1:nb)
217  CALL libtetrabz_fermigr2(nb,ne,e0,ei2,ej2,w2)
218  w1(1:ne*nb,1:4) = w1(1:ne*nb,1:4) + w2(1:ne*nb,1:4)
219  !
220  END IF
221  !
222  fermigr(1:ne*nb,ib,ik_local(1:20,it)) = fermigr(1:ne*nb,ib, ik_local(1:20,it)) &
223  & + matmul(w1(1:ne*nb,1:4), wlsm(1:4,1:20))
224  !
225  END DO ! ib = 1, nb
226  !$OMP END DO NOWAIT
227  !
228  END DO ! it
229  !
230  !$OMP END PARALLEL
231  !
232  fermigr(1:ne*nb,1:nb,1:nk_local) = fermigr(1:ne*nb,1:nb,1:nk_local) / dble(6 * nkbz)
233  !
234 END SUBROUTINE libtetrabz_fermigr_main
235 !
236 ! Tetrahedra method for theta( - E2)
237 !
238 SUBROUTINE libtetrabz_fermigr2(nb,ne,e0,ei1,ej1,w1)
239  !
240  USE libtetrabz_common, ONLY : libtetrabz_sort, &
245  IMPLICIT NONE
246  !
247  INTEGER,INTENT(IN) :: nb, ne
248  REAL(8),INTENT(IN) :: e0(ne), ei1(4), ej1(4,nb)
249  REAL(8),INTENT(OUT) :: w1(ne,nb,4)
250  !
251  INTEGER :: ib, indx(4)
252  REAL(8) :: de(4), e(4), thr = 1d-8, tsmall(4,4), v, w2(ne,4)
253  !
254  DO ib = 1, nb
255  !
256  w1(1:ne,ib,1:4) = 0d0
257  e(1:4) = - ej1(1:4, ib)
258  CALL libtetrabz_sort(4,e,indx)
259  !
260  IF((e(1) <= 0d0 .AND. 0d0 < e(2)) .OR. (e(1) < 0d0 .AND. 0d0 <= e(2))) THEN
261  !
262  CALL libtetrabz_tsmall_a1(e,v,tsmall)
263  !
264  IF(v > thr) THEN
265  !
266  de(1:4) = matmul(tsmall(1:4,1:4), ej1(indx(1:4),ib) - ei1(indx(1:4)))
267  CALL libtetrabz_fermigr3(ne,e0,de,w2)
268  w1(1:ne,ib,indx(1:4)) = w1(1:ne,ib,indx(1:4)) &
269  & + v * matmul(w2(1:ne, 1:4 ), tsmall(1:4,1:4))
270  !
271  END IF
272  !
273  ELSE IF((e(2) <= 0d0 .AND. 0d0 < e(3)) .OR. (e(2) < 0d0 .AND. 0d0 <= e(3))) THEN
274  !
275  CALL libtetrabz_tsmall_b1(e,v,tsmall)
276  !
277  IF(v > thr) THEN
278  !
279  de(1:4) = matmul(tsmall(1:4,1:4), ej1(indx(1:4),ib) - ei1(indx(1:4)))
280  CALL libtetrabz_fermigr3(ne,e0,de,w2)
281  w1(1:ne,ib,indx(1:4)) = w1(1:ne,ib,indx(1:4)) &
282  & + v * matmul(w2(1:ne, 1:4 ), tsmall(1:4,1:4))
283  !
284  END IF
285  !
286  CALL libtetrabz_tsmall_b2(e,v,tsmall)
287  !
288  IF(v > thr) THEN
289  !
290  de(1:4) = matmul(tsmall(1:4,1:4), ej1(indx(1:4),ib) - ei1(indx(1:4)))
291  CALL libtetrabz_fermigr3(ne,e0,de,w2)
292  w1(1:ne,ib,indx(1:4)) = w1(1:ne,ib,indx(1:4)) &
293  & + v * matmul(w2(1:ne, 1:4 ), tsmall(1:4,1:4))
294  !
295  END IF
296  !
297  CALL libtetrabz_tsmall_b3(e,v,tsmall)
298  !
299  IF(v > thr) THEN
300  !
301  de(1:4) = matmul(tsmall(1:4,1:4), ej1(indx(1:4),ib) - ei1(indx(1:4)))
302  CALL libtetrabz_fermigr3(ne,e0,de,w2)
303  w1(1:ne,ib,indx(1:4)) = w1(1:ne,ib,indx(1:4)) &
304  & + v * matmul(w2(1:ne, 1:4 ), tsmall(1:4,1:4))
305  !
306  END IF
307  !
308  ELSE IF((e(3) <= 0d0 .AND. 0d0 < e(4)) .OR. (e(3) < 0d0 .AND. 0d0 <= e(4))) THEN
309  !
310  CALL libtetrabz_tsmall_c1(e,v,tsmall)
311  !
312  IF(v > thr) THEN
313  !
314  de(1:4) = matmul(tsmall(1:4,1:4), ej1(indx(1:4),ib) - ei1(indx(1:4)))
315  CALL libtetrabz_fermigr3(ne,e0,de,w2)
316  w1(1:ne,ib,indx(1:4)) = w1(1:ne,ib,indx(1:4)) &
317  & + v * matmul(w2(1:ne, 1:4 ), tsmall(1:4,1:4))
318  !
319  END IF
320  !
321  CALL libtetrabz_tsmall_c2(e,v,tsmall)
322  !
323  IF(v > thr) THEN
324  !
325  de(1:4) = matmul(tsmall(1:4,1:4), ej1(indx(1:4),ib) - ei1(indx(1:4)))
326  CALL libtetrabz_fermigr3(ne,e0,de,w2)
327  w1(1:ne,ib,indx(1:4)) = w1(1:ne,ib,indx(1:4)) &
328  & + v * matmul(w2(1:ne, 1:4 ), tsmall(1:4,1:4))
329  !
330  END IF
331  !
332  CALL libtetrabz_tsmall_c3(e,v,tsmall)
333  !
334  IF(v > thr) THEN
335  !
336  de(1:4) = matmul(tsmall(1:4,1:4), ej1(indx(1:4),ib) - ei1(indx(1:4)))
337  CALL libtetrabz_fermigr3(ne,e0,de,w2)
338  w1(1:ne,ib,indx(1:4)) = w1(1:ne,ib,indx(1:4)) &
339  & + v * matmul(w2(1:ne, 1:4 ), tsmall(1:4,1:4))
340  !
341  END IF
342  !
343  ELSE IF(e(4) <= 0d0) THEN
344  !
345  de(1:4) = ej1(1:4,ib) - ei1(1:4)
346  CALL libtetrabz_fermigr3(ne,e0,de,w2)
347  w1(1:ne,ib,1:4) = w1(1:ne,ib,1:4) + w2(1:ne,1:4)
348  !
349  END IF
350  !
351  END DO ! ib = 1, nb
352  !
353 END SUBROUTINE libtetrabz_fermigr2
354 !
355 !
356 !
357 SUBROUTINE libtetrabz_fermigr3(ne,e0,de,w1)
358  !
359  USE libtetrabz_common, ONLY : libtetrabz_sort, &
362  IMPLICIT NONE
363  !
364  INTEGER,INTENT(IN) :: ne
365  REAL(8),INTENT(IN) :: e0(ne), de(4)
366  REAL(8),INTENT(OUT) :: w1(ne,4)
367  !
368  INTEGER :: ie, indx(4)
369  REAL(8) :: e(4), tsmall(3,4), V, w2(3)
370  !
371  w2(1:3) = 1d0 / 3d0
372  !
373  w1(1:ne,1:4) = 0d0
374  e(1:4) = de(1:4)
375  CALL libtetrabz_sort(4,e,indx)
376  !
377  DO ie = 1, ne
378  !
379  IF(e(1) < e0(ie) .AND. e0(ie) <= e(2)) THEN
380  !
381  CALL libtetrabz_triangle_a1(e(1:4) - e0(ie),v,tsmall)
382  w1(ie,indx(1:4)) = w1(ie,indx(1:4)) + v * sum(tsmall(1:3,1:4), 1) / 3d0
383  !
384  ELSE IF(e(2) < e0(ie) .AND. e0(ie) <= e(3)) THEN
385  !
386  CALL libtetrabz_triangle_b1(e(1:4) - e0(ie),v,tsmall)
387  w1(ie,indx(1:4)) = w1(ie,indx(1:4)) + v * sum(tsmall(1:3,1:4), 1) / 3d0
388  !
389  CALL libtetrabz_triangle_b2(e(1:4) - e0(ie),v,tsmall)
390  w1(ie,indx(1:4)) = w1(ie,indx(1:4)) + v * sum(tsmall(1:3,1:4), 1) / 3d0
391  !
392  ELSE IF(e(3) < e0(ie) .AND. e0(ie) < e(4)) THEN
393  !
394  CALL libtetrabz_triangle_c1(e(1:4) - e0(ie),v,tsmall)
395  w1(ie,indx(1:4)) = w1(ie,indx(1:4)) + v * sum(tsmall(1:3,1:4), 1) / 3d0
396  !
397  END IF
398  !
399  END DO ! ie
400  !
401 END SUBROUTINE libtetrabz_fermigr3
402 !
403 END MODULE libtetrabz_fermigr_mod
libtetrabz_common::libtetrabz_triangle_b2
subroutine, public libtetrabz_triangle_b2(e, V, tsmall)
Definition: libtetrabz_common.F90:614
libtetrabz_common::libtetrabz_tsmall_b2
subroutine, public libtetrabz_tsmall_b2(e, V, tsmall)
Definition: libtetrabz_common.F90:432
libtetrabz_common::libtetrabz_tsmall_c1
subroutine, public libtetrabz_tsmall_c1(e, V, tsmall)
Definition: libtetrabz_common.F90:484
libtetrabz_common::libtetrabz_mpisum_dv
subroutine, public libtetrabz_mpisum_dv(comm, ndim, vector)
Definition: libtetrabz_common.F90:687
libtetrabz_common::libtetrabz_triangle_c1
subroutine, public libtetrabz_triangle_c1(e, V, tsmall)
Definition: libtetrabz_common.F90:640
libtetrabz_common::libtetrabz_tsmall_a1
subroutine, public libtetrabz_tsmall_a1(e, V, tsmall)
Definition: libtetrabz_common.F90:380
libtetrabz_fermigr_mod::libtetrabz_fermigr3
subroutine libtetrabz_fermigr3(ne, e0, de, w1)
Definition: libtetrabz_fermigr_mod.F90:358
libtetrabz_common::libtetrabz_tsmall_b1
subroutine, public libtetrabz_tsmall_b1(e, V, tsmall)
Definition: libtetrabz_common.F90:406
libtetrabz_common::libtetrabz_initialize
subroutine, public libtetrabz_initialize(ltetra, nge, ngw, bvec, linterpol, wlsm, nk_local, nt_local, nkBZ, ik_global, ik_local, kvec, comm)
Definition: libtetrabz_common.F90:40
libtetrabz_common::libtetrabz_interpol_indx
subroutine, public libtetrabz_interpol_indx(ng, kvec, kintp, wintp)
Definition: libtetrabz_common.F90:340
libtetrabz_common::libtetrabz_triangle_a1
subroutine, public libtetrabz_triangle_a1(e, V, tsmall)
Definition: libtetrabz_common.F90:562
libtetrabz_fermigr_mod::libtetrabz_fermigr
subroutine, public libtetrabz_fermigr(ltetra, bvec, nb, nge, eig1, eig2, ngw, wght, ne, e0, comm)
Definition: libtetrabz_fermigr_mod.F90:35
libtetrabz_common::libtetrabz_tsmall_c3
subroutine, public libtetrabz_tsmall_c3(e, V, tsmall)
Definition: libtetrabz_common.F90:536
libtetrabz_common::libtetrabz_tsmall_c2
subroutine, public libtetrabz_tsmall_c2(e, V, tsmall)
Definition: libtetrabz_common.F90:510
libtetrabz_common
Definition: libtetrabz_common.F90:23
libtetrabz_common::libtetrabz_tsmall_b3
subroutine, public libtetrabz_tsmall_b3(e, V, tsmall)
Definition: libtetrabz_common.F90:458
libtetrabz_common::libtetrabz_sort
subroutine, public libtetrabz_sort(n, key, indx)
Definition: libtetrabz_common.F90:308
libtetrabz_common::libtetrabz_triangle_b1
subroutine, public libtetrabz_triangle_b1(e, V, tsmall)
Definition: libtetrabz_common.F90:588
libtetrabz_fermigr_mod
Definition: libtetrabz_fermigr_mod.F90:23
libtetrabz_fermigr_mod::libtetrabz_fermigr_main
subroutine libtetrabz_fermigr_main(wlsm, nt_local, ik_global, ik_local, nb, nkBZ, eig1, eig2, ne, e0, nk_local, fermigr)
Definition: libtetrabz_fermigr_mod.F90:87
libtetrabz_fermigr_mod::libtetrabz_fermigr2
subroutine libtetrabz_fermigr2(nb, ne, e0, ei1, ej1, w1)
Definition: libtetrabz_fermigr_mod.F90:239