Line data Source code
1 : module m_wann_get_qpts
2 : USE m_juDFT
3 : contains
4 0 : subroutine wann_get_qpts(
5 : > l_bzsym,film,l_readqpts,
6 0 : < nqpts,qpoints,param_file)
7 : c********************************************************
8 : c Read in the q-points from qpts file.
9 : c
10 : c
11 : c********************************************************
12 :
13 : USE m_constants
14 :
15 : implicit none
16 :
17 : logical,intent(in) :: l_bzsym,film
18 : logical,intent(in) :: l_readqpts
19 : integer,intent(out) :: nqpts
20 : real,intent(inout) :: qpoints(:,:)
21 : character(len=20),intent(in) :: param_file
22 :
23 : real :: scale
24 : !integer :: at,j
25 : integer :: iter!,len,num_wann,num_bands,nn,i
26 : logical :: l_file
27 :
28 0 : call timestart("wann_get_qpts")
29 :
30 0 : if(l_bzsym)then
31 0 : inquire(file='w90qpts',exist=l_file)
32 0 : IF(.NOT.l_file) CALL juDFT_error("where is w90qpts?",calledby
33 0 : + ="wann_get_qpts")
34 0 : open(987,file='w90qpts',status='old',form='formatted')
35 0 : read(987,*)nqpts, scale
36 0 : write(oUnit,*)"wann_get_qpts: nqpts=",nqpts
37 0 : if(l_readqpts)then
38 0 : IF(SIZE(qpoints,1)/=3) CALL juDFT_error("wann_get_qpts: 1"
39 0 : + ,calledby ="wann_get_qpts")
40 0 : IF(SIZE(qpoints,2)/=nqpts)
41 : + CALL juDFT_error("wann_get_qpts: 2",
42 0 : + calledby ="wann_get_qpts")
43 0 : do iter=1,nqpts
44 0 : read(987,*)qpoints(:,iter)
45 : enddo
46 : endif
47 : else
48 0 : inquire(file=param_file,exist=l_file)
49 0 : IF(.NOT.l_file) CALL juDFT_error(
50 : > "where is "//trim(param_file)//"?",calledby
51 0 : + ="wann_get_qpts")
52 0 : open(987,file=param_file,status='old',form='formatted')
53 0 : read(987,*)nqpts,scale
54 0 : write(oUnit,*)"wann_get_qpts: nqpts=",nqpts
55 0 : if(l_readqpts)then
56 0 : IF(SIZE(qpoints,1)/=3) CALL juDFT_error("wann_get_qpts: 1"
57 0 : + ,calledby ="wann_get_qpts")
58 0 : IF(SIZE(qpoints,2)/=nqpts)
59 : + CALL juDFT_error("wann_get_qpts: 2",
60 0 : + calledby ="wann_get_qpts")
61 0 : do iter=1,nqpts
62 0 : read(987,*)qpoints(:,iter)
63 : enddo
64 : endif
65 : endif
66 :
67 0 : close(987)
68 :
69 0 : if(l_readqpts)then
70 0 : qpoints=qpoints/scale !* 2.0 !2xBZ
71 0 : if(film)then
72 0 : qpoints(3,:)=0.0
73 : endif
74 0 : do iter=1,nqpts
75 0 : write(oUnit,*)qpoints(:,iter)
76 : enddo
77 : endif
78 :
79 0 : call timestop("wann_get_qpts")
80 0 : end subroutine wann_get_qpts
81 : end module m_wann_get_qpts
|