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 :
7 : MODULE m_wann_plot_symm
8 : use m_juDFT
9 : CONTAINS
10 0 : SUBROUTINE wann_plot_symm(jspin,mrot,ikpt,kplot,l_conjugate)
11 :
12 : implicit none
13 : integer,intent(in)::jspin,ikpt,kplot
14 : logical,intent(in)::l_conjugate
15 : integer,intent(in)::mrot(3,3)
16 : character(len=10)::vandernameold
17 : character(len=10)::vandernamenew
18 : integer::grid(3),nslibd,ikpt_copy,nbnd
19 : integer::ix,iy,iz,ixx,iyy,izz
20 : complex::xdnout
21 0 : real,allocatable::xdnreal(:,:,:,:),xdnimag(:,:,:,:)
22 : real::point(3)
23 : real::rotpoint(3)
24 : integer::opoint1,opoint2,opoint3
25 :
26 0 : call timestart("wann_plot_symm")
27 0 : WRITE (vandernameold,201) ikpt,jspin
28 0 : write (vandernamenew,201) kplot,jspin
29 : 201 FORMAT ('UNK',i5.5,'.',i1)
30 0 : open(55,file=vandernameold)
31 0 : read(55,*)grid(1),grid(2),grid(3),ikpt_copy,nslibd
32 0 : allocate(xdnreal(0:grid(1)-1,0:grid(2)-1,0:grid(3)-1,nslibd))
33 0 : allocate(xdnimag(0:grid(1)-1,0:grid(2)-1,0:grid(3)-1,nslibd))
34 0 : do nbnd=1,nslibd
35 0 : do iz=0,grid(3)-1
36 0 : do iy=0,grid(2)-1
37 0 : do ix=0,grid(1)-1
38 0 : read(55,*)xdnreal(ix,iy,iz,nbnd),xdnimag(ix,iy,iz,nbnd)
39 : enddo
40 : enddo
41 : enddo
42 : enddo
43 0 : close(55)
44 0 : open(666,file=vandernamenew,form='formatted')
45 0 : write(666,'(5i4)')grid(1),grid(2),grid(3),kplot,nslibd
46 0 : do nbnd=1,nslibd
47 0 : do iz=0,grid(3)-1
48 0 : do iy=0,grid(2)-1
49 0 : do ix=0,grid(1)-1
50 0 : point(1)=real(ix)/grid(1)
51 0 : point(2)=real(iy)/grid(2)
52 0 : point(3)=real(iz)/grid(3)
53 0 : rotpoint(:)=matmul(point(1:3),1.0*mrot(1:3,1:3))
54 0 : where(rotpoint.lt.0)
55 : rotpoint=rotpoint+1.0
56 : endwhere
57 0 : opoint1=int(grid(1)*rotpoint(1)+0.01)
58 0 : opoint2=int(grid(2)*rotpoint(2)+0.01)
59 0 : opoint3=int(grid(3)*rotpoint(3)+0.01)
60 0 : if(l_conjugate)then
61 0 : write(666,*)xdnreal(opoint1,opoint2,opoint3,nbnd),
62 0 : & -xdnimag(opoint1,opoint2,opoint3,nbnd)
63 : else
64 0 : write(666,*)xdnreal(opoint1,opoint2,opoint3,nbnd),
65 0 : & xdnimag(opoint1,opoint2,opoint3,nbnd)
66 : endif
67 : enddo
68 : enddo
69 : enddo
70 : enddo
71 0 : close(666)
72 :
73 0 : call timestop("wann_plot_symm")
74 0 : END SUBROUTINE wann_plot_symm
75 : END MODULE m_wann_plot_symm
|