mirror of https://gitlab.com/QEF/q-e.git
112 lines
3.4 KiB
Fortran
Executable File
112 lines
3.4 KiB
Fortran
Executable File
!
|
|
! Copyright (C) 2001-2016 Quantum ESPRESSO group
|
|
! This file is distributed under the terms of the
|
|
! GNU General Public License. See the file `License'
|
|
! in the root directory of the present distribution,
|
|
! or http://www.gnu.org/copyleft/gpl.txt .
|
|
!
|
|
!-----------------------------------------------------------------------
|
|
SUBROUTINE lr_read_d0psi()
|
|
!---------------------------------------------------------------------
|
|
!
|
|
! This subroutine reads in and stores vectors necessary to
|
|
! restart the Lanczos recursion.
|
|
!
|
|
! Modified by Osman Baris Malcioglu (2009)
|
|
! Modified by Iurii Timrov (2015)
|
|
!
|
|
USE klist, ONLY : nks,degauss
|
|
USE io_files, ONLY : prefix, diropn, tmp_dir, wfc_dir
|
|
USE lr_variables, ONLY : d0psi, d0psi2, n_ipol, LR_polarization, &
|
|
& lr_verbosity, nwordd0psi, iund0psi, eels
|
|
USE wvfct, ONLY : nbnd, npwx, et
|
|
USE io_global, ONLY : stdout
|
|
USE qpoint, ONLY : nksq
|
|
USE noncollin_module, ONLY : npol
|
|
!
|
|
IMPLICIT NONE
|
|
!
|
|
! local variables
|
|
!
|
|
INTEGER :: ip
|
|
CHARACTER(len=6), EXTERNAL :: int_to_char
|
|
LOGICAL :: exst
|
|
CHARACTER(len=256) :: tmp_dir_saved
|
|
!
|
|
If (lr_verbosity > 5) THEN
|
|
WRITE(stdout,'("<lr_read_d0psi>")')
|
|
endif
|
|
!
|
|
nwordd0psi = 2 * nbnd * npwx * npol * nksq
|
|
!
|
|
! This is a parallel read, done in wfc_dir
|
|
!
|
|
tmp_dir_saved = tmp_dir
|
|
!
|
|
IF ( wfc_dir /= 'undefined' ) tmp_dir = wfc_dir
|
|
!
|
|
DO ip=1,n_ipol
|
|
!
|
|
IF (n_ipol==1) THEN
|
|
!
|
|
CALL diropn ( iund0psi, 'd0psi.'//trim(int_to_char(LR_polarization)), nwordd0psi, exst)
|
|
!
|
|
IF (.not.exst .and. wfc_dir /= 'undefined') THEN
|
|
!
|
|
WRITE( stdout, '(/5x,"Attempting to read d0psi from outdir instead of wfcdir")' )
|
|
CLOSE( UNIT = iund0psi)
|
|
tmp_dir = tmp_dir_saved
|
|
!
|
|
CALL diropn ( iund0psi, 'd0psi.'//trim(int_to_char(LR_polarization)), nwordd0psi, exst)
|
|
!
|
|
IF (.not.exst) CALL errore('lr_read_d0psi', &
|
|
& trim( prefix )//'.d0psi.'//trim(int_to_char(LR_polarization))//' not found',1)
|
|
!
|
|
ENDIF
|
|
!
|
|
ENDIF
|
|
!
|
|
IF (n_ipol==3 .and. .not.eels) THEN
|
|
!
|
|
CALL diropn ( iund0psi, 'd0psi.'//trim(int_to_char(ip)), nwordd0psi, exst)
|
|
!
|
|
IF (.not.exst .and. wfc_dir /= 'undefined') THEN
|
|
!
|
|
WRITE( stdout, '(/5x,"Attempting to read d0psi from outdir instead of wfcdir")' )
|
|
CLOSE( UNIT = iund0psi)
|
|
tmp_dir = tmp_dir_saved
|
|
!
|
|
CALL diropn ( iund0psi, 'd0psi.'//trim(int_to_char(LR_polarization)), nwordd0psi, exst)
|
|
!
|
|
IF (.not.exst) CALL errore('lr_read_d0psi', &
|
|
& trim( prefix )//'.d0psi.'//trim(int_to_char(ip))//' not found',1)
|
|
!
|
|
ENDIF
|
|
!
|
|
ENDIF
|
|
!
|
|
CALL davcio(d0psi(1,1,1,ip),nwordd0psi,iund0psi,1,-1)
|
|
!
|
|
CLOSE( UNIT = iund0psi)
|
|
!
|
|
ENDDO
|
|
!
|
|
! EELS: Reading of d0psi2 (n_ipol=1)
|
|
!
|
|
IF (eels) THEN
|
|
!
|
|
CALL diropn ( iund0psi, 'd0psi2.'//trim(int_to_char(LR_polarization)), nwordd0psi, exst)
|
|
CALL davcio(d0psi2(1,1,1,1),nwordd0psi,iund0psi,1,-1)
|
|
CLOSE( UNIT = iund0psi)
|
|
!
|
|
ENDIF
|
|
!
|
|
! End of file i/o
|
|
!
|
|
tmp_dir = tmp_dir_saved
|
|
!
|
|
RETURN
|
|
!
|
|
END SUBROUTINE lr_read_d0psi
|
|
!-----------------------------------------------------------------------
|