m_wrt_frmsf.f90

Go to the documentation of this file.
00001 module m_wrt_frmsf 
00002   implicit none
00003 contains
00004   !
00005   subroutine wrt_frmsf(NTB,NTK,nkb1,nkb2,nkb3,E_EIG,SK0,FermiEnergy,filename,b1,b2,b3)                     
00006     implicit none 
00007     integer,intent(in)::NTB,NTK,nkb1,nkb2,nkb3 
00008     real(8),intent(in)::E_EIG(NTB,NTK)           
00009     real(8),intent(in)::SK0(3,NTK)           
00010     real(8),intent(in)::FermiEnergy,b1(3),b2(3),b3(3)
00011     character(99),intent(in)::filename 
00012     integer::index_kpt(nkb1,nkb2,nkb3) 
00013     integer::ib,ik,ikb1,ikb2,ikb3
00014     real(8)::E_3D(nkb3,nkb2,nkb1,NTB) 
00015     integer::ishift  
00016     !
00017     index_kpt=0     
00018     E_3D=0.0d0 
00019     call make_index_kpt(NTK,nkb1,nkb2,nkb3,SK0(1,1),index_kpt(1,1,1)) 
00020     do ib=1,NTB 
00021      do ikb1=1,nkb1
00022       do ikb2=1,nkb2
00023        do ikb3=1,nkb3 
00024         ik=index_kpt(ikb1,ikb2,ikb3)
00025         E_3D(ikb3,ikb2,ikb1,ib)=E_EIG(ib,ik)-FermiEnergy 
00026        enddo 
00027       enddo 
00028      enddo 
00029     enddo 
00030     ! 
00031     ishift=0 
00032     !
00033     !OPEN(301,W,file='./dir-wan/dat.frmsf')
00034     !
00035     OPEN(301,file=trim(filename)) 
00036     rewind(301) 
00037     write(301,*) nkb1,nkb2,nkb3
00038     write(301,*) ishift!not grid shift
00039     write(301,*) NTB 
00040     write(301,*) real(b1(1:3))
00041     write(301,*) real(b2(1:3))
00042     write(301,*) real(b3(1:3))
00043     do ib=1,NTB 
00044      do ikb1=1,nkb1
00045       do ikb2=1,nkb2
00046        do ikb3=1,nkb3
00047         write(301,*) real(E_3D(ikb3,ikb2,ikb1,ib))
00048        end do
00049       end do
00050      end do
00051     end do
00052     do ib=1,NTB
00053      do ikb1=1,nkb1
00054       do ikb2=1,nkb2
00055        do ikb3=1,nkb3
00056         write(301,*) real(ib)!real(phys(ikb3,ikb2,ikb1,ib))
00057        end do
00058       end do
00059      end do
00060     end do
00061     close(301)
00062     return
00063   end subroutine wrt_frmsf 
00064   !
00065   SUBROUTINE make_index_kpt(NTK,nkb1,nkb2,nkb3,SK0,index_kpt)      
00066     implicit none 
00067     integer::NTK,nkb1,nkb2,nkb3
00068     real(8)::SK0(3,NTK)  
00069     integer::ik,ix,iy,iz
00070     real(8)::x,y,z
00071     integer::index_kpt(nkb1,nkb2,nkb3)    
00072     ! 
00073     !if(MOD(NTK,2)/=0) then 
00074     ! do ik=1,NTK 
00075     !  x=SK0(1,ik)*dble(nkb1) 
00076     !  y=SK0(2,ik)*dble(nkb2)
00077     !  z=SK0(3,ik)*dble(nkb3)  
00078     !  x=x+(dble(nkb1)-1.0d0)/2.0d0 
00079     !  y=y+(dble(nkb2)-1.0d0)/2.0d0
00080     !  z=z+(dble(nkb3)-1.0d0)/2.0d0 
00081     !  ix=idnint(x)+1
00082     !  iy=idnint(y)+1
00083     !  iz=idnint(z)+1
00084     !  index_kpt(ix,iy,iz)=ik
00085     ! enddo 
00086     !else!20170316 
00087     ! do ik=1,NTK 
00088     !  x=SK0(1,ik)*dble(nkb1) 
00089     !  y=SK0(2,ik)*dble(nkb2)
00090     !  z=SK0(3,ik)*dble(nkb3)  
00091     !  x=x+dble(nkb1)/2.0d0 
00092     !  y=y+dble(nkb2)/2.0d0
00093     !  z=z+dble(nkb3)/2.0d0 
00094     !  ix=idnint(x)
00095     !  iy=idnint(y)
00096     !  iz=idnint(z)
00097     !  index_kpt(ix,iy,iz)=ik
00098     ! enddo 
00099     !endif 
00100     !--
00101     !
00102     !20190520 Kazuma Nakamura
00103     !
00104     do ik=1,NTK 
00105      x=SK0(1,ik)*dble(nkb1) 
00106      y=SK0(2,ik)*dble(nkb2)
00107      z=SK0(3,ik)*dble(nkb3)  
00108      x=x+(dble(nkb1)-dble(mod(nkb1,2)))/2.0d0 
00109      y=y+(dble(nkb2)-dble(mod(nkb2,2)))/2.0d0 
00110      z=z+(dble(nkb3)-dble(mod(nkb3,2)))/2.0d0 
00111      ix=idnint(x)+mod(nkb1,2)
00112      iy=idnint(y)+mod(nkb2,2)
00113      iz=idnint(z)+mod(nkb3,2)
00114      index_kpt(ix,iy,iz)=ik
00115     enddo 
00116     ! 
00117     RETURN  
00118   end subroutine make_index_kpt 
00119   !
00120 end module m_wrt_frmsf 

Generated on 17 Nov 2020 for respack by  doxygen 1.6.1