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
00034
00035 OPEN(301,file=trim(filename))
00036 rewind(301)
00037 write(301,*) nkb1,nkb2,nkb3
00038 write(301,*) ishift
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)
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
00074
00075
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085
00086
00087
00088
00089
00090
00091
00092
00093
00094
00095
00096
00097
00098
00099
00100
00101
00102
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