Merge branch 'no_wfc_rewrite' into 'develop'

projwfc with reduced I/O

See merge request QEF/q-e!640
This commit is contained in:
giannozz 2019-11-02 13:33:42 +00:00
commit 4546356c87
23 changed files with 261 additions and 427 deletions

View File

@ -24,9 +24,10 @@ SUBROUTINE add_shift_us( shift_nl )
USE wvfct, ONLY : nbnd, wg, et
USE lsda_mod, ONLY : lsda, isk
USE symme, ONLY : symscalar
USE wavefunctions, ONLY : evc
USE io_files, ONLY : iunwfc, nwordwfc
USE wavefunctions, ONLY : evc
USE io_files, ONLY : restart_dir
USE becmod, ONLY : calbec
USE pw_restart_new, ONLY : read_collected_wfc
!
IMPLICIT NONE
!
@ -79,10 +80,8 @@ SUBROUTINE add_shift_us( shift_nl )
!
is = isk(ik)
npw = ngk(ik)
IF ( nks > 1 ) THEN
CALL davcio( evc, 2*nwordwfc, iunwfc, ik, -1 )
IF ( nkb > 0 ) CALL init_us_2( npw, igk_k(1,ik), xk(1,ik), vkb )
ENDIF
CALL read_collected_wfc ( restart_dir(), ik, evc )
IF ( nkb > 0 ) CALL init_us_2( npw, igk_k(1,ik), xk(1,ik), vkb )
!
CALL calbec ( npw, vkb, evc, rbecp )
!
@ -169,10 +168,8 @@ SUBROUTINE add_shift_us( shift_nl )
!
is = isk(ik)
npw = ngk(ik)
IF ( nks > 1 ) THEN
CALL davcio( evc, 2*nwordwfc, iunwfc, ik, -1 )
IF ( nkb > 0 ) CALL init_us_2( npw, igk_k(1,ik), xk(1,ik), vkb )
ENDIF
CALL read_collected_wfc( restart_dir(), ik, evc )
IF ( nkb > 0 ) CALL init_us_2( npw, igk_k(1,ik), xk(1,ik), vkb )
!
CALL calbec( npw, vkb, evc, becp )
!

View File

@ -30,7 +30,7 @@ SUBROUTINE do_elf (elf)
USE fft_interfaces, ONLY : fwfft, invfft, fft_interpolate
USE gvect, ONLY: gcutm, g, ngm
USE gvecs, ONLY : ngms, doublegrid, dual
USE io_files, ONLY: iunwfc, nwordwfc
USE io_files, ONLY: restart_dir
USE klist, ONLY: nks, xk, ngk, igk_k
USE lsda_mod, ONLY: nspin
USE scf, ONLY: rho
@ -40,6 +40,7 @@ SUBROUTINE do_elf (elf)
USE wavefunctions, ONLY: evc
USE mp_pools, ONLY: inter_pool_comm, intra_pool_comm
USE mp, ONLY: mp_sum
USE pw_restart_new, ONLY : read_collected_wfc
!
! I/O variables
!
@ -66,7 +67,7 @@ SUBROUTINE do_elf (elf)
!
! reads the eigenfunctions
!
CALL davcio (evc, 2*nwordwfc, iunwfc, ik, - 1)
CALL read_collected_wfc ( restart_dir(), ik, evc )
!
DO ibnd = 1, nbnd
DO j = 1, 3

View File

@ -168,7 +168,7 @@ PROGRAM epsilon
INTEGER :: nw,nbndmin,nbndmax
REAL(DP) :: intersmear,intrasmear,wmax,wmin,shift
CHARACTER(10) :: calculation,smeartype
LOGICAL :: metalcalc
LOGICAL :: metalcalc, wfc_is_collected
!
NAMELIST / inputpp / prefix, outdir, calculation
NAMELIST / energy_grid / smeartype, intersmear, intrasmear, nw, wmax, wmin, &
@ -255,9 +255,7 @@ PROGRAM epsilon
!
IF (ionode) WRITE( stdout, "( 5x, 'Reading PW restart file...' ) " )
CALL read_file
CALL openfil_pp
CALL read_file_new( wfc_is_collected )
!
! few conversions
!
@ -1064,10 +1062,11 @@ SUBROUTINE dipole_calc( ik, dipole_aux, metalcalc, nbndmin, nbndmax )
!
USE kinds, ONLY : DP
USE wvfct, ONLY : nbnd, npwx
USE wavefunctions, ONLY : evc
USE wavefunctions, ONLY : evc
USE klist, ONLY : xk, ngk, igk_k
USE gvect, ONLY : ngm, g
USE io_files, ONLY : nwordwfc, iunwfc
USE io_files, ONLY : restart_dir
USE pw_restart_new, ONLY : read_collected_wfc
USE grid_module, ONLY : focc, full_occ
USE mp_bands, ONLY : intra_bgrp_comm
USE mp, ONLY : mp_sum
@ -1091,7 +1090,7 @@ SUBROUTINE dipole_calc( ik, dipole_aux, metalcalc, nbndmin, nbndmax )
!
! read wfc for the given kpt
!
CALL davcio (evc, 2*nwordwfc, iunwfc, ik, - 1)
CALL read_collected_wfc ( restart_dir(), ik, evc )
!
! compute matrix elements
!

View File

@ -34,13 +34,12 @@ PROGRAM initial_state
!
CHARACTER(len=256) :: outdir
INTEGER :: ios, ik, excite(ntypx)
LOGICAL :: dummy
NAMELIST / inputpp / outdir, prefix, excite
!
! initialise environment
!
#if defined(__MPI)
CALL mp_startup ( )
#endif
CALL environment_start ( 'initstate' )
!
! set default values for variables in namelist
@ -75,14 +74,8 @@ PROGRAM initial_state
!
! Now allocate space for pwscf variables, read and check them.
!
CALL read_file
CALL openfil_pp
IF ( nks == 1 ) THEN
ik = 1
CALL davcio( evc, 2*nwordwfc, iunwfc, ik, -1 )
IF ( nkb > 0 ) CALL init_us_2( ngk(ik), igk_k(1,ik), xk(1,ik), vkb )
ENDIF
CALL read_file_new( dummy )
!
CALL do_initial_state (excite)
!
CALL environment_end ( 'initstate' )

View File

@ -43,7 +43,8 @@ SUBROUTINE local_dos (iflag, lsign, kpoint, kband, spin_component, &
USE control_flags, ONLY : gamma_only
USE noncollin_module, ONLY : noncolin, npol
USE spin_orb, ONLY : lspinorb, fcoef
USE io_files, ONLY : iunwfc, nwordwfc
USE io_files, ONLY : restart_dir
USE pw_restart_new, ONLY : read_collected_wfc
USE mp_pools, ONLY : me_pool, nproc_pool, my_pool_id, npool, &
inter_pool_comm, intra_pool_comm
USE mp, ONLY : mp_bcast, mp_sum
@ -150,7 +151,7 @@ SUBROUTINE local_dos (iflag, lsign, kpoint, kband, spin_component, &
DO ik = 1, nks
IF ( iflag /= 0 .or. ik == kpoint_pool) THEN
IF (lsda) current_spin = isk (ik)
CALL davcio (evc, 2*nwordwfc, iunwfc, ik, - 1)
CALL read_collected_wfc ( restart_dir(), ik, evc )
npw = ngk(ik)
CALL init_us_2 (npw, igk_k(1,ik), xk (1, ik), vkb)

View File

@ -23,7 +23,7 @@ SUBROUTINE local_dos_mag(spin_component, kpoint, kband, raux)
USE gvecs, ONLY : doublegrid
USE klist, ONLY : nks, xk, ngk, igk_k, nkstot
USE scf, ONLY : rho
USE io_files, ONLY : iunwfc, nwordwfc
USE io_files, ONLY : restart_dir
USE uspp, ONLY : nkb, vkb, becsum, nhtol, nhtoj, indv, okvan
USE uspp_param, ONLY : upf, nh, nhm
USE wavefunctions, ONLY : evc, psic_nc
@ -33,6 +33,7 @@ SUBROUTINE local_dos_mag(spin_component, kpoint, kband, raux)
USE becmod, ONLY : calbec
USE mp_pools, ONLY : my_pool_id, npool, inter_pool_comm
USE mp, ONLY : mp_sum
USE pw_restart_new, ONLY : read_collected_wfc
!
IMPLICIT NONE
!
@ -79,7 +80,7 @@ SUBROUTINE local_dos_mag(spin_component, kpoint, kband, raux)
IF ( ik > 0 ) THEN
!
npw = ngk(ik)
CALL davcio (evc, 2*nwordwfc, iunwfc, ik, - 1)
CALL read_collected_wfc ( restart_dir(), ik, evc )
IF (nkb > 0) CALL init_us_2 (npw, igk_k(1,ik), xk (1, ik), vkb)
CALL calbec ( npw, vkb, evc, becp_nc)
!

View File

@ -29,6 +29,7 @@ add_shift_us.o : ../../Modules/mp_pools.o
add_shift_us.o : ../../Modules/recvec.o
add_shift_us.o : ../../Modules/uspp.o
add_shift_us.o : ../../Modules/wavefunctions.o
add_shift_us.o : ../../PW/src/pw_restart_new.o
add_shift_us.o : ../../PW/src/pwcom.o
add_shift_us.o : ../../PW/src/symme.o
add_shift_us.o : ../../UtilXlib/mp.o
@ -201,6 +202,7 @@ elf.o : ../../Modules/kind.o
elf.o : ../../Modules/mp_pools.o
elf.o : ../../Modules/recvec.o
elf.o : ../../Modules/wavefunctions.o
elf.o : ../../PW/src/pw_restart_new.o
elf.o : ../../PW/src/pwcom.o
elf.o : ../../PW/src/scf_mod.o
elf.o : ../../PW/src/symme.o
@ -218,6 +220,7 @@ epsilon.o : ../../Modules/mp_pools.o
epsilon.o : ../../Modules/recvec.o
epsilon.o : ../../Modules/uspp.o
epsilon.o : ../../Modules/wavefunctions.o
epsilon.o : ../../PW/src/pw_restart_new.o
epsilon.o : ../../PW/src/pwcom.o
epsilon.o : ../../UtilXlib/mp.o
fermi_proj.o : ../../Modules/environment.o
@ -292,6 +295,7 @@ local_dos.o : ../../Modules/noncol.o
local_dos.o : ../../Modules/recvec.o
local_dos.o : ../../Modules/uspp.o
local_dos.o : ../../Modules/wavefunctions.o
local_dos.o : ../../PW/src/pw_restart_new.o
local_dos.o : ../../PW/src/pwcom.o
local_dos.o : ../../PW/src/scf_mod.o
local_dos.o : ../../PW/src/symme.o
@ -319,6 +323,7 @@ local_dos_mag.o : ../../Modules/noncol.o
local_dos_mag.o : ../../Modules/recvec.o
local_dos_mag.o : ../../Modules/uspp.o
local_dos_mag.o : ../../Modules/wavefunctions.o
local_dos_mag.o : ../../PW/src/pw_restart_new.o
local_dos_mag.o : ../../PW/src/pwcom.o
local_dos_mag.o : ../../PW/src/scf_mod.o
local_dos_mag.o : ../../UtilXlib/mp.o
@ -422,6 +427,7 @@ plan_avg.o : ../../Modules/recvec.o
plan_avg.o : ../../Modules/run_info.o
plan_avg.o : ../../Modules/uspp.o
plan_avg.o : ../../Modules/wavefunctions.o
plan_avg.o : ../../PW/src/pw_restart_new.o
plan_avg.o : ../../PW/src/pwcom.o
plan_avg.o : ../../UtilXlib/mp.o
plotband.o : ../../Modules/kind.o
@ -443,6 +449,7 @@ poormanwannier.o : ../../Modules/uspp.o
poormanwannier.o : ../../Modules/wavefunctions.o
poormanwannier.o : ../../PW/src/atomic_wfc_mod.o
poormanwannier.o : ../../PW/src/ldaU.o
poormanwannier.o : ../../PW/src/pw_restart_new.o
poormanwannier.o : ../../PW/src/pwcom.o
poormanwannier.o : ../../PW/src/symm_base.o
poormanwannier.o : ../../UtilXlib/mp.o
@ -523,6 +530,7 @@ projwfc.o : ../../Modules/run_info.o
projwfc.o : ../../Modules/uspp.o
projwfc.o : ../../Modules/wavefunctions.o
projwfc.o : ../../PW/src/atomic_wfc_mod.o
projwfc.o : ../../PW/src/pw_restart_new.o
projwfc.o : ../../PW/src/pwcom.o
projwfc.o : ../../PW/src/start_k.o
projwfc.o : ../../PW/src/symm_base.o
@ -549,6 +557,7 @@ projwfc_box.o : ../../Modules/run_info.o
projwfc_box.o : ../../Modules/uspp.o
projwfc_box.o : ../../Modules/wavefunctions.o
projwfc_box.o : ../../PW/src/atomic_wfc_mod.o
projwfc_box.o : ../../PW/src/pw_restart_new.o
projwfc_box.o : ../../PW/src/pwcom.o
projwfc_box.o : ../../PW/src/scf_mod.o
projwfc_box.o : ../../UtilXlib/mp.o
@ -701,6 +710,7 @@ stm.o : ../../Modules/kind.o
stm.o : ../../Modules/mp_pools.o
stm.o : ../../Modules/recvec.o
stm.o : ../../Modules/wavefunctions.o
stm.o : ../../PW/src/pw_restart_new.o
stm.o : ../../PW/src/pwcom.o
stm.o : ../../PW/src/scf_mod.o
stm.o : ../../PW/src/symme.o
@ -842,6 +852,7 @@ wfck2r.o : ../../Modules/mp_pools.o
wfck2r.o : ../../Modules/noncol.o
wfck2r.o : ../../Modules/recvec.o
wfck2r.o : ../../Modules/wavefunctions.o
wfck2r.o : ../../PW/src/pw_restart_new.o
wfck2r.o : ../../PW/src/pwcom.o
wfck2r.o : ../../UtilXlib/mp.o
work_function.o : ../../FFTXlib/scatter_mod.o

View File

@ -37,7 +37,7 @@ PROGRAM plan_avg
INTEGER :: ninter
CHARACTER(len=256) :: filplot, outdir
REAL(DP), ALLOCATABLE :: averag (:,:,:), plan (:,:,:)
!
LOGICAL :: wfc_is_collected
INTEGER :: iunplot = 4, ios, ibnd, ik, ir, nt, na, i
!
NAMELIST / inputpp / outdir, prefix, filplot
@ -81,13 +81,13 @@ PROGRAM plan_avg
!
! Now allocate space for pwscf variables, read and check them.
!
CALL read_file ( )
CALL read_file_new ( wfc_is_collected )
IF ( .NOT. wfc_is_collected ) CALL errore ('plan_avg', &
' wavefunctiosn not available?!?',1)
!
IF (gamma_only) CALL errore ('plan_avg', &
' planar average with gamma tricks not yet implemented',2)
!
CALL openfil_pp ( )
!
ALLOCATE (averag( nat, nbnd, nkstot))
ALLOCATE (plan(dfftp%nr3, nbnd, nkstot))
!
@ -163,9 +163,10 @@ SUBROUTINE do_plan_avg (averag, plan, ninter)
USE wvfct, ONLY: npwx, nbnd, wg
USE wavefunctions, ONLY: evc
USE noncollin_module, ONLY : noncolin, npol
USE io_files, ONLY: iunwfc, nwordwfc
USE io_files, ONLY: restart_dir
USE becmod, ONLY: bec_type, becp, calbec, allocate_bec_type, deallocate_bec_type
USE pw_restart_new, ONLY: read_collected_wfc
!
IMPLICIT NONE
INTEGER :: ninter
! output: the number of planes
@ -256,7 +257,7 @@ SUBROUTINE do_plan_avg (averag, plan, ninter)
DO ik = 1, nks
IF (lsda) current_spin = isk (ik)
npw = ngk(ik)
CALL davcio (evc, 2*nwordwfc, iunwfc, ik, - 1)
CALL read_collected_wfc ( restart_dir(), ik, evc )
CALL init_us_2 (npw, igk_k(1,ik), xk (1, ik), vkb)
CALL calbec ( npw, vkb, evc, becp)

View File

@ -37,16 +37,14 @@ PROGRAM pmw
INTEGER :: ios
INTEGER :: first_band, last_band
REAL(DP) :: min_energy, max_energy, sigma
LOGICAL :: writepp
LOGICAL :: writepp, wfc_is_collected
NAMELIST / inputpp / outdir, prefix, first_band, last_band, writepp, &
min_energy, max_energy, sigma
!
! initialise environment
!
#if defined(__MPI)
CALL mp_startup ( )
#endif
CALL environment_start ( 'PMW' )
IF ( ionode ) CALL input_from_file ( )
!
@ -88,7 +86,7 @@ PROGRAM pmw
!
! Now allocate space for pwscf variables, read and check them.
!
CALL read_file ( )
CALL read_file_new ( wfc_is_collected )
!
! Check on correctness and consistency of the input
!
@ -105,8 +103,6 @@ PROGRAM pmw
! Currently, WF projectors are built for Hubbard species only
IF ( .NOT.lda_plus_U ) CALL errore('pmw','Hubbard U calculation required', 1)
!
CALL openfil_pp ( )
!
CALL projection( first_band, last_band, min_energy, max_energy, sigma, writepp)
!
CALL environment_end ( 'PMW' )
@ -135,9 +131,10 @@ SUBROUTINE projection (first_band, last_band, min_energy, max_energy, sigma, iop
USE control_flags, ONLY: gamma_only
USE uspp, ONLY: nkb, vkb
USE becmod, ONLY: bec_type, becp, calbec, allocate_bec_type, deallocate_bec_type
USE io_files, ONLY: nd_nmbr, prefix, tmp_dir, nwordwfc, iunwfc, &
USE io_files, ONLY: prefix, restart_dir, &
iunhub, nwordwfcU, nwordatwfc, diropn
USE wavefunctions, ONLY: evc
USE pw_restart_new,ONLY: read_collected_wfc
IMPLICIT NONE
!
@ -247,7 +244,7 @@ SUBROUTINE projection (first_band, last_band, min_energy, max_energy, sigma, iop
!
npw = ngk(ik)
CALL davcio (evc, 2*nwordwfc, iunwfc, ik, - 1)
CALL read_collected_wfc ( restart_dir(), ik, evc )
CALL atomic_wfc (ik, wfcatom)

View File

@ -145,8 +145,8 @@ SUBROUTINE extract (plot_files,plot_num)
needwf=(plot_num==3).or.(plot_num==4).or.(plot_num==5).or.(plot_num==7).or. &
(plot_num==8).or.(plot_num==10)
IF ( needwf ) THEN
CALL read_file ( )
CALL openfil_pp ( )
CALL read_file_new ( dummy )
IF (.not.dummy) CALL errore('postproc','Wavefunctions not available?!?',1)
ELSE
CALL read_xml_file ( dummy )
CALL post_xml_init ( )

View File

@ -79,6 +79,7 @@ PROGRAM do_ppacf
! counter on nspin
INTEGER :: iexch, icorr, igcx, igcc, inlc
INTEGER :: ierr, ios
LOGICAL :: dummy
REAL(DP) :: cc, dcc, ccp, ccm, ccp2, ccm2, ccp3, ccm3, ccp4, ccm4, ccp8, ccm8, cc3
! coupling constant
! local exchange energy, local correlation energy
@ -222,8 +223,7 @@ PROGRAM do_ppacf
IF (code_num == 1) THEN
!
tmp_dir = TRIM(outdir)
! CALL read_xml_file_internal(.TRUE.)
CALL read_file()
CALL read_file_new (dummy)
!
! Check exchange correlation functional
iexch = get_iexch()

View File

@ -50,7 +50,7 @@ PROGRAM do_projwfc
REAL (DP), allocatable :: xk_collect(:,:)
REAL (DP) :: Emin, Emax, DeltaE, degauss1, ef_0
INTEGER :: nks2, ngauss1, ios
LOGICAL :: lwrite_overlaps, lbinary_data
LOGICAL :: lwrite_overlaps, lbinary_data, wfc_is_collected
LOGICAL :: lsym, kresolveddos, tdosinboxes, plotboxes, pawproj
INTEGER, PARAMETER :: N_MAX_BOXES = 999
INTEGER :: n_proj_boxes, irmin(3,N_MAX_BOXES), irmax(3,N_MAX_BOXES)
@ -139,7 +139,9 @@ PROGRAM do_projwfc
!
! Now allocate space for pwscf variables, read and check them.
!
CALL read_file ( )
CALL read_file_new ( wfc_is_collected )
IF ( .NOT. wfc_is_collected ) &
CALL errore ('projwfc','wavefunctions not available?!?',1)
!
IF(lgww) CALL get_et_from_gww ( nbnd, et )
!
@ -153,10 +155,6 @@ PROGRAM do_projwfc
END IF
IF ( lforcet .AND. tdosinboxes ) CALL errore ('projwfc','incompatible options',3)
!
! More initializations
!
CALL openfil_pp ( )
!
! Tetrahedron method
!
IF ( ltetra ) THEN
@ -218,7 +216,7 @@ PROGRAM do_projwfc
IF ( lforcet .OR. noncolin ) THEN
CALL projwave_nc(filproj, lsym, lwrite_overlaps, lbinary_data,ef_0)
ELSE
CALL pprojwave (filproj, lsym, lwrite_overlaps, lbinary_data )
CALL projwave (filproj, lsym, lwrite_overlaps, lbinary_data )
ENDIF
ENDIF
!
@ -393,219 +391,6 @@ SUBROUTINE write_lowdin ( filproj, nat, lmax_wfc, nspin, charges, charges_lm )
END SUBROUTINE
!
!-----------------------------------------------------------------------
SUBROUTINE projwave( filproj, lsym, lwrite_ovp, lbinary )
!-----------------------------------------------------------------------
!
USE io_global, ONLY : stdout, ionode
USE ions_base, ONLY : zv, tau, nat, ntyp => nsp, ityp, atm
USE basis, ONLY : natomwfc, swfcatom
USE fft_base, ONLY : dfftp
USE klist, ONLY : xk, nks, nkstot, nelec, ngk, igk_k
USE lsda_mod, ONLY : nspin
USE wvfct, ONLY : npwx, nbnd, et
USE uspp, ONLY : nkb, vkb
USE becmod, ONLY : bec_type, becp, calbec, allocate_bec_type, deallocate_bec_type
USE io_files, ONLY : prefix, tmp_dir, nwordwfc, iunwfc
USE control_flags, ONLY: gamma_only
USE wavefunctions, ONLY: evc
!
USE projections
!
IMPLICIT NONE
!
CHARACTER (len=*) :: filproj
LOGICAL :: lwrite_ovp, lbinary
INTEGER :: npw, ik, ibnd, i, j, k, na, nb, nt, isym, n, m, l, nwfc,&
lmax_wfc, is
REAL(DP), ALLOCATABLE :: e (:)
COMPLEX(DP), ALLOCATABLE :: wfcatom (:,:), proj0(:,:)
! Some workspace for gamma-point calculation ...
REAL (DP), ALLOCATABLE :: rproj0(:,:)
COMPLEX(DP), ALLOCATABLE :: overlap(:,:), work(:,:)
REAL (DP), ALLOCATABLE ::roverlap(:,:)
!
INTEGER :: nksinit, nkslast
LOGICAL :: lsym
LOGICAL :: freeswfcatom
!
!
IF ( natomwfc <= 0 ) CALL errore &
('projwave', 'Cannot project on zero atomic wavefunctions!', 1)
WRITE( stdout, '(/5x,"Calling projwave .... ")')
IF ( gamma_only ) &
WRITE( stdout, '(5x,"gamma-point specific algorithms are used")')
!
! fill structure nlmchi
!
CALL fill_nlmchi ( natomwfc, nwfc, lmax_wfc )
!
ALLOCATE( proj (natomwfc, nbnd, nkstot) )
!
ALLOCATE( proj_aux (natomwfc, nbnd, nkstot) )
!
IF ( lwrite_ovp ) THEN
ALLOCATE( ovps_aux(natomwfc, natomwfc, nkstot) )
ELSE
ALLOCATE( ovps_aux(1,1,1) )
ENDIF
ovps_aux = (0.d0, 0.d0)
!
IF (.not. ALLOCATED(swfcatom)) THEN
ALLOCATE(swfcatom (npwx , natomwfc ) )
freeswfcatom = .true.
ELSE
freeswfcatom = .false.
ENDIF
ALLOCATE(wfcatom (npwx, natomwfc) )
ALLOCATE(e (natomwfc) )
!
ALLOCATE(overlap (natomwfc, natomwfc) )
overlap= (0.d0,0.d0)
IF ( gamma_only ) THEN
ALLOCATE(roverlap (natomwfc, natomwfc) )
roverlap= 0.d0
ENDIF
!
! loop on k points
!
DO ik = 1, nks
npw = ngk(ik)
CALL davcio (evc, 2*nwordwfc, iunwfc, ik, - 1)
CALL atomic_wfc (ik, wfcatom)
CALL allocate_bec_type (nkb, natomwfc, becp )
!
CALL init_us_2 (npw, igk_k(1,ik), xk (1, ik), vkb)
CALL calbec ( npw, vkb, wfcatom, becp)
CALL s_psi (npwx, npw, natomwfc, wfcatom, swfcatom)
!
CALL deallocate_bec_type (becp)
!
! wfcatom = |phi_i> , swfcatom = \hat S |phi_i>
! calculate overlap matrix O_ij = <phi_i|\hat S|\phi_j>
!
IF ( gamma_only ) THEN
CALL calbec ( npw, wfcatom, swfcatom, roverlap )
overlap(:,:)=cmplx(roverlap(:,:),0.0_dp, kind=dp)
! TEMP: diagonalization routine for real matrix should be used instead
ELSE
CALL calbec ( npw, wfcatom, swfcatom, overlap )
ENDIF
!
! save the overlap matrix
!
IF ( lwrite_ovp ) THEN
!
ovps_aux(1:natomwfc,1:natomwfc,ik) = overlap(1:natomwfc,1:natomwfc)
!
ENDIF
!
! calculate O^{-1/2}
!
ALLOCATE(work (natomwfc, natomwfc) )
CALL cdiagh (natomwfc, overlap, natomwfc, e, work)
DO i = 1, natomwfc
e (i) = 1.d0 / dsqrt (e (i) )
ENDDO
DO i = 1, natomwfc
DO j = i, natomwfc
overlap (i, j) = (0.d0, 0.d0)
DO k = 1, natomwfc
overlap (i, j) = overlap (i, j) + e (k) * work (j, k) * conjg (work (i, k) )
ENDDO
IF (j /= i) overlap (j, i) = conjg (overlap (i, j))
ENDDO
ENDDO
DEALLOCATE (work)
!
! calculate wfcatom = O^{-1/2} \hat S | phi>
!
IF ( gamma_only ) THEN
roverlap(:,:)=REAL(overlap(:,:),DP)
! TEMP: diagonalization routine for real matrix should be used instead
CALL DGEMM ('n', 't', 2*npw, natomwfc, natomwfc, 1.d0 , &
swfcatom, 2*npwx, roverlap, natomwfc, 0.d0, wfcatom, 2*npwx)
ELSE
CALL ZGEMM ('n', 't', npw, natomwfc, natomwfc, (1.d0, 0.d0) , &
swfcatom, npwx, overlap, natomwfc, (0.d0, 0.d0), wfcatom, npwx)
ENDIF
!
! make the projection <psi_i| O^{-1/2} \hat S | phi_j>,
! symmetrize the projections if required
!
IF ( gamma_only ) THEN
!
ALLOCATE( rproj0(natomwfc,nbnd) )
CALL calbec ( npw, wfcatom, evc, rproj0)
proj_aux(:,:,ik) = cmplx( rproj0(:,:), 0.0_dp, kind=dp )
IF (lsym) THEN
CALL sym_proj_g (rproj0, proj(:,:,ik))
ELSE
proj(:,:,ik)=abs(rproj0(:,:))**2
ENDIF
DEALLOCATE (rproj0)
!
ELSE
!
ALLOCATE( proj0(natomwfc,nbnd) )
CALL calbec ( npw, wfcatom, evc, proj0)
proj_aux(:,:,ik) = proj0(:,:)
IF (lsym) THEN
CALL sym_proj_k (proj0, proj(:,:,ik))
ELSE
proj(:,:,ik)=abs(proj0(:,:))**2
ENDIF
DEALLOCATE (proj0)
!
ENDIF
! on k-points
ENDDO
!
DEALLOCATE (e)
DEALLOCATE (wfcatom)
IF (freeswfcatom) DEALLOCATE (swfcatom)
IF ( gamma_only ) THEN
DEALLOCATE (roverlap)
ENDIF
DEALLOCATE (overlap)
!
! vectors et and proj are distributed across the pools
! collect data for all k-points to the first pool
!
CALL poolrecover (et, nbnd, nkstot, nks)
CALL poolrecover (proj, nbnd * natomwfc, nkstot, nks)
!
CALL poolrecover (proj_aux, 2 * nbnd * natomwfc, nkstot, nks)
IF ( lwrite_ovp ) THEN
CALL poolrecover (ovps_aux, 2 * natomwfc * natomwfc, nkstot, nks)
ENDIF
!
IF ( ionode ) THEN
!
! write on the file filproj
!
CALL write_proj_file ( filproj, proj )
!
! write projections to file using iotk
!
CALL write_proj_iotk( "atomic_proj", lbinary, proj_aux, lwrite_ovp, &
ovps_aux )
!
DEALLOCATE( proj_aux, ovps_aux )
!
! write to standard output
!
CALL write_proj( lmax_wfc, filproj, proj )
!
ENDIF
!
RETURN
!
END SUBROUTINE projwave
!
!-----------------------------------------------------------------------
SUBROUTINE sym_proj_g (rproj0, proj_out)
!-----------------------------------------------------------------------
!
@ -1129,7 +914,8 @@ SUBROUTINE projwave_nc(filproj, lsym, lwrite_ovp, lbinary, ef_0 )
USE uspp, ONLY: nkb, vkb
USE uspp_param, ONLY: upf
USE becmod, ONLY: bec_type, becp, calbec, allocate_bec_type, deallocate_bec_type
USE io_files, ONLY: prefix, nwordwfc, iunwfc
USE io_files, ONLY : restart_dir
USE pw_restart_new,ONLY : read_collected_wfc
USE wavefunctions, ONLY: evc
USE mp, ONLY : mp_sum
USE mp_pools, ONLY : inter_pool_comm, intra_pool_comm
@ -1215,7 +1001,7 @@ SUBROUTINE projwave_nc(filproj, lsym, lwrite_ovp, lbinary, ef_0 )
swfcatom= (0.d0,0.d0)
npw = ngk(ik)
CALL davcio (evc, 2*nwordwfc, iunwfc, ik, - 1)
CALL read_collected_wfc ( restart_dir(), ik, evc )
!---- AlexS
! To project on real harmonics, not on spinors.
@ -1425,7 +1211,8 @@ SUBROUTINE projwave_paw( filproj)
USE uspp, ONLY: nkb, vkb
USE uspp_param, ONLY : upf
USE becmod, ONLY: bec_type, becp, calbec, allocate_bec_type, deallocate_bec_type
USE io_files, ONLY: prefix, nwordwfc, iunwfc
USE io_files, ONLY : restart_dir
USE pw_restart_new,ONLY : read_collected_wfc
USE wavefunctions, ONLY: evc
!
USE projections
@ -1489,7 +1276,7 @@ SUBROUTINE projwave_paw( filproj)
! loop on k points
!
DO ik = 1, nks
CALL davcio (evc, 2*nwordwfc, iunwfc, ik, - 1)
CALL read_collected_wfc ( restart_dir() , ik, evc )
npw = ngk(ik)
CALL init_us_2 (npw, igk_k(1,ik), xk (1, ik), vkb)
@ -1785,7 +1572,7 @@ END SUBROUTINE write_proj_file
! projwave with distributed matrixes
!
!-----------------------------------------------------------------------
SUBROUTINE pprojwave( filproj, lsym, lwrite_ovp, lbinary )
SUBROUTINE projwave( filproj, lsym, lwrite_ovp, lbinary )
!-----------------------------------------------------------------------
!
USE io_global, ONLY : stdout, ionode
@ -1797,9 +1584,10 @@ SUBROUTINE pprojwave( filproj, lsym, lwrite_ovp, lbinary )
USE wvfct, ONLY : npwx, nbnd, et
USE uspp, ONLY : nkb, vkb
USE becmod, ONLY : bec_type, becp, calbec, allocate_bec_type, deallocate_bec_type
USE io_files, ONLY : prefix, tmp_dir, nwordwfc, iunwfc
USE control_flags, ONLY: gamma_only
USE wavefunctions, ONLY: evc
USE io_files, ONLY : prefix, restart_dir, tmp_dir
USE control_flags, ONLY : gamma_only
USE pw_restart_new,ONLY : read_collected_wfc
USE wavefunctions, ONLY : evc
!
USE projections
!
@ -1875,7 +1663,7 @@ SUBROUTINE pprojwave( filproj, lsym, lwrite_ovp, lbinary )
! Open file as temporary storage
!
iunaux = find_free_unit()
auxname = TRIM(tmp_dir) // TRIM(ADJUSTL(prefix)) // '.AUX' // TRIM(nd_nmbr)
auxname = TRIM( restart_dir() ) // 'AUX' // TRIM(nd_nmbr)
OPEN( unit=iunaux, file=trim(auxname), status='unknown', form='unformatted')
!
ALLOCATE( desc_ip( np_ortho(1), np_ortho(2) ) )
@ -1902,7 +1690,7 @@ SUBROUTINE pprojwave( filproj, lsym, lwrite_ovp, lbinary )
DO ik = 1, nks
!
npw = ngk(ik)
CALL davcio (evc, 2*nwordwfc, iunwfc, ik, - 1)
CALL read_collected_wfc ( restart_dir() , ik, evc )
CALL atomic_wfc (ik, wfcatom)
@ -2378,5 +2166,5 @@ CONTAINS
END SUBROUTINE wf_times_roverlap
!
END SUBROUTINE pprojwave
END SUBROUTINE projwave
!

View File

@ -34,7 +34,7 @@ SUBROUTINE projwave_boxes( filpdos, filproj, n_proj_boxes, irmin, irmax, plotbox
USE uspp, ONLY: okvan
USE noncollin_module, ONLY: noncolin, npol
USE wavefunctions, ONLY: evc, psic, psic_nc
USE io_files, ONLY : iunwfc, nwordwfc
USE io_files, ONLY : restart_dir
USE scf, ONLY : rho
USE projections_ldos, ONLY : proj
USE fft_base, ONLY : dfftp
@ -42,6 +42,7 @@ SUBROUTINE projwave_boxes( filpdos, filproj, n_proj_boxes, irmin, irmax, plotbox
USE fft_interfaces, ONLY : invfft
USE mp_pools, ONLY : intra_pool_comm
USE mp, ONLY : mp_sum
USE pw_restart_new, ONLY : read_collected_wfc
!
!
IMPLICIT NONE
@ -222,7 +223,7 @@ SUBROUTINE projwave_boxes( filpdos, filproj, n_proj_boxes, irmin, irmax, plotbox
!
IF ( lsda ) current_spin = isk(ik)
npw = ngk(ik)
CALL davcio (evc, 2*nwordwfc, iunwfc, ik, - 1)
CALL read_collected_wfc ( restart_dir(), ik, evc )
!
bnd_loop: DO ibnd = 1, nbnd
!

View File

@ -33,10 +33,11 @@ SUBROUTINE stm (sample_bias, stmdos, istates)
USE wvfct, ONLY: npwx, nbnd, wg, et
USE control_flags, ONLY : gamma_only
USE wavefunctions, ONLY : evc, psic
USE io_files, ONLY: iunwfc, nwordwfc
USE io_files, ONLY: restart_dir
USE constants, ONLY : degspin
USE mp, ONLY : mp_max, mp_min, mp_sum
USE mp_pools, ONLY : inter_pool_comm
USE pw_restart_new,ONLY : read_collected_wfc
!
IMPLICIT NONE
!
@ -149,7 +150,7 @@ SUBROUTINE stm (sample_bias, stmdos, istates)
istates = istates + (last_band - first_band + 1)
npw = ngk(ik)
CALL davcio (evc, 2*nwordwfc, iunwfc, ik, - 1)
CALL read_collected_wfc ( restart_dir(), ik, evc )
!
IF (gamma_only) THEN
!

View File

@ -29,7 +29,7 @@ PROGRAM wannier_ham
!
CHARACTER(len=256) :: outdir, form
INTEGER :: ios
LOGICAL :: plot_bands
LOGICAL :: plot_bands, dummy
NAMELIST /inputpp/ outdir, prefix, nwan, plot_bands, use_energy_int, form
! initialise environment
@ -64,8 +64,7 @@ PROGRAM wannier_ham
!
CALL mp_bcast( ios, ionode_id, world_comm )
IF ( ios /= 0 ) CALL errore('wannier_ham','reading inputpp namelist',abs(ios))
CALL read_file
CALL openfil_pp
CALL read_file_new ( dummy )
CALL wannier_init(.false.)

View File

@ -30,6 +30,7 @@ PROGRAM wannier_plot
!
CHARACTER(len=256) :: outdir
INTEGER :: ios,nc(3),n0(3)
LOGICAL :: dummy
NAMELIST /inputpp/ outdir, prefix, nwan, plot_wan_num, plot_wan_spin, nc, n0
!
! initialise environment
@ -67,8 +68,7 @@ PROGRAM wannier_plot
!
CALL mp_bcast( ios, ionode_id, world_comm )
IF ( ios /= 0 ) CALL errore('wannier_ham','reading inputpp namelist',abs(ios))
CALL read_file
CALL openfil_pp
CALL read_file_new ( dummy )
CALL wannier_init(.true.)

View File

@ -37,7 +37,7 @@ PROGRAM wfck2r
!-----------------------------------------------------------------------
!
USE kinds, ONLY : DP
USE io_files, ONLY : prefix, tmp_dir, diropn
USE io_files, ONLY : prefix, tmp_dir, diropn, restart_dir
USE wvfct, ONLY : nbnd, npwx, et, wg
USE klist, ONLY : xk, nks, ngk, igk_k, wk
USE io_global, ONLY : ionode, ionode_id, stdout
@ -54,6 +54,7 @@ PROGRAM wfck2r
USE scatter_mod, only : gather_grid
USE fft_interfaces, ONLY : invfft
USE ener, ONLY: efermi => ef
USE pw_restart_new,ONLY : read_collected_wfc
!
IMPLICIT NONE
CHARACTER (len=256) :: outdir
@ -113,8 +114,9 @@ PROGRAM wfck2r
!
! Now allocate space for pwscf variables, read and check them.
!
CALL read_file
call openfil_pp
CALL read_file_new ( exst )
IF ( .NOT. exst ) &
CALL errore ('wfck2r','wavefunctions not available?!?',1)
exst=.false.
@ -193,7 +195,7 @@ PROGRAM wfck2r
DO ik = first_k, last_k
npw = ngk(ik)
CALL davcio (evc, 2*nwordwfc, iunwfc, ik, - 1)
CALL read_collected_wfc ( restart_dir(), ik, evc )
do ibnd = first_band, last_band
!

View File

@ -1573,10 +1573,13 @@ read_conf_from_file.o : ../../Modules/io_files.o
read_conf_from_file.o : ../../Modules/io_global.o
read_conf_from_file.o : ../../Modules/ions_base.o
read_conf_from_file.o : ../../Modules/kind.o
read_conf_from_file.o : ../../Modules/mp_images.o
read_conf_from_file.o : ../../Modules/qes_bcast_module.o
read_conf_from_file.o : ../../Modules/qes_libs_module.o
read_conf_from_file.o : ../../Modules/qes_types_module.o
read_conf_from_file.o : ../../Modules/qexsd.o
read_conf_from_file.o : ../../Modules/qexsd_copy.o
read_conf_from_file.o : ../../UtilXlib/mp.o
read_file_new.o : ../../Modules/cell_base.o
read_file_new.o : ../../Modules/constants.o
read_file_new.o : ../../Modules/control_flags.o
@ -1604,6 +1607,7 @@ read_file_new.o : ../../Modules/recvec.o
read_file_new.o : ../../Modules/recvec_subs.o
read_file_new.o : ../../Modules/tsvdw.o
read_file_new.o : ../../Modules/uspp.o
read_file_new.o : ../../Modules/wavefunctions.o
read_file_new.o : ../../UtilXlib/mp.o
read_file_new.o : Coul_cut_2D.o
read_file_new.o : atomic_wfc_mod.o
@ -1821,6 +1825,7 @@ setup.o : ../../Modules/io_global.o
setup.o : ../../Modules/ions_base.o
setup.o : ../../Modules/kind.o
setup.o : ../../Modules/mp_bands.o
setup.o : ../../Modules/mp_images.o
setup.o : ../../Modules/mp_pools.o
setup.o : ../../Modules/noncol.o
setup.o : ../../Modules/parameters.o
@ -1831,6 +1836,7 @@ setup.o : ../../Modules/qexsd.o
setup.o : ../../Modules/qexsd_copy.o
setup.o : ../../Modules/recvec.o
setup.o : ../../Modules/uspp.o
setup.o : ../../UtilXlib/mp.o
setup.o : atomic_wfc_mod.o
setup.o : bp_mod.o
setup.o : extfield.o
@ -2270,6 +2276,7 @@ wfcinit.o : ../../Modules/io_files.o
wfcinit.o : ../../Modules/io_global.o
wfcinit.o : ../../Modules/kind.o
wfcinit.o : ../../Modules/mp_bands.o
wfcinit.o : ../../Modules/mp_images.o
wfcinit.o : ../../Modules/noncol.o
wfcinit.o : ../../Modules/qes_libs_module.o
wfcinit.o : ../../Modules/qes_types_module.o

View File

@ -37,7 +37,8 @@ MODULE pw_restart_new
!
CHARACTER(LEN=6), EXTERNAL :: int_to_char
PRIVATE
PUBLIC :: pw_write_schema, pw_write_binaries, read_collected_to_evc
PUBLIC :: pw_write_schema, pw_write_binaries
PUBLIC :: read_collected_wfc
!
CONTAINS
!------------------------------------------------------------------------
@ -366,6 +367,10 @@ MODULE pw_restart_new
vdw_term_pt => dispersion_energy_term
vdw_corr_ = TRIM(vdw_corr)
vdw_corr_pt => vdw_corr_
NULLIFY (london_rcut_pt, london_s6_pt)
NULLIFY (xdm_a1_pt, xdm_a2_pt)
NULLIFY (dftd3_version_pt, dftd3_threebody_pt)
NULLIFY (ts_vdw_isolated_pt, ts_vdw_econv_thr_pt)
IF (llondon ) THEN
dispersion_energy_term = elondon/e2
lond_s6_ = scal6
@ -685,7 +690,7 @@ MODULE pw_restart_new
USE buffers, ONLY : get_buffer
USE wavefunctions, ONLY : evc
USE klist, ONLY : nks, nkstot, xk, ngk, igk_k, wk
USE klist, ONLY : nks, nkstot, xk, ngk, igk_k
USE gvect, ONLY : ngm, g, mill
USE fft_base, ONLY : dfftp
USE basis, ONLY : natomwfc
@ -885,21 +890,18 @@ MODULE pw_restart_new
END SUBROUTINE gk_l2gmap_kdip
!
!------------------------------------------------------------------------
SUBROUTINE read_collected_to_evc( dirname )
SUBROUTINE read_collected_wfc ( dirname, ik, evc )
!------------------------------------------------------------------------
!
! ... This routines reads wavefunctions from the new file format and
! ... writes them into the old format
! ... reads from directory "dirname" (new file format) for k-point "ik"
! ... wavefunctions from collected format into distributed array "evc"
!
USE control_flags, ONLY : gamma_only
USE lsda_mod, ONLY : nspin, isk
USE klist, ONLY : nkstot, wk, nks, xk, ngk, igk_k
USE wvfct, ONLY : npwx, g2kin, et, wg, nbnd
USE wavefunctions, ONLY : evc
USE io_files, ONLY : nwordwfc, iunwfc
USE buffers, ONLY : save_buffer
USE gvect, ONLY : ig_l2g
USE noncollin_module, ONLY : noncolin, npol
USE klist, ONLY : nkstot, nks, xk, ngk, igk_k
USE wvfct, ONLY : npwx, g2kin, et, wg, nbnd
USE gvect, ONLY : ig_l2g
USE mp_bands, ONLY : root_bgrp, intra_bgrp_comm
USE mp_pools, ONLY : me_pool, root_pool, &
intra_pool_comm, inter_pool_comm
@ -908,108 +910,101 @@ MODULE pw_restart_new
!
IMPLICIT NONE
!
CHARACTER(LEN=*), INTENT(IN) :: dirname
CHARACTER(LEN=*), INTENT(IN) :: dirname
INTEGER, INTENT(IN) :: ik
COMPLEX(dp), INTENT(OUT) :: evc(:,:)
!
CHARACTER(LEN=2), DIMENSION(2) :: updw = (/ 'up', 'dw' /)
CHARACTER(LEN=320) :: filename, msg
INTEGER :: i, ik, ik_g, ig, ipol, ik_s
INTEGER :: i, ik_g, ig, ipol, ik_s
INTEGER :: npol_, nbnd_
INTEGER :: nupdwn(2), ike, iks, npw_g, ispin
INTEGER :: nupdwn(2), ike, iks, ngk_g, npw_g, ispin
INTEGER, EXTERNAL :: global_kpoint_index
INTEGER, ALLOCATABLE :: ngk_g(:), mill_k(:,:)
INTEGER, ALLOCATABLE :: mill_k(:,:)
INTEGER, ALLOCATABLE :: igk_l2g(:), igk_l2g_kdip(:)
LOGICAL :: opnd, ionode_k
REAL(DP) :: scalef, xk_(3), b1(3), b2(3), b3(3)
!
iks = global_kpoint_index (nkstot, 1)
ike = iks + nks - 1
!
! ... ngk_g: global number of k+G vectors for all k points
!
ALLOCATE( ngk_g( nks ) )
ngk_g(1:nks) = ngk(1:nks)
CALL mp_sum( ngk_g, intra_bgrp_comm)
!
! ... the root processor of each pool reads
!
ionode_k = (me_pool == root_pool)
!
! ... The igk_l2g array yields the correspondence between the
! ... local k+G index and the global G index
iks = global_kpoint_index (nkstot, 1)
ike = iks + nks - 1
!
ALLOCATE ( igk_l2g( npwx ) )
! ik_g: index of k-point ik in the global list
!
ik_g = ik + iks - 1
!
! ... the igk_l2g_kdip local-to-global map is needed to read wfcs
!
ALLOCATE ( igk_l2g_kdip( npwx ) )
!
! ... The igk_l2g array yields the correspondence between the
! ... local k+G index and the global G index - requires arrays
! ... igk_k (k+G indices) and ig_l2g (local to global G index map)
!
ALLOCATE ( igk_l2g( npwx ) )
igk_l2g = 0
DO ig = 1, ngk(ik)
igk_l2g(ig) = ig_l2g(igk_k(ig,ik))
END DO
!
! ... npw_g: the maximum G vector index among all processors
! ... ngk_g: global number of k+G vectors for all k points
!
npw_g = MAXVAL( igk_l2g(1:ngk(ik)) )
CALL mp_max( npw_g, intra_pool_comm )
ngk_g = ngk(ik)
CALL mp_sum( ngk_g, intra_bgrp_comm)
!
! ... now compute the igk_l2g_kdip local-to-global map
!
igk_l2g_kdip = 0
CALL gk_l2gmap_kdip( npw_g, ngk_g, ngk(ik), igk_l2g, &
igk_l2g_kdip )
DEALLOCATE ( igk_l2g )
!
IF ( nspin == 2 ) THEN
!
! ... LSDA: spin mapped to k-points, isk(ik) tracks up and down spin
!
ik_g = MOD ( ik_g-1, nkstot/2 ) + 1
ispin = isk(ik)
filename = TRIM(dirname) // 'wfc' // updw(ispin) // &
& TRIM(int_to_char(ik_g))
!
ELSE
!
filename = TRIM(dirname) // 'wfc' // TRIM(int_to_char(ik_g))
!
ENDIF
!
! ... Miller indices are read from file (but not used)
!
ALLOCATE( mill_k ( 3,npwx ) )
!
k_points_loop: DO ik = 1, nks
!
! index of k-point ik in the global list
!
ik_g = ik + iks - 1
!
! ... Compute the igk_l2g array from previously computed arrays
! ... igk_k (k+G indices) and ig_l2g (local to global G index map)
!
igk_l2g = 0
DO ig = 1, ngk(ik)
igk_l2g(ig) = ig_l2g(igk_k(ig,ik))
END DO
!
! ... npw_g: the maximum G vector index among all processors
!
npw_g = MAXVAL( igk_l2g(1:ngk(ik)) )
CALL mp_max( npw_g, intra_pool_comm )
!
igk_l2g_kdip = 0
CALL gk_l2gmap_kdip( npw_g, ngk_g(ik), ngk(ik), igk_l2g, &
igk_l2g_kdip )
!
evc=(0.0_DP, 0.0_DP)
!
IF ( nspin == 2 ) THEN
!
! ... LSDA: spin mapped to k-points, isk(ik) tracks up and down spin
!
ik_g = MOD ( ik_g-1, nkstot/2 ) + 1
ispin = isk(ik)
filename = TRIM(dirname) // 'wfc' // updw(ispin) // &
& TRIM(int_to_char(ik_g))
!
ELSE
!
filename = TRIM(dirname) // 'wfc' // TRIM(int_to_char(ik_g))
!
ENDIF
!
CALL read_wfc( iunpun, filename, root_bgrp, intra_bgrp_comm, &
ik_g, xk_, ispin, npol_, evc, npw_g, gamma_only, nbnd_, &
igk_l2g_kdip(:), ngk(ik), b1, b2, b3, mill_k, scalef )
!
! ... here one should check for consistency between what is read
! ... and what is expected
!
IF ( nbnd_ < nbnd ) THEN
WRITE (msg,'("The number of bands for this run is",I6,", but only",&
& I6," bands were read from file")') nbnd, nbnd_
CALL errore ('pw_restart - read_collected_to_evc', msg, 1 )
END IF
CALL save_buffer ( evc, nwordwfc, iunwfc, ik )
!
END DO k_points_loop
evc=(0.0_DP, 0.0_DP)
!
CALL read_wfc( iunpun, filename, root_bgrp, intra_bgrp_comm, &
ik_g, xk_, ispin, npol_, evc, npw_g, gamma_only, nbnd_, &
igk_l2g_kdip(:), ngk(ik), b1, b2, b3, mill_k, scalef )
!
DEALLOCATE ( mill_k )
DEALLOCATE ( igk_l2g )
DEALLOCATE ( igk_l2g_kdip )
DEALLOCATE ( ngk_g )
!
! ... here one should check for consistency between what is read
! ... and what is expected
!
IF ( nbnd_ < nbnd ) THEN
WRITE (msg,'("The number of bands for this run is",I6,", but only",&
& I6," bands were read from file")') nbnd, nbnd_
CALL errore ('pw_restart - read_collected_wfc', msg, 1 )
END IF
!
RETURN
!
END SUBROUTINE read_collected_to_evc
END SUBROUTINE read_collected_wfc
!
!------------------------------------------------------------------------
END MODULE pw_restart_new

View File

@ -9,36 +9,79 @@
SUBROUTINE read_file()
!----------------------------------------------------------------------------
!
! Read data produced by pw.x or cp.x - new xml file and binary files
! Wrapper routine for backwards compatibility
! Wrapper routine, for backwards compatibility
!
USE io_global, ONLY : stdout
USE io_files, ONLY : nwordwfc, iunwfc, wfc_dir, tmp_dir, restart_dir
USE buffers, ONLY : open_buffer, close_buffer
USE wvfct, ONLY : nbnd, npwx
USE noncollin_module, ONLY : npol
USE pw_restart_new, ONLY : read_collected_to_evc
USE control_flags, ONLY : io_level
USE io_global, ONLY : stdout
USE control_flags, ONLY : io_level
USE buffers, ONLY : open_buffer, close_buffer, save_buffer
USE io_files, ONLY : nwordwfc, iunwfc, restart_dir
USE wvfct, ONLY : nbnd, npwx
USE noncollin_module, ONLY : npol
USE klist, ONLY : nks
USE wavefunctions, ONLY : evc
USE pw_restart_new, ONLY : read_collected_wfc
!
IMPLICIT NONE
!
INTEGER :: ik
LOGICAL :: exst, wfc_is_collected
CHARACTER( LEN=256 ) :: dirname
!
dirname = restart_dir( )
WRITE( stdout, '(/,5x,A,/,5x,A)') &
'Reading data from directory:', TRIM( dirname )
!
CALL read_file_new( wfc_is_collected )
!
! ... Open unit iunwfc, for Kohn-Sham orbitals - we assume that wfcs
! ... have been written to tmp_dir, not to a different directory!
! ... io_level = 1 so that a real file is opened
!
nwordwfc = nbnd*npwx*npol
io_level = 1
CALL open_buffer ( iunwfc, 'wfc', nwordwfc, io_level, exst )
!
! ... read wavefunctions in collected format, write them to file
!
IF ( wfc_is_collected ) THEN
!
DO ik = 1, nks
!
CALL read_collected_wfc ( dirname, ik, evc )
CALL save_buffer ( evc, nwordwfc, iunwfc, ik )
!
END DO
!
END IF
!
CALL close_buffer ( iunwfc, 'KEEP' )
!
END SUBROUTINE read_file
!
!----------------------------------------------------------------------------
SUBROUTINE read_file_new ( wfc_is_collected )
!----------------------------------------------------------------------------
!
! Read xml data file produced by pw.x or cp.x, performs some initialization
! DOes not read wfcs but returns in "wfc_is_collected" info on the wfc file
!
USE io_files, ONLY : nwordwfc, iunwfc, wfc_dir, tmp_dir
USE gvect, ONLY : ngm, g
USE gvecw, ONLY : gcutw
USE klist, ONLY : nkstot, nks, xk, wk
USE lsda_mod, ONLY : isk
USE wvfct, ONLY : nbnd, et, wg
!
IMPLICIT NONE
INTEGER :: ierr
LOGICAL :: exst, wfc_is_collected
CHARACTER( LEN=256 ) :: dirname
IMPLICIT NONE
!
LOGICAL, INTENT(OUT) :: wfc_is_collected
!
INTEGER :: ierr
!
ierr = 0
!
! ... Read the contents of the xml data file
!
dirname = restart_dir( )
WRITE( stdout, '(/,5x,A,/,5x,A)') &
'Reading data from directory:', TRIM( dirname )
!
CALL read_xml_file ( wfc_is_collected )
!
! ... more initializations: pseudopotentials / G-vectors / FFT arrays /
@ -48,6 +91,8 @@ SUBROUTINE read_file()
!
! ... initialization of KS orbitals
!
wfc_dir = tmp_dir ! this is likely obsolete and no longer used
!
! ... distribute across pools k-points and related variables.
! ... nks is defined by the following routine as the number
! ... of k-points in the current pool
@ -61,23 +106,7 @@ SUBROUTINE read_file()
!
CALL allocate_wfc_k()
!
! ... Open unit iunwfc, for Kohn-Sham orbitals - we assume that wfcs
! ... have been written to tmp_dir, not to a different directory!
! ... io_level = 1 so that a real file is opened
!
wfc_dir = tmp_dir
nwordwfc = nbnd*npwx*npol
io_level = 1
CALL open_buffer ( iunwfc, 'wfc', nwordwfc, io_level, exst )
!
! ... read wavefunctions in collected format, writes them to file
! ... FIXME: likely not a great idea
!
IF ( wfc_is_collected ) CALL read_collected_to_evc(dirname)
!
CALL close_buffer ( iunwfc, 'KEEP' )
!
END SUBROUTINE read_file
END SUBROUTINE read_file_new
!
!----------------------------------------------------------------------------
SUBROUTINE read_xml_file ( wfc_is_collected )

View File

@ -13,7 +13,9 @@ subroutine wannier_proj(ik, wan_func)
USE kinds, ONLY : DP
USE io_global, ONLY : stdout
USE io_files
USE io_files, ONLY : restart_dir, iunsat, nwordatwfc, &
iunwf, nwordwf, iunwpp, nwordwpp
USE pw_restart_new, ONLY : read_collected_wfc
USE wannier_new, ONLY : wan_in, nwan, use_energy_int
USE ions_base, ONLY : nat, ityp
USE wvfct, ONLY : nbnd, npwx, et
@ -49,12 +51,11 @@ subroutine wannier_proj(ik, wan_func)
IF (lsda) current_spin = isk(ik)
npw = ngk(ik)
! Read current wavefunctions
! Read current wavefunctions DIRECTLY FROM FINAL WFC FILES
! (this routine must be called from PP/src/, not from PW/src)
!
evc = ZERO
! See comment in PP/src/openfil.f90 why davcio and not get_buffer
! call get_buffer ( evc, nwordwfc, iunwfc, ik )
call davcio ( evc, 2*nwordwfc, iunwfc, ik, -1 )
evc = ZERO
call read_collected_wfc ( restart_dir(), ik, evc )
! Reads ortho-atomic wfc
! You should prepare data using orthoatwfc.f90
swfcatom = ZERO

View File

@ -26,10 +26,10 @@ SUBROUTINE wfcinit()
diropn, xmlfile, restart_dir
USE buffers, ONLY : open_buffer, get_buffer, save_buffer
USE uspp, ONLY : nkb, vkb
USE wavefunctions, ONLY : evc
USE wavefunctions, ONLY : evc
USE wvfct, ONLY : nbnd, npwx, current_k
USE wannier_new, ONLY : use_wannier
USE pw_restart_new, ONLY : read_collected_to_evc
USE pw_restart_new, ONLY : read_collected_wfc
USE mp, ONLY : mp_bcast
USE mp_images, ONLY : intra_image_comm
USE qexsd_module, ONLY : qexsd_readschema
@ -61,13 +61,22 @@ SUBROUTINE wfcinit()
IF (ionode) CALL qexsd_readschema ( xmlfile(), ierr, output_obj )
CALL mp_bcast(ierr, ionode_id, intra_image_comm)
IF ( ierr <= 0 ) THEN
!
IF (ionode) twfcollect_file = output_obj%band_structure%wf_collected
CALL mp_bcast(twfcollect_file, ionode_id, intra_image_comm)
!
IF ( twfcollect_file ) THEN
CALL read_collected_to_evc(dirname )
!
DO ik = 1, nks
CALL read_collected_wfc ( dirname, ik, evc )
CALL save_buffer ( evc, nwordwfc, iunwfc, ik )
END DO
!
ELSE IF ( .NOT. exst_file) THEN
! !
WRITE( stdout, '(5X,"Cannot read wfcs: file not found")' )
starting_wfc = 'atomic+random'
!
ELSE
!
! ... wavefunctions are read from file (or buffer) not here but

View File

@ -104,11 +104,12 @@ for dir in $dirs; do
$TOPDIR/moduledep.sh $DEPENDS > make.depend
$TOPDIR/includedep.sh $DEPENDS >> make.depend
# handle special cases: modules for C-fortran binding, hdf5, MPI
# handle special cases: modules for C-fortran binding,
# hdf5, MPI, FoX, libxc
sed '/@iso_c_binding@/d' make.depend > make.depend.tmp
sed '/@hdf5@/d;/@mpi@/d' make.depend.tmp > make.depend
sed '/@fox_dom@/d;/@fox_wxml@/d' make.depend > make.depend.tmp
sed '/@m_common_io@/d' make.depend.tmp > make.depend
sed '/@m_common_io@/d;/@xc_f03_lib_m@/d' make.depend.tmp > make.depend
if test "$DIR" = "FFTXlib"
then