quantum-espresso/GWW/bse/write_wannier_matrix.f90

66 lines
1.5 KiB
Fortran

subroutine read_wannier_matrix
!this read the inverse transfromation matrix from KS eigenstates
!to ML wanniers on file, to be read by GWW code
!the INVERSE matrix is calculated here
USE kinds, ONLY : DP
! USE wannier_gw, ONLY : u_trans, num_nbndv
USE wvfct, ONLY : et,nbnd
USE io_global, ONLY : stdout,ionode,ionode_id
! USE io_files, ONLY : find_free_unit, prefix
USE io_files, ONLY : prefix, tmp_dir
USE mp, ONLY : mp_bcast
USE mp_world, ONLY : world_comm
USE lsda_mod, ONLY :nspin
USE bse_basic_structures, ONLY : u_trans
use bse_wannier, ONLY:num_nbndv
implicit none
INTEGER, EXTERNAL :: find_free_unit
INTEGER :: iunu, iw, is
INTEGER :: idumm
REAL(kind=DP), ALLOCATABLE :: rdummv(:)
call start_clock('read_wannier_matrix')
allocate(rdummv(nbnd))
if(ionode) then
iunu = find_free_unit()
open(unit=iunu,file=trim(tmp_dir)//trim(prefix)//'.wannier',status='old',form='unformatted')
read(iunu) idumm
read(iunu) idumm
endif
do is=1,nspin
if(ionode) then
read(iunu) idumm
read(iunu) rdummv(1:nbnd)
read(iunu) rdummv(1:nbnd)
read(iunu) rdummv(1:nbnd)
endif
do iw=1,nbnd
if(ionode) read(iunu) u_trans(1:nbnd,iw,is)
call mp_bcast(u_trans(1:nbnd,iw,is),ionode_id, world_comm)
enddo
!DEBUG
! u_trans=0.d0
! do iw=1,nbnd
! u_trans(iw,iw,is)=1.d0
! enddo
enddo
if(ionode) close(iunu)
deallocate(rdummv)
call stop_clock('read_wannier_matrix')
return
end subroutine read_wannier_matrix