00001 MODULE m_frmsf_wan
00002
00003 IMPLICIT NONE
00004
00005 CONTAINS
00006
00007 SUBROUTINE wrt_frmsf_wan(Na1,Na2,Na3,nkb1,nkb2,nkb3,a1,a2,a3,b1,b2,b3,FermiEnergy,WEIGHT_R,H_MAT_R)
00008
00009 USE m_rdinput, ONLY : n_occ, dense
00010
00011 IMPLICIT NONE
00012
00013 INTEGER,INTENT(IN) :: Na1, Na2, Na3, nkb1, nkb2, nkb3
00014 REAL(8),INTENT(IN) :: a1(3), a2(3), a3(3), b1(3), b2(3), b3(3), FermiEnergy,
00015 WEIGHT_R(-Na1:Na1,-Na2:Na2,-Na3:Na3)
00016 COMPLEX(8),INTENT(IN) :: H_MAT_R(n_occ,n_occ,-Na1:Na1,-Na2:Na2,-Na3:Na3)
00017
00018
00019 INTEGER :: ik, i1, i2, i3, ib, jb, fo = 21, nk, i1min, i2min, i3min
00020 REAL(8) :: kvec(3,PRODUCT(dense(1:3))), phase, tpi=2.0d0*acos(-1.0d0),
00021 Ek(n_occ,PRODUCT(dense(1:3))), proj(n_occ,n_occ,PRODUCT(dense(1:3)))
00022 COMPLEX(8) :: Hk(n_occ,n_occ), phase_factor, ci=CMPLX(0.0d0,1.0d0)
00023 CHARACTER(256) :: fname
00024
00025 WRITE(*,*) "Wannnier-interpolated Fermi surface"
00026
00027 WRITE(*,*) " Dense grid : ", dense(1:3)
00028
00029 nk = PRODUCT(dense(1:3))
00030
00031 ik = 0
00032 DO i1 = 1, dense(1)
00033 DO i2 = 1, dense(2)
00034 DO i3 = 1, dense(3)
00035 ik = ik + 1
00036 kvec(1:3,ik) = DBLE((/i1, i2, i3/) - 1) / DBLE(dense(1:3))
00037 END DO
00038 END DO
00039 END DO
00040
00041
00042
00043
00044
00045
00046 Ek(1:n_occ, 1:nk) = 0.0d0
00047
00048
00049 DO ik = 1, nk
00050 Hk(1:n_occ,1:n_occ) = 0.0d0
00051 DO ib = 1, n_occ
00052 DO jb = 1, n_occ
00053 DO i1 = -Na1, Na1
00054 DO i2 = -Na2, Na2
00055 DO i3 = -Na3, Na3
00056
00057
00058 CALL search_Rmin(i1,i2,i3,nkb1,nkb2,nkb3, &
00059 & a1,a2,a3,i1min,i2min,i3min)
00060 phase = tpi * DOT_PRODUCT(kvec(1:3,ik), DBLE((/i1min, i2min, i3min/)))
00061
00062 phase_factor = EXP(ci * phase) * WEIGHT_R(i1,i2,i3)
00063 Hk(jb,ib) = Hk(jb,ib) &
00064 & + H_MAT_R(jb,ib,i1,i2,i3) * phase_factor
00065 END DO
00066 END DO
00067 END DO
00068 END DO
00069 END DO
00070
00071 CALL diagV(n_occ,Hk(1:n_occ,1:n_occ),Ek(1:n_occ,ik))
00072
00073 proj(1:n_occ,1:n_occ,ik) = DBLE(CONJG(Hk(1:n_occ,1:n_occ)) * Hk(1:n_occ,1:n_occ))
00074
00075 END DO
00076
00077
00078
00079
00080
00081 DO ib = 1, n_occ
00082
00083 WRITE(fname,'(a,i0,a)') "./dir-wan/orb", ib, ".frmsf"
00084 OPEN(fo,FILE=TRIM(fname))
00085 WRITE(fo,*) dense(1:3)
00086 WRITE(fo,*) 1
00087 WRITE(fo,*) n_occ
00088 WRITE(fo,*) REAL(b1(1:3))
00089 WRITE(fo,*) REAL(b2(1:3))
00090 WRITE(fo,*) REAL(b3(1:3))
00091 DO jb = 1, n_occ
00092 DO ik = 1, nk
00093 WRITE(fo,*) REAL(Ek(jb,ik) - FermiEnergy)
00094 END DO
00095 END DO
00096 DO jb = 1, n_occ
00097 DO ik = 1, nk
00098 WRITE(fo,*) REAL(proj(ib,jb,ik))
00099 END DO
00100 END DO
00101 CLOSE(fo)
00102
00103 WRITE(*,*) TRIM(fname), " for orbital ", ib
00104
00105 END DO
00106
00107 END SUBROUTINE wrt_frmsf_wan
00108
00109 END MODULE m_frmsf_wan