m_frmsf_wan.F90

Go to the documentation of this file.
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   !INTEGER(8) :: ik, i1, i2, i3, ib, jb, fo = 21, nk, i1min, i2min, i3min
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   !$OMP PARALLEL DEFAULT(NONE) &
00042   !$OMP & SHARED(nk,n_occ,Na1,Na2,Na3,nkb1,nkb2,nkb3,a1,a2,a3,tpi,ci, &
00043   !$OMP &        WEIGHT_R,H_MAT_R,kvec,Ek,proj) &
00044   !$OMP & PRIVATE(ik,ib,jb,i1,i2,i3,i1min,i2min,i3min,phase,Hk,phase_factor)
00045   !
00046   Ek(1:n_occ,        1:nk) = 0.0d0
00047   !
00048   !$OMP DO
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!-1
00054               DO i2 = -Na2, Na2!-1
00055                  DO i3 = -Na3, Na3!-1
00056                     !--
00057                     !-- NEAREST R SEARCH
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!i3
00066               END DO!i2
00067            END DO!i1
00068         END DO!jb
00069      END DO!ib
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 !ik
00076   !$OMP END DO
00077   !$OMP END PARALLEL
00078   !
00079   ! Write to file
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

Generated on 17 Nov 2020 for respack by  doxygen 1.6.1