Added functionality to GWL for iterative Www

This commit is contained in:
joshuadelliott 2020-11-21 00:37:29 +00:00
parent 10c4f20d00
commit 332954cf26
21 changed files with 1961 additions and 113 deletions

View File

@ -40,7 +40,8 @@ print_spectrum.o\
print_bse.o\
contract_w_exc.o\
qpe_exc.o\
qpcorrections.o
qpcorrections.o\
direct_www.o
#zvscal_test.o\

View File

@ -1,3 +1,5 @@
! Modified by Joshua Elliott November 2020 as JDE
MODULE bse_basic_structures
!this module describes the basis structures
!which are obtained from the DFT and GW code
@ -21,6 +23,19 @@ MODULE bse_basic_structures
END TYPE
! JDE start
TYPE www_mat
integer :: numb_v! number of valence bands for the two spin channels
integer :: np_max ! maximum number of overlapping wannier orbitals for a given v
integer :: ww_tot ! Total number of overlapping wannier products
integer, dimension (:,:), pointer :: ii_www_mat ! (np_max,numb_v) The overlapping wannier products, note that
! will be zero if there is not an overlap
COMPLEX(KIND=dp), DIMENSION(:,:), POINTER :: www !the set of ii W_ww products www(npw,ww_tot)
REAL(KIND=dp), DIMENSION(:,:), POINTER :: www_r !the set of ii W_ww products www(nrxxt,ww_tot)
END TYPE
! JDE end
TYPE vww_prod
!this type contains the v*wv*wv' products needed for the exchange part of the
!direct interaction term of the excitonic Hamiltonian
@ -128,6 +143,17 @@ MODULE bse_basic_structures
return
end subroutine
! JDE start
subroutine initialize_www_mat(wm)
implicit none
type(www_mat) :: wm
nullify(wm%ii_www_mat)
nullify(wm%www)
nullify(wm%www_r)
return
end subroutine
! JDE end
subroutine initialize_vww_prod(vww)
implicit none
type(vww_prod) :: vww
@ -194,6 +220,19 @@ MODULE bse_basic_structures
return
end subroutine
! JDE start
subroutine free_www_mat(wm)
implicit none
type(www_mat) :: wm
if(associated(wm%ii_www_mat)) deallocate(wm%ii_www_mat)
if(associated(wm%www)) deallocate(wm%www)
if(associated(wm%www_r)) deallocate(wm%www_r)
nullify(wm%ii_www_mat)
nullify(wm%www)
nullify(wm%www_r)
end subroutine
! JDE end
subroutine free_vww_prod(vww)
implicit none
type(vww_prod) :: vww
@ -762,6 +801,78 @@ MODULE bse_basic_structures
return
end subroutine
! JDE start
subroutine read_www_mat(iimat, wm)
! Read from the files produced by pw4gww, the Www products
!
USE io_files, ONLY : prefix, tmp_dir, diropn
USE io_global, ONLY : ionode, ionode_id
USE mp, ONLY : mp_bcast
USE mp_world, ONLY : world_comm
USE kinds, ONLY : DP
USE wvfct, ONLY : npw
implicit none
type(ii_mat), INTENT(IN) :: iimat ! the ii matrix
type(www_mat), INTENT(OUT) :: wm ! the wannier products
INTEGER, EXTERNAL :: find_free_unit
INTEGER :: wannier_prod
LOGICAL :: exst
INTEGER :: ii, iv, tot
wm%numb_v=iimat%numb_v
wm%np_max=iimat%np_max
tot = 0
DO iv = 1, iimat%numb_v
DO ii = 1, iimat%np_max
IF (iimat%iimat(ii,iv) > 0) THEN
tot = tot+1
ELSE
EXIT
END IF
END DO
END DO
wm%ww_tot=tot
ALLOCATE(wm%ii_www_mat(wm%np_max, wm%numb_v))
ALLOCATE(wm%www(npw, wm%ww_tot))
wannier_prod = find_free_unit()
! EXTEND THIS FOR SPIN - JOSH
CALL diropn(wannier_prod, 'Www_bse1.',npw*2, exst)
DO ii = 1, wm%ww_tot
CALL davcio(wm%www(1,ii),npw*2,wannier_prod,ii,-1)
END DO
CLOSE(wannier_prod)
tot=0
wm%ii_www_mat=-1
DO iv = 1, wm%numb_v
DO ii = 1,wm% np_max
IF (iimat%iimat(ii,iv) > 0) THEN
tot=tot+1
wm%ii_www_mat(ii,iv)=tot
ELSE
EXIT
END IF
END DO
END DO
RETURN
END SUBROUTINE
! JDE end
subroutine read_vww_prod(ispin,numb_v,npw,np_max,iimat,vww)
!each processor reads the vww(G) written by pw4gww
!be careful to check that the iimat that is passed to the subroutine is the related to the correct spin channel

View File

@ -1,26 +1,28 @@
! Modified by Joshua Elliott November 2020 as JDE
program bse_punch
use io_global, ONLY : stdout, ionode, ionode_id
use io_files, ONLY : psfile, pseudo_dir,diropn
use io_files, ONLY : prefix,tmp_dir,iunwfc
use mp_world, ONLY : mpime
use mp_pools, ONLY : kunit
USE wvfct, ONLY : nbnd, et, npwx
use io_global, ONLY : stdout, ionode, ionode_id
use io_files, ONLY : psfile, pseudo_dir,diropn
use io_files, ONLY : prefix,tmp_dir,iunwfc
use mp_world, ONLY : mpime
use mp_pools, ONLY : kunit
USE wvfct, ONLY : nbnd, et, npwx
USE gvecw, ONLY : ecutwfc
USE gvecs, ONLY : doublegrid
use pwcom
USE wavefunctions, ONLY : evc
use mp, ONLY: mp_bcast
USE mp_world, ONLY : world_comm
USE fft_base, ONLY : dfftp
use scf, only : vrs, vltot, v, kedtau
USE wavefunctions, ONLY : evc
use mp, ONLY : mp_bcast
USE mp_world, ONLY : world_comm
USE fft_base, ONLY : dfftp
use scf, ONLY : vrs, vltot, v, kedtau
USE fft_custom_gwl
use bse_basic_structures
use exciton
USE constants, ONLY: RYTOEV
USE mp, ONLY: mp_barrier
USE qpe_exc, ONLY: qpc
use bse_wannier, ONLY: num_nbndv,&
USE constants, ONLY : RYTOEV
USE mp, ONLY : mp_barrier
USE qpe_exc, ONLY : qpc
use bse_wannier, ONLY : num_nbndv,&
l_truncated_coulomb,&
truncation_radius, &
numw_prod,&
@ -33,7 +35,9 @@ use bse_wannier, ONLY: num_nbndv,&
spectra_e_min,spectra_e_max,spectra_nstep,spectra_broad,&
l_restart,n_eig_start, nit_lcz,l_lanczos, l_restart_lcz, nlcz_restart,&
l_tdhf,l_fullbse,l_lf,l_rpa, l_contraction, l_gtrick, qpe_imin, qpe_imax,&
l_scissor,l_dielectric
l_scissor,l_dielectric,&
l_read_www ! JDE
USE direct_www
implicit none
INTEGER, EXTERNAL :: find_free_unit
@ -74,8 +78,8 @@ NAMELIST /inputbse/ prefix,num_nbndv,dual_bse,outdir,l_truncated_coulomb,&
spectra_e_min,spectra_e_max,spectra_nstep,spectra_broad,&
l_restart,n_eig_start, nit_lcz,l_lanczos, l_restart_lcz, nlcz_restart,&
l_fullbse,l_tdhf,l_lf,l_rpa,l_contraction,l_gtrick, qpe_imin, qpe_imax,&
l_scissor,l_dielectric
l_scissor,l_dielectric,&
l_read_www ! JDE
debug=.false.
call start_bse( )
@ -139,6 +143,7 @@ qpe_imin=1
qpe_imax=1
l_scissor=.true.
l_dielectric=.false.
l_read_www=.false. ! JDE
!
! Reading input file
!
@ -213,6 +218,7 @@ ENDIF
CALL mp_bcast( qpe_imin, ionode_id, world_comm)
CALL mp_bcast( qpe_imax, ionode_id, world_comm)
CALL mp_bcast( l_dielectric, ionode_id, world_comm)
CALL mp_bcast( l_read_www, ionode_id, world_comm) ! JDE
call read_file
! after read_file everything is known
@ -282,7 +288,12 @@ ENDIF
allocate(qpc(qpe_imax))
call qpcorrections(wcstate)
endif
! JDE start
IF (l_read_www) THEN
! initialize arrays for www products
CALL initialize_direct_www(fc)
END IF
! JDE end
if(l_tspace) then
! solve the BSE in transition space
call tspace_diago(vstate,vstate_r,fc)
@ -304,6 +315,7 @@ ENDIF
! free memory
if (l_read_www) call free_memory_direct_www ! JDE
call free_v_state_r(vstate_r)
call free_v_state(vstate)
call free_c_state(cstate)

View File

@ -1,4 +1,5 @@
!this module contains bse code input variables
! Modified by Joshua Elliott November 2020 as JDE
MODULE bse_wannier
USE kinds, ONLY: DP
@ -58,6 +59,8 @@ MODULE bse_wannier
LOGICAL :: l_contraction!if true uses contraction for speeding-up
LOGICAL :: l_gtrick!save arrays in G space for limiting memory usage
LOGICAL :: l_dielectric!if true in case of l_lanczos=.false. calculates the dielectric function from excitonic amplitudes
LOGICAL :: l_read_www ! If true use screening calculated via cgsolve JDE
END MODULE bse_wannier

154
GWW/bse/direct_www.f90 Normal file
View File

@ -0,0 +1,154 @@
MODULE direct_www
USE kinds, ONLY : DP
USE bse_basic_structures
SAVE
type(ii_mat) :: iimat_direct
type(www_mat) :: wwwmat_direct
CONTAINS
SUBROUTINE free_memory_direct_www
IMPLICIT NONE
CALL free_www_mat(wwwmat_direct)
CALL free_imat(iimat_direct)
RETURN
END SUBROUTINE
SUBROUTINE initialize_direct_www(fc)
USE fft_custom_gwl
USE gvect
USE lsda_mod, ONLY: nspin
USE wvfct, ONLY: npw
USE wavefunctions, ONLY: psic
USE mp_world, ONLY: mpime, nproc
USE mp_pools, ONLY: intra_pool_comm
IMPLICIT NONE
TYPE(fft_cus), INTENT(IN) :: fc
INTEGER :: is, ii, loop_iimat
COMPLEX(KIND=DP), ALLOCATABLE :: www_t(:,:)
LOGICAL, PARAMETER :: debug=.FALSE.
CALL initialize_imat(iimat_direct)
CALL initialize_www_mat(wwwmat_direct)
DO is = 1, nspin
CALL read_iimat(iimat_direct, is)
IF (debug) THEN
write(*,*) 'I have read iimat into iimat_direct:'
DO loop_iimat = 1, iimat_direct%numb_v
write(*,*) iimat_direct%iimat(1:iimat_direct%np_max,loop_iimat)
END DO
END IF
END DO
CALL read_www_mat(iimat_direct, wwwmat_direct)
IF (debug) THEN
write(*,*) 'I have compiled wwwmat_direct:'
DO loop_iimat = 1, wwwmat_direct%numb_v
write(*,*) wwwmat_direct%ii_www_mat(1:wwwmat_direct%np_max,loop_iimat)
END DO
write(*,*) 'Sanity Check (iimat_direct): '
DO loop_iimat = 1, iimat_direct%numb_v
write(*,*) iimat_direct%iimat(1:iimat_direct%np_max,loop_iimat)
END DO
END IF
! FFT the Www products
ALLOCATE(www_t(fc%npwt,wwwmat_direct%ww_tot))
CALL reorderwfp_col(wwwmat_direct%ww_tot,npw,fc%npwt,wwwmat_direct%www,www_t,npw,fc%npwt, &
& ig_l2g,fc%ig_l2gt,fc%ngmt_g,mpime, nproc,intra_pool_comm )
ALLOCATE(wwwmat_direct%www_r(fc%nrxxt,wwwmat_direct%ww_tot))
do ii=1,wwwmat_direct%ww_tot,2
psic(1:fc%nrxxt)=(0.d0,0.d0)
if (ii==wwwmat_direct%ww_tot) then
psic(fc%nlt(1:fc%npwt)) = www_t(1:fc%npwt,ii)
psic(fc%nltm(1:fc%npwt)) = CONJG( www_t(1:fc%npwt,ii) )
else
psic(fc%nlt(1:fc%npwt))=www_t(1:fc%npwt,ii)+(0.d0,1.d0)*www_t(1:fc%npwt,ii+1)
psic(fc%nltm(1:fc%npwt))=CONJG(www_t(1:fc%npwt,ii))+(0.d0,1.d0)*CONJG(www_t(1:fc%npwt,ii+1))
endif
CALL cft3t( fc, psic, fc%nr1t, fc%nr2t, fc%nr3t, fc%nrx1t, fc%nrx2t, fc%nrx3t, 2 )
wwwmat_direct%www_r(1:fc%nrxxt,ii)= DBLE(psic(1:fc%nrxxt))
if(ii/=wwwmat_direct%ww_tot) wwwmat_direct%www_r(1:fc%nrxxt,ii+1)= DIMAG(psic(1:fc%nrxxt))
enddo
DEALLOCATE(www_t)
RETURN
END SUBROUTINE
SUBROUTINE direct_www_exc(a_in, fc, a_out)
USE bse_basic_structures
USE exciton
USE fft_custom_gwl
IMPLICIT NONE
TYPE(exc), INTENT(IN) :: a_in
TYPE(fft_cus), INTENT(IN) :: fc
TYPE(exc), INTENT(OUT) :: a_out
TYPE(exc_r) :: a_in_rt, a_tmp_rt
INTEGER, EXTERNAL :: find_free_unit
INTEGER :: iv,jv, loop_iimat
LOGICAL, PARAMETER :: debug=.FALSE.
IF (debug) write(*,*) 'direct_www_exc: DEBUG MODE'
IF (debug) THEN
write(*,*) 'Checking wwwmat_direct:'
DO loop_iimat = 1, wwwmat_direct%numb_v
write(*,*) wwwmat_direct%ii_www_mat(1:wwwmat_direct%np_max,loop_iimat)
END DO
write(*,*) 'Checking iimat_direct: '
DO loop_iimat = 1, iimat_direct%numb_v
write(*,*) iimat_direct%iimat(1:iimat_direct%np_max,loop_iimat)
END DO
END IF
! FFT exciton to real space
CALL initialize_exc_r(a_in_rt)
CALL fft_a_exc(a_in, fc, a_in_rt)
! Allocate tmp arrays
CALL initialize_exc_r(a_tmp_rt)
a_tmp_rt%nrxxt= fc%nrxxt
a_tmp_rt%numb_v=a_in%numb_v
a_tmp_rt%label=find_free_unit()
ALLOCATE(a_tmp_rt%ar(a_tmp_rt%nrxxt, a_tmp_rt%numb_v))
a_tmp_rt%ar=0.d0
! Main loop on iv (v^prime)
DO iv = 1, a_in%numb_v
! ii_mat contains products
DO jv = 1, iimat_direct%np_max
! The product between exc and wannier products
IF (iimat_direct%iimat(jv,iv) > 0) THEN
a_tmp_rt%ar(1:a_tmp_rt%nrxxt,iv) = a_tmp_rt%ar(1:a_tmp_rt%nrxxt,iv) &
+ a_in_rt%ar(1:a_tmp_rt%nrxxt,iimat_direct%iimat(jv,iv)) &
* wwwmat_direct%www_r(1:a_tmp_rt%nrxxt,wwwmat_direct%ii_www_mat(jv,iv))
ELSE
EXIT
END IF
END DO
END DO
! FFT back to G space and clean-up
CALL fftback_a_exc(a_tmp_rt, fc, a_out)
CALL free_memory_exc_a_r(a_in_rt)
CALL free_memory_exc_a_r(a_tmp_rt)
IF (debug) write(*,*) 'direct_www_exc: EXIT'
RETURN
END SUBROUTINE
END MODULE

View File

@ -1,3 +1,5 @@
! Modified by Joshua Elliott November 2020 as JDE
subroutine exc_h_a(a_in,a_out,vstate,vstate_r,cstate,wcstate,fc)
!this subroutine applies the excitonic hamiltonian exc_h_a on a given vector
!(a_in) and returns the transformed vector (a_out)
@ -8,7 +10,7 @@ use bse_basic_structures
use bse_wannier, ONLY:num_nbndv,l_truncated_coulomb, &
truncation_radius,l_fullbse,l_tdhf,l_lf,l_rpa,&
l_contraction
l_contraction, l_read_www ! JDE
use pwcom
USE wvfct, ONLY : npwx
!use io_files, ONLY : find_free_unit,diropn
@ -18,6 +20,7 @@ USE fft_custom_gwl
USE mp, ONLY :mp_barrier
USE mp_world, ONLY : world_comm
USE contract_w
USE direct_www, ONLY : direct_www_exc
implicit none
INTEGER, EXTERNAL :: find_free_unit
@ -131,11 +134,19 @@ debug=.false.
if(debug) write(stdout,*) 'DEBUG1'
Call urot_a(a_in,a_rot,0)
if(debug) write(stdout,*) 'DEBUG2'
if(.not.l_contraction) then
call direct_v_exc(a_rot,fc,a_dirv)
else
call contract_v_apply(a_rot,fc,a_dirv)
endif
! JDE start
IF (l_read_www) THEN
ELSE
if(.not.l_contraction) then
call direct_v_exc(a_rot,fc,a_dirv)
else
call contract_v_apply(a_rot,fc,a_dirv)
endif
END IF
! JDE end
if(debug) write(stdout,*) 'DEBUG3'
call pc_operator_exc(a_dirv,vstate,1)
if(debug) write(stdout,*) 'DEBUG4'
@ -159,13 +170,18 @@ debug=.false.
if(debug) then
write(stdout,*) 'Before direct_W_exc'
endif
!if(.true.) then !DEBUG
if(.not.l_contraction) then
call direct_w_exc(a_rot,fc,a_dirw)
else
call contract_w_apply(a_rot,fc,a_dirw)
endif
! JDE start
IF (l_read_www) THEN
call direct_www_exc(a_rot, fc, a_dirw)
ELSE
if(.not.l_contraction) then
call direct_w_exc(a_rot,fc,a_dirw)
else
call contract_w_apply(a_rot,fc,a_dirw)
endif
END IF
call pc_operator_exc(a_dirw,vstate,1)
! and rotate back

View File

@ -34,6 +34,7 @@ bse_main.o : ../../PW/src/scf_mod.o
bse_main.o : ../../UtilXlib/mp.o
bse_main.o : bse_basic_structure.o
bse_main.o : bse_wannier.o
bse_main.o : direct_www.o
bse_main.o : exciton.o
bse_main.o : qpe_exc.o
bse_wannier.o : ../../Modules/kind.o
@ -124,6 +125,15 @@ direct_w_exc.o : ../../UtilXlib/mp.o
direct_w_exc.o : bse_basic_structure.o
direct_w_exc.o : bse_wannier.o
direct_w_exc.o : exciton.o
direct_www.o : ../../GWW/pw4gww/fft_custom.o
direct_www.o : ../../Modules/kind.o
direct_www.o : ../../Modules/mp_pools.o
direct_www.o : ../../Modules/mp_world.o
direct_www.o : ../../Modules/recvec.o
direct_www.o : ../../Modules/wavefunctions.o
direct_www.o : ../../PW/src/pwcom.o
direct_www.o : bse_basic_structure.o
direct_www.o : exciton.o
dvpsi_bse.o : ../../Modules/becmod.o
dvpsi_bse.o : ../../Modules/cell_base.o
dvpsi_bse.o : ../../Modules/control_flags.o
@ -148,6 +158,7 @@ exc_h_a.o : ../../UtilXlib/mp.o
exc_h_a.o : bse_basic_structure.o
exc_h_a.o : bse_wannier.o
exc_h_a.o : contract_w_exc.o
exc_h_a.o : direct_www.o
exc_h_a.o : exciton.o
exchange_exc.o : ../../GWW/pw4gww/fft_custom.o
exchange_exc.o : ../../Modules/cell_base.o

View File

@ -0,0 +1,396 @@
Program BSE v.6.6 starts on 21Nov2020 at 0:33:53
This program is part of the open-source Quantum ESPRESSO suite
for quantum simulation of materials; please cite
"P. Giannozzi et al., J. Phys.:Condens. Matter 21 395502 (2009);
"P. Giannozzi et al., J. Phys.:Condens. Matter 29 465901 (2017);
URL http://www.quantum-espresso.org",
in publications or presentations arising from this work. More details at
http://www.quantum-espresso.org/quote
Parallel version (MPI), running on 4 processors
MPI processes distributed on 1 nodes
R & G space division: proc/nbgrp/npool/nimage = 4
Reading xml data from directory:
/home/h05959je/Applications/Quantum_Espresso/latest/q-e/tempdir/SiH4.save/
file H.pbe-vbc.UPF: wavefunction(s) 0S renormalized
IMPORTANT: XC functional enforced from input :
Exchange-correlation= PBE
( 1 4 3 4 0 0 0)
Any further DFT definition will be discarded
Please, verify this is what you really want
Parallelization info
--------------------
sticks: dense smooth PW G-vecs: dense smooth PW
Min 1271 1271 317 68355 68355 8565
Max 1276 1276 322 68358 68358 8568
Sum 5097 5097 1281 273425 273425 34265
Reading collected, re-writing distributed wavefunctions
nkstot= 1
after first init
after g stuff
after wfc waves
after davcio
bravais-lattice index = 1
lattice parameter (alat) = 20.0000 a.u.
unit-cell volume = 8000.0000 (a.u.)^3
number of atoms/cell = 5
number of atomic types = 2
number of electrons = 8.00
number of Kohn-Sham states= 8
kinetic-energy cutoff = 40.0000 Ry
charge density cutoff = 160.0000 Ry
Exchange-correlation= PBE
( 1 4 3 4 0 0 0)
celldm(1)= 20.000000 celldm(2)= 0.000000 celldm(3)= 0.000000
celldm(4)= 0.000000 celldm(5)= 0.000000 celldm(6)= 0.000000
crystal axes: (cart. coord. in units of alat)
a(1) = ( 1.000000 0.000000 0.000000 )
a(2) = ( 0.000000 1.000000 0.000000 )
a(3) = ( 0.000000 0.000000 1.000000 )
reciprocal axes: (cart. coord. in units 2 pi/alat)
b(1) = ( 1.000000 0.000000 0.000000 )
b(2) = ( 0.000000 1.000000 0.000000 )
b(3) = ( 0.000000 0.000000 1.000000 )
PseudoPot. # 1 for H read from file:
/home/h05959je/Applications/Quantum_Espresso/latest/q-e/pseudo/H.pbe-vbc.UPF
MD5 check sum: 65927ac6c32861be1224e6d13a099887
Pseudo is Norm-conserving, Zval = 1.0
Generated by new atomic code, or converted to UPF format
Using radial grid of 325 points, 0 beta functions with:
PseudoPot. # 2 for Si read from file:
/home/h05959je/Applications/Quantum_Espresso/latest/q-e/pseudo/Si.pbe-rrkj.UPF
MD5 check sum: 8af8e7039d270e0118f3b3651cf51d3d
Pseudo is Norm-conserving, Zval = 4.0
Generated by new atomic code, or converted to UPF format
Using radial grid of 883 points, 3 beta functions with:
l(1) = 0
l(2) = 0
l(3) = 1
atomic species valence mass pseudopotential
H 1.00 1.00000 H ( 1.00)
Si 4.00 28.00000 Si( 1.00)
24 Sym. Ops. (no inversion) found
Cartesian axes
site n. atom positions (alat units)
1 Si tau( 1) = ( 0.0000000 0.0000000 0.0000000 )
2 H tau( 2) = ( 0.0813801 0.0813801 0.0813801 )
3 H tau( 3) = ( -0.0813801 -0.0813801 0.0813801 )
4 H tau( 4) = ( -0.0813801 0.0813801 -0.0813801 )
5 H tau( 5) = ( 0.0813801 -0.0813801 -0.0813801 )
number of k points= 1
cart. coord. in units 2pi/alat
k( 1) = ( 0.0000000 0.0000000 0.0000000), wk = 2.0000000
Dense grid: 136713 G-vectors FFT dimensions: ( 81, 81, 81)
Dimension of the polarizability basis: 50
Scissor operator (eV)= 0.0000000000000000
Using truncated Coulomb interaction
Truncation Radius (a.u.)= 10.000000000000000
k = 0.0000 0.0000 0.0000 band energies (ev):
-13.1411 -8.2235 -8.2235 -8.2235 -0.4686 0.2367 0.2367 0.2367
highest occupied, lowest unoccupied level (ev): -8.2235 -0.4686
45 45 45
45 45 45
Planes per process (custom) : nr3t = 45 nr3p = 12 ncplane = 2025
Proc/ planes cols G
1 12 317 8565
2 11 320 8568
3 11 322 8566
4 11 322 8566
tot 45 1281 34265
Routine find_eig
Conjugate gradient started.
Looking for eigenvalue number: 1
eps= 1.0000000000000000E-004
eps_eig= 1.0000000000000001E-005
CG: eig# 1 it= 1 Eig (eV)= 296.21049935926965
CG: eig# 1 it= 2 Eig (eV)= 283.80393577626296
WARNING:I restart the cg
CG: eig# 1 it= 3 Eig (eV)= 173.47649844945249
CG: eig# 1 it= 4 Eig (eV)= 87.534015498547973
CG: eig# 1 it= 5 Eig (eV)= 55.837028542073817
CG: eig# 1 it= 6 Eig (eV)= 42.090972891182908
CG: eig# 1 it= 7 Eig (eV)= 32.880485017419247
CG: eig# 1 it= 8 Eig (eV)= 25.206223788999324
CG: eig# 1 it= 9 Eig (eV)= 21.120007501781529
CG: eig# 1 it= 10 Eig (eV)= 17.557850318399097
CG: eig# 1 it= 11 Eig (eV)= 15.369349663758982
CG: eig# 1 it= 12 Eig (eV)= 14.042260031234164
CG: eig# 1 it= 13 Eig (eV)= 12.587879729619756
CG: eig# 1 it= 14 Eig (eV)= 11.768672526791867
CG: eig# 1 it= 15 Eig (eV)= 10.816218906564874
CG: eig# 1 it= 16 Eig (eV)= 10.386816990245299
CG: eig# 1 it= 17 Eig (eV)= 9.8922575986665624
CG: eig# 1 it= 18 Eig (eV)= 9.5959219655090333
CG: eig# 1 it= 19 Eig (eV)= 9.2451484523731722
CG: eig# 1 it= 20 Eig (eV)= 8.9976844935421099
CG: eig# 1 it= 21 Eig (eV)= 8.7874567978841611
CG: eig# 1 it= 22 Eig (eV)= 8.6377399058680240
CG: eig# 1 it= 23 Eig (eV)= 8.4939325521944546
CG: eig# 1 it= 24 Eig (eV)= 8.3807740166869635
CG: eig# 1 it= 25 Eig (eV)= 8.2682879127789892
CG: eig# 1 it= 26 Eig (eV)= 8.1950667904727990
CG: eig# 1 it= 27 Eig (eV)= 8.1294827665994340
CG: eig# 1 it= 28 Eig (eV)= 8.0792904352937018
CG: eig# 1 it= 29 Eig (eV)= 8.0299619833041032
CG: eig# 1 it= 30 Eig (eV)= 7.9866082670155603
CG: eig# 1 it= 31 Eig (eV)= 7.9539515635049396
CG: eig# 1 it= 32 Eig (eV)= 7.9236889693666797
CG: eig# 1 it= 33 Eig (eV)= 7.8995092526576292
CG: eig# 1 it= 34 Eig (eV)= 7.8724127756082485
CG: eig# 1 it= 35 Eig (eV)= 7.8505276790970386
CG: eig# 1 it= 36 Eig (eV)= 7.8274166812241566
CG: eig# 1 it= 37 Eig (eV)= 7.8080473979352947
CG: eig# 1 it= 38 Eig (eV)= 7.7875780315997254
CG: eig# 1 it= 39 Eig (eV)= 7.7684023110669527
CG: eig# 1 it= 40 Eig (eV)= 7.7484937839859791
CG: eig# 1 it= 41 Eig (eV)= 7.7306398208155240
CG: eig# 1 it= 42 Eig (eV)= 7.7134792984796183
CG: eig# 1 it= 43 Eig (eV)= 7.6977086561310060
CG: eig# 1 it= 44 Eig (eV)= 7.6811210045674256
CG: eig# 1 it= 45 Eig (eV)= 7.6656333854068945
CG: eig# 1 it= 46 Eig (eV)= 7.6504436977030261
CG: eig# 1 it= 47 Eig (eV)= 7.6373997142617771
CG: eig# 1 it= 48 Eig (eV)= 7.6247420213187400
CG: eig# 1 it= 49 Eig (eV)= 7.6127311449768822
CG: eig# 1 it= 50 Eig (eV)= 7.6011063833704400
CG: eig# 1 it= 51 Eig (eV)= 7.5910985097485320
CG: eig# 1 it= 52 Eig (eV)= 7.5828986916159886
CG: eig# 1 it= 53 Eig (eV)= 7.5758527375412887
CG: eig# 1 it= 54 Eig (eV)= 7.5700748068932544
CG: eig# 1 it= 55 Eig (eV)= 7.5648614984924567
CG: eig# 1 it= 56 Eig (eV)= 7.5607550731318494
CG: eig# 1 it= 57 Eig (eV)= 7.5569226623318855
CG: eig# 1 it= 58 Eig (eV)= 7.5536293048568828
CG: eig# 1 it= 59 Eig (eV)= 7.5502629722053980
CG: eig# 1 it= 60 Eig (eV)= 7.5472894938344410
CG: eig# 1 it= 61 Eig (eV)= 7.5443990336863260
CG: eig# 1 it= 62 Eig (eV)= 7.5418368254496677
CG: eig# 1 it= 63 Eig (eV)= 7.5394373545101567
CG: eig# 1 it= 64 Eig (eV)= 7.5371775899831839
CG: eig# 1 it= 65 Eig (eV)= 7.5348914561509677
CG: eig# 1 it= 66 Eig (eV)= 7.5324890420974695
CG: eig# 1 it= 67 Eig (eV)= 7.5300620517835428
CG: eig# 1 it= 68 Eig (eV)= 7.5275276535672146
CG: eig# 1 it= 69 Eig (eV)= 7.5248618976905508
CG: eig# 1 it= 70 Eig (eV)= 7.5218282711725184
CG: eig# 1 it= 71 Eig (eV)= 7.5184909274005083
CG: eig# 1 it= 72 Eig (eV)= 7.5150565965956782
CG: eig# 1 it= 73 Eig (eV)= 7.5114039986654371
CG: eig# 1 it= 74 Eig (eV)= 7.5073858076198157
CG: eig# 1 it= 75 Eig (eV)= 7.5029494160676178
CG: eig# 1 it= 76 Eig (eV)= 7.4986293060352383
CG: eig# 1 it= 77 Eig (eV)= 7.4948975837011211
CG: eig# 1 it= 78 Eig (eV)= 7.4916631720520437
CG: eig# 1 it= 79 Eig (eV)= 7.4888163141824302
CG: eig# 1 it= 80 Eig (eV)= 7.4861178387527758
CG: eig# 1 it= 81 Eig (eV)= 7.4837321039923639
CG: eig# 1 it= 82 Eig (eV)= 7.4815618114690245
CG: eig# 1 it= 83 Eig (eV)= 7.4795246589896776
CG: eig# 1 it= 84 Eig (eV)= 7.4774909304060975
CG: eig# 1 it= 85 Eig (eV)= 7.4755506228108599
CG: eig# 1 it= 86 Eig (eV)= 7.4737144674776381
CG: eig# 1 it= 87 Eig (eV)= 7.4719889529884869
CG: eig# 1 it= 88 Eig (eV)= 7.4704111142587406
CG: eig# 1 it= 89 Eig (eV)= 7.4689081059053750
CG: eig# 1 it= 90 Eig (eV)= 7.4675228237037725
CG: eig# 1 it= 91 Eig (eV)= 7.4662084919409546
CG: eig# 1 it= 92 Eig (eV)= 7.4650338939993057
CG: eig# 1 it= 93 Eig (eV)= 7.4639820057242394
CG: eig# 1 it= 94 Eig (eV)= 7.4630351631868779
CG: eig# 1 it= 95 Eig (eV)= 7.4621619245012711
CG: eig# 1 it= 96 Eig (eV)= 7.4613374059020821
CG: eig# 1 it= 97 Eig (eV)= 7.4606313198918537
CG: eig# 1 it= 98 Eig (eV)= 7.4600182310518370
CG: eig# 1 it= 99 Eig (eV)= 7.4594997819568301
CG: eig# 1 it= 100 Eig (eV)= 7.4590095172630626
CG: eig# 1 it= 101 Eig (eV)= 7.4585917356416553
CG: eig# 1 it= 102 Eig (eV)= 7.4582419474490154
CG: eig# 1 it= 103 Eig (eV)= 7.4579846883518526
CG: eig# 1 it= 104 Eig (eV)= 7.4577845084996337
CG: eig# 1 it= 105 Eig (eV)= 7.4576237501179135
CG: eig# 1 it= 106 Eig (eV)= 7.4574924840355354
CG: eig# 1 it= 107 Eig (eV)= 7.4573901248674357
CG: eig# 1 it= 108 Eig (eV)= 7.4573122686943440
CG: eig# 1 it= 109 Eig (eV)= 7.4572464067884843
CG: eig# 1 it= 110 Eig (eV)= 7.4571897044093749
CG: eig# 1 it= 111 Eig (eV)= 7.4571395657073083
CG: eig# 1 it= 112 Eig (eV)= 7.4570976480555329
CG: eig# 1 it= 113 Eig (eV)= 7.4570612610299847
CG: eig# 1 it= 114 Eig (eV)= 7.4570293672173724
CG: eig# 1 it= 115 Eig (eV)= 7.4569993064488616
CG: eig# 1 it= 116 Eig (eV)= 7.4569703673633336
CG: eig# 1 it= 117 Eig (eV)= 7.4569409988986690
CG: eig# 1 it= 118 Eig (eV)= 7.4569120376528648
CG: eig# 1 it= 119 Eig (eV)= 7.4568829625720392
CG: eig# 1 it= 120 Eig (eV)= 7.4568534138833238
CG: eig# 1 it= 121 Eig (eV)= 7.4568207415622503
CG: eig# 1 it= 122 Eig (eV)= 7.4567872083084321
CG: eig# 1 it= 123 Eig (eV)= 7.4567527376021738
CG: eig# 1 it= 124 Eig (eV)= 7.4567177829715856
CG: eig# 1 it= 125 Eig (eV)= 7.4566806875174176
CG: eig# 1 it= 126 Eig (eV)= 7.4566405341687334
CG: eig# 1 it= 127 Eig (eV)= 7.4565974457588151
CG: eig# 1 it= 128 Eig (eV)= 7.4565505146004094
CG: eig# 1 it= 129 Eig (eV)= 7.4565006235256988
CG: eig# 1 it= 130 Eig (eV)= 7.4564461779654740
CG: eig# 1 it= 131 Eig (eV)= 7.4563893962989596
CG: eig# 1 it= 132 Eig (eV)= 7.4563286819639485
CG: eig# 1 it= 133 Eig (eV)= 7.4562724665988940
CG: eig# 1 it= 134 Eig (eV)= 7.4562184379863989
CG: eig# 1 it= 135 Eig (eV)= 7.4561688127318462
CG: eig# 1 it= 136 Eig (eV)= 7.4561192562932890
CG: eig# 1 it= 137 Eig (eV)= 7.4560717308537203
CG: eig# 1 it= 138 Eig (eV)= 7.4560260645396399
CG: eig# 1 it= 139 Eig (eV)= 7.4559833796493358
CG: eig# 1 it= 140 Eig (eV)= 7.4559419243227989
CG: eig# 1 it= 141 Eig (eV)= 7.4558990059280585
CG: eig# 1 it= 142 Eig (eV)= 7.4558552718476525
CG: eig# 1 it= 143 Eig (eV)= 7.4558155374202713
CG: eig# 1 it= 144 Eig (eV)= 7.4557800976342632
CG: eig# 1 it= 145 Eig (eV)= 7.4557474533341193
CG: eig# 1 it= 146 Eig (eV)= 7.4557168667083760
CG: eig# 1 it= 147 Eig (eV)= 7.4556869473683864
CG: eig# 1 it= 148 Eig (eV)= 7.4556578107848175
CG: eig# 1 it= 149 Eig (eV)= 7.4556284960647687
CG: eig# 1 it= 150 Eig (eV)= 7.4556005477853979
CG: eig# 1 it= 151 Eig (eV)= 7.4555725429572144
CG: eig# 1 it= 152 Eig (eV)= 7.4555453575860211
CG: eig# 1 it= 153 Eig (eV)= 7.4555188483841075
CG: eig# 1 it= 154 Eig (eV)= 7.4554934785572113
CG: eig# 1 it= 155 Eig (eV)= 7.4554681001372032
CG: eig# 1 it= 156 Eig (eV)= 7.4554413766015406
CG: eig# 1 it= 157 Eig (eV)= 7.4554124470666734
CG: eig# 1 it= 158 Eig (eV)= 7.4553831132352251
CG: eig# 1 it= 159 Eig (eV)= 7.4553534178940373
CG: eig# 1 it= 160 Eig (eV)= 7.4553258163188518
CG: eig# 1 it= 161 Eig (eV)= 7.4552990461322173
CG: eig# 1 it= 162 Eig (eV)= 7.4552727336564866
CG: eig# 1 it= 163 Eig (eV)= 7.4552456103969522
CG: eig# 1 it= 164 Eig (eV)= 7.4552192407767794
CG: eig# 1 it= 165 Eig (eV)= 7.4551936944170922
CG: eig# 1 it= 166 Eig (eV)= 7.4551675913359272
CG: eig# 1 it= 167 Eig (eV)= 7.4551403000009246
CG: eig# 1 it= 168 Eig (eV)= 7.4551118170445028
CG: eig# 1 it= 169 Eig (eV)= 7.4550820045703361
CG: eig# 1 it= 170 Eig (eV)= 7.4550487889743930
CG: eig# 1 it= 171 Eig (eV)= 7.4550117339915341
CG: eig# 1 it= 172 Eig (eV)= 7.4549709620035713
CG: eig# 1 it= 173 Eig (eV)= 7.4549285077986251
CG: eig# 1 it= 174 Eig (eV)= 7.4548823643671760
CG: eig# 1 it= 175 Eig (eV)= 7.4548362753937196
CG: eig# 1 it= 176 Eig (eV)= 7.4547888362105201
CG: eig# 1 it= 177 Eig (eV)= 7.4547382385603784
CG: eig# 1 it= 178 Eig (eV)= 7.4546810230171889
CG: eig# 1 it= 179 Eig (eV)= 7.4546178294909495
CG: eig# 1 it= 180 Eig (eV)= 7.4545475742871563
CG: eig# 1 it= 181 Eig (eV)= 7.4544578939055590
CG: eig# 1 it= 182 Eig (eV)= 7.4543431261389594
CG: eig# 1 it= 183 Eig (eV)= 7.4542069241138496
CG: eig# 1 it= 184 Eig (eV)= 7.4540547439935168
CG: eig# 1 it= 185 Eig (eV)= 7.4538724671336638
CG: eig# 1 it= 186 Eig (eV)= 7.4536434229555493
CG: eig# 1 it= 187 Eig (eV)= 7.4533606507299188
CG: eig# 1 it= 188 Eig (eV)= 7.4529992458480319
CG: eig# 1 it= 189 Eig (eV)= 7.4525552229277787
CG: eig# 1 it= 190 Eig (eV)= 7.4520119678995966
CG: eig# 1 it= 191 Eig (eV)= 7.4513700403470953
CG: eig# 1 it= 192 Eig (eV)= 7.4506619982040370
CG: eig# 1 it= 193 Eig (eV)= 7.4498982572360939
CG: eig# 1 it= 194 Eig (eV)= 7.4491027220854438
CG: eig# 1 it= 195 Eig (eV)= 7.4483306280771524
CG: eig# 1 it= 196 Eig (eV)= 7.4476118175208077
CG: eig# 1 it= 197 Eig (eV)= 7.4469413252071099
CG: eig# 1 it= 198 Eig (eV)= 7.4464001349543958
CG: eig# 1 it= 199 Eig (eV)= 7.4459284021543182
CG: eig# 1 it= 200 Eig (eV)= 7.4455784791951718
CG: eig# 1 it= 201 Eig (eV)= 7.4451873323093922
CG: eig# 1 it= 202 Eig (eV)= 7.4450618172986545
WARNING:I restart the cg
CG: eig# 1 it= 203 Eig (eV)= 7.4449142191766997
CG: eig# 1 it= 204 Eig (eV)= 7.4447729220827714
CG: eig# 1 it= 205 Eig (eV)= 7.4443086979811195
CG: eig# 1 it= 206 Eig (eV)= 7.4435024527712041
CG: eig# 1 it= 207 Eig (eV)= 7.4432491538714212
CG: eig# 1 it= 208 Eig (eV)= 7.4429726274781105
CG: eig# 1 it= 209 Eig (eV)= 7.4426704232657066
CG: eig# 1 it= 210 Eig (eV)= 7.4424207348336511
CG: eig# 1 it= 211 Eig (eV)= 7.4422513829860968
CG: eig# 1 it= 212 Eig (eV)= 7.4420961850591736
CG: eig# 1 it= 213 Eig (eV)= 7.4419722135300521
CG: eig# 1 it= 214 Eig (eV)= 7.4418772950913352
CG: eig# 1 it= 215 Eig (eV)= 7.4418049283422363
CG: eig# 1 it= 216 Eig (eV)= 7.4417389386902943
CG: eig# 1 it= 217 Eig (eV)= 7.4416784738156894
CG: eig# 1 it= 218 Eig (eV)= 7.4416328542226156
CG: eig# 1 it= 219 Eig (eV)= 7.4415891003864365
CG: eig# 1 it= 220 Eig (eV)= 7.4415485633107465
CG: eig# 1 it= 221 Eig (eV)= 7.4415097321497647
CG: eig# 1 it= 222 Eig (eV)= 7.4414744601275586
CG: eig# 1 it= 223 Eig (eV)= 7.4414448784464486
CG: eig# 1 it= 224 Eig (eV)= 7.4414176242190164
CG: eig# 1 it= 225 Eig (eV)= 7.4413925166960810
CG: eig# 1 it= 226 Eig (eV)= 7.4413666550741517
CG: eig# 1 it= 227 Eig (eV)= 7.4413438504635163
CG: eig# 1 it= 228 Eig (eV)= 7.4413254720983604
CG: eig# 1 it= 229 Eig (eV)= 7.4413080928863522
CG: eig# 1 it= 230 Eig (eV)= 7.4412927084445633
CG: eig# 1 it= 231 Eig (eV)= 7.4412778753911857
Conjugate gradient ended.
BSE COMPLETED
bse_main : 52.53s CPU 53.92s WALL ( 1 calls)
fft : 0.08s CPU 0.08s WALL ( 8 calls)
fftw : 18.74s CPU 18.94s WALL ( 4632 calls)
cft3t : 7.86s CPU 8.09s WALL ( 12752 calls)
davcio : 0.00s CPU 0.00s WALL ( 21 calls)
make_v_state : 0.00s CPU 0.00s WALL ( 1 calls)
make_c_state : 0.00s CPU 0.00s WALL ( 2 calls)
v_wfng_to_wf : 0.01s CPU 0.01s WALL ( 3 calls)
c_times_exc : 0.26s CPU 0.27s WALL ( 2316 calls)
pc_operator_ : 2.02s CPU 2.11s WALL ( 5560 calls)
sproduct_exc : 0.23s CPU 0.24s WALL ( 2775 calls)
normalize_ex : 0.03s CPU 0.03s WALL ( 696 calls)
pout_operato : 0.00s CPU 0.00s WALL ( 928 calls)
fft_a_exc : 8.33s CPU 8.75s WALL ( 2316 calls)
fftback_a_ex : 5.05s CPU 5.20s WALL ( 2316 calls)
urot_a : 1.54s CPU 1.63s WALL ( 4632 calls)
conjgrad : 52.17s CPU 53.52s WALL ( 1 calls)
linmin : 52.01s CPU 53.35s WALL ( 231 calls)
diago_exc : 26.90s CPU 27.25s WALL ( 1158 calls)
exchange_exc : 12.17s CPU 12.64s WALL ( 1158 calls)
exc_h_a : 51.28s CPU 52.60s WALL ( 1158 calls)
find_eig : 52.17s CPU 53.52s WALL ( 1 calls)
read_export : 0.03s CPU 0.03s WALL ( 1 calls)
rotate_wanni : 1.29s CPU 1.36s WALL ( 4632 calls)
read_wannier : 0.23s CPU 0.25s WALL ( 4632 calls)

View File

@ -0,0 +1,293 @@
Program PW4GWW v.6.6 starts on 21Nov2020 at 0:33:40
This program is part of the open-source Quantum ESPRESSO suite
for quantum simulation of materials; please cite
"P. Giannozzi et al., J. Phys.:Condens. Matter 21 395502 (2009);
"P. Giannozzi et al., J. Phys.:Condens. Matter 29 465901 (2017);
URL http://www.quantum-espresso.org",
in publications or presentations arising from this work. More details at
http://www.quantum-espresso.org/quote
Parallel version (MPI), running on 4 processors
MPI processes distributed on 1 nodes
R & G space division: proc/nbgrp/npool/nimage = 4
Reading xml data from directory:
/home/h05959je/Applications/Quantum_Espresso/latest/q-e/tempdir/SiH4.save/
file H.pbe-vbc.UPF: wavefunction(s) 0S renormalized
IMPORTANT: XC functional enforced from input :
Exchange-correlation= PBE
( 1 4 3 4 0 0 0)
Any further DFT definition will be discarded
Please, verify this is what you really want
Parallelization info
--------------------
sticks: dense smooth PW G-vecs: dense smooth PW
Min 1271 1271 317 68355 68355 8565
Max 1276 1276 322 68358 68358 8568
Sum 5097 5097 1281 273425 273425 34265
Reading collected, re-writing distributed wavefunctions
nkstot= 1
after first init
after g stuff
after wfc waves
after davcio
bravais-lattice index = 1
lattice parameter (alat) = 20.0000 a.u.
unit-cell volume = 8000.0000 (a.u.)^3
number of atoms/cell = 5
number of atomic types = 2
number of electrons = 8.00
number of Kohn-Sham states= 8
kinetic-energy cutoff = 40.0000 Ry
charge density cutoff = 160.0000 Ry
Exchange-correlation= PBE
( 1 4 3 4 0 0 0)
celldm(1)= 20.000000 celldm(2)= 0.000000 celldm(3)= 0.000000
celldm(4)= 0.000000 celldm(5)= 0.000000 celldm(6)= 0.000000
crystal axes: (cart. coord. in units of alat)
a(1) = ( 1.000000 0.000000 0.000000 )
a(2) = ( 0.000000 1.000000 0.000000 )
a(3) = ( 0.000000 0.000000 1.000000 )
reciprocal axes: (cart. coord. in units 2 pi/alat)
b(1) = ( 1.000000 0.000000 0.000000 )
b(2) = ( 0.000000 1.000000 0.000000 )
b(3) = ( 0.000000 0.000000 1.000000 )
PseudoPot. # 1 for H read from file:
/home/h05959je/Applications/Quantum_Espresso/latest/q-e/pseudo/H.pbe-vbc.UPF
MD5 check sum: 65927ac6c32861be1224e6d13a099887
Pseudo is Norm-conserving, Zval = 1.0
Generated by new atomic code, or converted to UPF format
Using radial grid of 325 points, 0 beta functions with:
PseudoPot. # 2 for Si read from file:
/home/h05959je/Applications/Quantum_Espresso/latest/q-e/pseudo/Si.pbe-rrkj.UPF
MD5 check sum: 8af8e7039d270e0118f3b3651cf51d3d
Pseudo is Norm-conserving, Zval = 4.0
Generated by new atomic code, or converted to UPF format
Using radial grid of 883 points, 3 beta functions with:
l(1) = 0
l(2) = 0
l(3) = 1
atomic species valence mass pseudopotential
H 1.00 1.00000 H ( 1.00)
Si 4.00 28.00000 Si( 1.00)
24 Sym. Ops. (no inversion) found
Cartesian axes
site n. atom positions (alat units)
1 Si tau( 1) = ( 0.0000000 0.0000000 0.0000000 )
2 H tau( 2) = ( 0.0813801 0.0813801 0.0813801 )
3 H tau( 3) = ( -0.0813801 -0.0813801 0.0813801 )
4 H tau( 4) = ( -0.0813801 0.0813801 -0.0813801 )
5 H tau( 5) = ( 0.0813801 -0.0813801 -0.0813801 )
number of k points= 1
cart. coord. in units 2pi/alat
k( 1) = ( 0.0000000 0.0000000 0.0000000), wk = 2.0000000
Dense grid: 136713 G-vectors FFT dimensions: ( 81, 81, 81)
k = 0.0000 0.0000 0.0000 band energies (ev):
-13.1411 -8.2235 -8.2235 -8.2235 -0.4686 0.2367 0.2367 0.2367
highest occupied, lowest unoccupied level (ev): -8.2235 -0.4686
MAX_NGM: 4283 34178
KS energy: 1 -13.140966578109767
KS energy: 2 -8.2233276299978257
KS energy: 3 -8.2233365853357245
KS energy: 4 -8.2233276303316760
KS energy: 5 -0.46864722548946491
KS energy: 6 0.23672265435427392
KS energy: 7 0.23673893620010142
KS energy: 8 0.23674455726551508
Routine energies_xc : 1 -11.178344520560517
Routine energies_xc : 2 -11.245118798391397
Routine energies_xc : 3 -11.245113399587716
Routine energies_xc : 4 -11.245124650622815
Routine energies_xc : 5 -2.1201068889032384
Routine energies_xc : 6 -5.8791622516254307
Routine energies_xc : 7 -5.8768309114446691
Routine energies_xc : 8 -5.8733483707284249
Routine energies_h : 1 48.688276023848211
Routine energies_h : 2 44.721420564987014
Routine energies_h : 3 44.721408900874238
Routine energies_h : 4 44.721435093990195
Routine energies_h : 5 7.5283167602632561
Routine energies_h : 6 26.960671456213223
Routine energies_h : 7 26.949576211545775
Routine energies_h : 8 26.932876766487766
stop_clock: clock # 14 for h_psi not running
Transform to real wfcs
MATRIX BIG1
NRS 81 81 81
NRXS 81 81 81
Calculate grid
MATRIX BIG2
MATRIX IIW 1
MATRIX JJW 1
Calculate US
Out of matrix_wannier_gamma_big
LOCALIZING WANNIER FUNCTIONS:
Spread 429.66776443120870 380.71937246382919
Spread 432.83632681016940 429.66776443120870
Spread 432.86075086835973 432.83632681016940
Spread 432.86075278536617 432.86075086835973
Spread 432.86075278554688 432.86075278536617
Center Wannier: 1.2512605038770443 18.748739109075352 18.748739109075352
Center Wannier: 18.748740481971389 1.2512589760550519 1.2512589760550519
Center Wannier: 1.2512599553327064 1.2512606781865674 1.2512606781865674
Center Wannier: 18.748740445445677 18.748742485853835 18.748742485853835
USE RESTART: 3 LANCZOS_RESTART /=2,3
USE RESTART: 4 LANCZOS_RESTART /=2,3
USE RESTART: 5 LANCZOS_RESTART /=2,3
Call initialize_fft_custom
45 45 45
45 45 45
Planes per process (custom) : nr3t = 45 nr3p = 12 ncplane = 2025
Proc/ planes cols G
1 12 317 8565
2 11 320 8568
3 11 322 8566
4 11 322 8566
tot 45 1281 34265
iv,jv,o_mat 1 1 229.98343470967384
iv,jv,o_mat 1 2 7.1455327636224304
iv,jv,o_mat 1 3 7.1454597815006897
iv,jv,o_mat 1 4 7.1455143097042093
iv,jv,o_mat 2 1 7.1455327636224304
iv,jv,o_mat 2 2 229.98361568456679
iv,jv,o_mat 2 3 7.1455186248734961
iv,jv,o_mat 2 4 7.1456222626177643
iv,jv,o_mat 3 1 7.1454597815006897
iv,jv,o_mat 3 2 7.1455186248734961
iv,jv,o_mat 3 3 229.98362599700019
iv,jv,o_mat 3 4 7.1455095589769204
iv,jv,o_mat 4 1 7.1455143097042093
iv,jv,o_mat 4 2 7.1456222626177643
iv,jv,o_mat 4 3 7.1455095589769204
iv,jv,o_mat 4 4 229.98291347427346
bse ii found= 16
max_ngm= 4283
npw= 4283
Note: we have changed pmat_type on the fly!
CGSOLVE ww PAIR: 1
iter # 0 u_u = 0.5219E-01
iter # 1 u_u = 0.3587E-02
iter # 2 u_u = 0.8483E-04
iter # 3 u_u = 0.4610E-05
iter # 4 u_u = 0.3951E-06
stop_clock: clock # 24 for cgsolve not running
CGSOLVE ww PAIR: 2
iter # 0 u_u = 0.8422E-04
iter # 1 u_u = 0.2375E-05
iter # 2 u_u = 0.2843E-07
stop_clock: clock # 24 for cgsolve not running
CGSOLVE ww PAIR: 3
iter # 0 u_u = 0.8422E-04
iter # 1 u_u = 0.2375E-05
iter # 2 u_u = 0.2843E-07
stop_clock: clock # 24 for cgsolve not running
CGSOLVE ww PAIR: 4
iter # 0 u_u = 0.8422E-04
iter # 1 u_u = 0.2375E-05
iter # 2 u_u = 0.2843E-07
stop_clock: clock # 24 for cgsolve not running
CGSOLVE ww PAIR: 5
iter # 0 u_u = 0.8422E-04
iter # 1 u_u = 0.2375E-05
iter # 2 u_u = 0.2843E-07
stop_clock: clock # 24 for cgsolve not running
CGSOLVE ww PAIR: 6
iter # 0 u_u = 0.5219E-01
iter # 1 u_u = 0.3795E-02
iter # 2 u_u = 0.7269E-04
iter # 3 u_u = 0.3723E-05
iter # 4 u_u = 0.3478E-06
stop_clock: clock # 24 for cgsolve not running
CGSOLVE ww PAIR: 7
iter # 0 u_u = 0.8422E-04
iter # 1 u_u = 0.1253E-05
iter # 2 u_u = 0.2759E-07
stop_clock: clock # 24 for cgsolve not running
CGSOLVE ww PAIR: 8
iter # 0 u_u = 0.8422E-04
iter # 1 u_u = 0.1253E-05
iter # 2 u_u = 0.2759E-07
stop_clock: clock # 24 for cgsolve not running
CGSOLVE ww PAIR: 9
iter # 0 u_u = 0.8422E-04
iter # 1 u_u = 0.2375E-05
iter # 2 u_u = 0.2843E-07
stop_clock: clock # 24 for cgsolve not running
CGSOLVE ww PAIR: 10
iter # 0 u_u = 0.8422E-04
iter # 1 u_u = 0.1253E-05
iter # 2 u_u = 0.2759E-07
stop_clock: clock # 24 for cgsolve not running
CGSOLVE ww PAIR: 11
iter # 0 u_u = 0.5219E-01
iter # 1 u_u = 0.3795E-02
iter # 2 u_u = 0.7269E-04
iter # 3 u_u = 0.3723E-05
iter # 4 u_u = 0.3478E-06
stop_clock: clock # 24 for cgsolve not running
CGSOLVE ww PAIR: 12
iter # 0 u_u = 0.8422E-04
iter # 1 u_u = 0.1253E-05
iter # 2 u_u = 0.2759E-07
stop_clock: clock # 24 for cgsolve not running
CGSOLVE ww PAIR: 13
iter # 0 u_u = 0.8422E-04
iter # 1 u_u = 0.2375E-05
iter # 2 u_u = 0.2843E-07
stop_clock: clock # 24 for cgsolve not running
CGSOLVE ww PAIR: 14
iter # 0 u_u = 0.8422E-04
iter # 1 u_u = 0.1253E-05
iter # 2 u_u = 0.2759E-07
stop_clock: clock # 24 for cgsolve not running
CGSOLVE ww PAIR: 15
iter # 0 u_u = 0.8422E-04
iter # 1 u_u = 0.1253E-05
iter # 2 u_u = 0.2759E-07
stop_clock: clock # 24 for cgsolve not running
CGSOLVE ww PAIR: 16
iter # 0 u_u = 0.5219E-01
iter # 1 u_u = 0.3795E-02
iter # 2 u_u = 0.7269E-04
iter # 3 u_u = 0.3723E-05
iter # 4 u_u = 0.3478E-06
stop_clock: clock # 24 for cgsolve not running
files closed
PW4GWW COMPLETED
produce_wann : 11.53s CPU 11.91s WALL ( 1 calls)
cft3t : 0.01s CPU 0.01s WALL ( 18 calls)
h_psi : 6.67s CPU 6.80s WALL ( 332 calls)
fft : 0.14s CPU 0.14s WALL ( 14 calls)
fftw : 7.50s CPU 7.67s WALL ( 1814 calls)
davcio : 0.02s CPU 0.03s WALL ( 92 calls)

View File

@ -0,0 +1,290 @@
Program PWSCF v.6.6 starts on 21Nov2020 at 0:33:35
This program is part of the open-source Quantum ESPRESSO suite
for quantum simulation of materials; please cite
"P. Giannozzi et al., J. Phys.:Condens. Matter 21 395502 (2009);
"P. Giannozzi et al., J. Phys.:Condens. Matter 29 465901 (2017);
URL http://www.quantum-espresso.org",
in publications or presentations arising from this work. More details at
http://www.quantum-espresso.org/quote
Parallel version (MPI), running on 4 processors
MPI processes distributed on 1 nodes
R & G space division: proc/nbgrp/npool/nimage = 4
Waiting for input...
Reading input from standard input
Current dimensions of program PWSCF are:
Max number of different atomic species (ntypx) = 10
Max number of k-points (npk) = 40000
Max angular momentum in pseudopotentials (lmaxx) = 3
file H.pbe-vbc.UPF: wavefunction(s) 0S renormalized
gamma-point specific algorithms are used
Subspace diagonalization in iterative solution of the eigenvalue problem:
a serial algorithm will be used
Parallelization info
--------------------
sticks: dense smooth PW G-vecs: dense smooth PW
Min 1271 1271 317 68355 68355 8565
Max 1276 1276 322 68358 68358 8568
Sum 5097 5097 1281 273425 273425 34265
bravais-lattice index = 1
lattice parameter (alat) = 20.0000 a.u.
unit-cell volume = 8000.0000 (a.u.)^3
number of atoms/cell = 5
number of atomic types = 2
number of electrons = 8.00
number of Kohn-Sham states= 8
kinetic-energy cutoff = 40.0000 Ry
charge density cutoff = 160.0000 Ry
convergence threshold = 1.0E-08
mixing beta = 0.5000
number of iterations used = 8 plain mixing
Exchange-correlation= SLA PW PBE PBE
( 1 4 3 4 0 0 0)
celldm(1)= 20.000000 celldm(2)= 0.000000 celldm(3)= 0.000000
celldm(4)= 0.000000 celldm(5)= 0.000000 celldm(6)= 0.000000
crystal axes: (cart. coord. in units of alat)
a(1) = ( 1.000000 0.000000 0.000000 )
a(2) = ( 0.000000 1.000000 0.000000 )
a(3) = ( 0.000000 0.000000 1.000000 )
reciprocal axes: (cart. coord. in units 2 pi/alat)
b(1) = ( 1.000000 0.000000 0.000000 )
b(2) = ( 0.000000 1.000000 0.000000 )
b(3) = ( 0.000000 0.000000 1.000000 )
PseudoPot. # 1 for H read from file:
/home/h05959je/Applications/Quantum_Espresso/latest/q-e/pseudo/H.pbe-vbc.UPF
MD5 check sum: 65927ac6c32861be1224e6d13a099887
Pseudo is Norm-conserving, Zval = 1.0
Generated by new atomic code, or converted to UPF format
Using radial grid of 325 points, 0 beta functions with:
PseudoPot. # 2 for Si read from file:
/home/h05959je/Applications/Quantum_Espresso/latest/q-e/pseudo/Si.pbe-rrkj.UPF
MD5 check sum: 8af8e7039d270e0118f3b3651cf51d3d
Pseudo is Norm-conserving, Zval = 4.0
Generated by new atomic code, or converted to UPF format
Using radial grid of 883 points, 3 beta functions with:
l(1) = 0
l(2) = 0
l(3) = 1
atomic species valence mass pseudopotential
H 1.00 1.00000 H ( 1.00)
Si 4.00 28.00000 Si( 1.00)
24 Sym. Ops. (no inversion) found
Cartesian axes
site n. atom positions (alat units)
1 Si tau( 1) = ( 0.0000000 0.0000000 0.0000000 )
2 H tau( 2) = ( 0.0813801 0.0813801 0.0813801 )
3 H tau( 3) = ( -0.0813801 -0.0813801 0.0813801 )
4 H tau( 4) = ( -0.0813801 0.0813801 -0.0813801 )
5 H tau( 5) = ( 0.0813801 -0.0813801 -0.0813801 )
number of k points= 1
cart. coord. in units 2pi/alat
k( 1) = ( 0.0000000 0.0000000 0.0000000), wk = 2.0000000
Dense grid: 136713 G-vectors FFT dimensions: ( 81, 81, 81)
Estimated max dynamical RAM per process > 26.96 MB
Estimated total dynamical RAM > 107.82 MB
Initial potential from superposition of free atoms
starting charge 7.99939, renormalised to 8.00000
negative rho (up, down): 1.088E-03 0.000E+00
Starting wfcs are 8 randomized atomic wfcs
total cpu time spent up to now is 0.4 secs
Self-consistent Calculation
iteration # 1 ecut= 40.00 Ry beta= 0.50
CG style diagonalization
ethr = 1.00E-02, avg # of iterations = 3.8
negative rho (up, down): 5.098E-04 0.000E+00
total cpu time spent up to now is 0.9 secs
total energy = -12.49969421 Ry
estimated scf accuracy < 0.26447220 Ry
iteration # 2 ecut= 40.00 Ry beta= 0.50
CG style diagonalization
ethr = 3.31E-03, avg # of iterations = 3.0
negative rho (up, down): 9.757E-05 0.000E+00
total cpu time spent up to now is 1.4 secs
total energy = -12.49578462 Ry
estimated scf accuracy < 0.04410172 Ry
iteration # 3 ecut= 40.00 Ry beta= 0.50
CG style diagonalization
ethr = 5.51E-04, avg # of iterations = 4.4
negative rho (up, down): 3.952E-05 0.000E+00
total cpu time spent up to now is 1.9 secs
total energy = -12.50106436 Ry
estimated scf accuracy < 0.00023043 Ry
iteration # 4 ecut= 40.00 Ry beta= 0.50
CG style diagonalization
ethr = 2.88E-06, avg # of iterations = 6.5
negative rho (up, down): 1.483E-05 0.000E+00
total cpu time spent up to now is 2.7 secs
total energy = -12.50154342 Ry
estimated scf accuracy < 0.00012972 Ry
iteration # 5 ecut= 40.00 Ry beta= 0.50
CG style diagonalization
ethr = 1.62E-06, avg # of iterations = 3.1
negative rho (up, down): 9.747E-08 0.000E+00
total cpu time spent up to now is 3.1 secs
total energy = -12.50156119 Ry
estimated scf accuracy < 0.00001708 Ry
iteration # 6 ecut= 40.00 Ry beta= 0.50
CG style diagonalization
ethr = 2.13E-07, avg # of iterations = 3.0
total cpu time spent up to now is 3.6 secs
total energy = -12.50156099 Ry
estimated scf accuracy < 0.00000256 Ry
iteration # 7 ecut= 40.00 Ry beta= 0.50
CG style diagonalization
ethr = 3.20E-08, avg # of iterations = 3.2
total cpu time spent up to now is 4.1 secs
total energy = -12.50156140 Ry
estimated scf accuracy < 0.00000003 Ry
iteration # 8 ecut= 40.00 Ry beta= 0.50
CG style diagonalization
ethr = 3.66E-10, avg # of iterations = 3.6
total cpu time spent up to now is 4.6 secs
total energy = -12.50156144 Ry
estimated scf accuracy < 0.00000002 Ry
iteration # 9 ecut= 40.00 Ry beta= 0.50
CG style diagonalization
ethr = 2.06E-10, avg # of iterations = 3.2
total cpu time spent up to now is 5.0 secs
End of self-consistent calculation
k = 0.0000 0.0000 0.0000 ( 17133 PWs) bands (ev):
-13.1411 -8.2235 -8.2235 -8.2235 -0.4686 0.2367 0.2367 0.2367
highest occupied, lowest unoccupied level (ev): -8.2235 -0.4686
! total energy = -12.50156144 Ry
estimated scf accuracy < 1.9E-09 Ry
The total energy is the sum of the following terms:
one-electron contribution = -25.83474374 Ry
hartree contribution = 13.43941385 Ry
xc contribution = -5.11522157 Ry
ewald contribution = 5.00899002 Ry
convergence has been achieved in 9 iterations
Forces acting on atoms (cartesian axes, Ry/au):
atom 1 type 2 force = 0.00000000 0.00000000 0.00000000
atom 2 type 1 force = 0.00144831 0.00144831 0.00144831
atom 3 type 1 force = -0.00144831 -0.00144831 0.00144831
atom 4 type 1 force = -0.00144831 0.00144831 -0.00144831
atom 5 type 1 force = 0.00144831 -0.00144831 -0.00144831
Total force = 0.005017 Total SCF correction = 0.000004
Writing output data file /home/h05959je/Applications/Quantum_Espresso/latest/q-e/tempdir/SiH4.save/
init_run : 0.30s CPU 0.32s WALL ( 1 calls)
electrons : 4.54s CPU 4.66s WALL ( 1 calls)
forces : 0.08s CPU 0.09s WALL ( 1 calls)
Called by init_run:
wfcinit : 0.06s CPU 0.06s WALL ( 1 calls)
potinit : 0.17s CPU 0.19s WALL ( 1 calls)
hinit0 : 0.04s CPU 0.04s WALL ( 1 calls)
Called by electrons:
c_bands : 2.56s CPU 2.61s WALL ( 9 calls)
sum_band : 0.46s CPU 0.47s WALL ( 9 calls)
v_of_rho : 1.37s CPU 1.45s WALL ( 10 calls)
mix_rho : 0.22s CPU 0.22s WALL ( 9 calls)
Called by c_bands:
init_us_2 : 0.02s CPU 0.02s WALL ( 19 calls)
rcgdiagg : 2.21s CPU 2.24s WALL ( 9 calls)
wfcrot : 0.40s CPU 0.41s WALL ( 9 calls)
Called by *cgdiagg:
h_psi : 2.50s CPU 2.54s WALL ( 216 calls)
Called by h_psi:
h_psi:calbec : 0.05s CPU 0.05s WALL ( 216 calls)
vloc_psi : 2.42s CPU 2.46s WALL ( 216 calls)
add_vuspsi : 0.02s CPU 0.02s WALL ( 216 calls)
hs_1psi : 2.12s CPU 2.15s WALL ( 207 calls)
s_1psi : 0.02s CPU 0.02s WALL ( 207 calls)
General routines
calbec : 0.06s CPU 0.06s WALL ( 427 calls)
fft : 0.80s CPU 0.84s WALL ( 81 calls)
ffts : 0.11s CPU 0.11s WALL ( 9 calls)
fftw : 2.15s CPU 2.18s WALL ( 522 calls)
Parallel routines
fft_scatt_xy : 0.56s CPU 0.57s WALL ( 612 calls)
fft_scatt_yz : 0.51s CPU 0.54s WALL ( 612 calls)
PWSCF : 4.96s CPU 5.11s WALL
This run was terminated on: 0:33:40 21Nov2020
=------------------------------------------------------------------------------=
JOB DONE.
=------------------------------------------------------------------------------=

View File

@ -0,0 +1,192 @@
#!/bin/sh
# run from directory where this script is
cd `echo $0 | sed 's/\(.*\)\/.*/\1/'` # extract pathname
EXAMPLE_DIR=`pwd`
# check whether echo has the -e option
if test "`echo -e`" = "-e" ; then ECHO=echo ; else ECHO="echo -e" ; fi
$ECHO
$ECHO "$EXAMPLE_DIR : starting"
$ECHO
$ECHO "This example shows how to use pw.x pw4gww.x & bse.x to calculate"
$ECHO "the excitonic state with iterative W(r,r')w_v(r)w_v'(r') scheme"
# set the needed environment variables
. ../../../environment_variables
# required executables and pseudopotentials
BIN_LIST="pw.x pw4gww.x bse_main.x"
PSEUDO_LIST="Si.pbe-rrkj.UPF H.pbe-vbc.UPF"
$ECHO
$ECHO " executables directory: $BIN_DIR"
$ECHO " pseudo directory: $PSEUDO_DIR"
$ECHO " temporary directory: $TMP_DIR"
$ECHO " checking that needed directories and files exist...\c"
# check for directories
for DIR in "$BIN_DIR" "$PSEUDO_DIR" ; do
if test ! -d $DIR ; then
$ECHO
$ECHO "ERROR: $DIR not existent or not a directory"
$ECHO "Aborting"
exit 1
fi
done
for DIR in "$TMP_DIR" "$EXAMPLE_DIR/results" ; do
if test ! -d $DIR ; then
mkdir $DIR
fi
done
cd $EXAMPLE_DIR/results
# check for executables
for FILE in $BIN_LIST ; do
if test ! -x $BIN_DIR/$FILE ; then
$ECHO
$ECHO "ERROR: $BIN_DIR/$FILE not existent or not executable"
$ECHO "Aborting"
exit 1
fi
done
# check for pseudopotentials
for FILE in $PSEUDO_LIST ; do
if test ! -r $PSEUDO_DIR/$FILE ; then
$ECHO
$ECHO "Downloading $FILE to $PSEUDO_DIR...\c"
$WGET $PSEUDO_DIR/$FILE $NETWORK_PSEUDO/$FILE 2> /dev/null
fi
if test $? != 0; then
$ECHO
$ECHO "ERROR: $PSEUDO_DIR/$FILE not existent or not readable"
$ECHO "Aborting"
exit 1
fi
done
$ECHO " done"
# how to run executables
PW_COMMAND="$PARA_PREFIX $BIN_DIR/pw.x $PARA_POSTFIX"
$ECHO
$ECHO " running pw.x as: $PW_COMMAND"
$ECHO
PW4GWW_COMMAND="$PARA_PREFIX $BIN_DIR/pw4gww.x $PARA_POSTFIX"
$ECHO
$ECHO " running pw4gww.x as: $PW4GWW_COMMAND"
$ECHO
BSE_COMMAND="$PARA_PREFIX $BIN_DIR/bse_main.x $PARA_POSTFIX"
$ECHO
$ECHO " running bse.x as: $BSE_COMMAND"
$ECHO
# self-consistent calculation
cat > silane_scf.in << EOF
&control
calculation = 'scf',
restart_mode='from_scratch',
prefix='SiH4',
tprnfor = .true.,
pseudo_dir = '$PSEUDO_DIR/',
outdir='$TMP_DIR/'
/
&system
ibrav = 1,
celldm(1) = 20.0,
nat = 5,
ntyp = 2,
ecutwfc = 40.0,
nbnd = 8
/
&electrons
diagonalization = 'cg'
mixing_beta = 0.5,
conv_thr = 1.0d-8
/
ATOMIC_SPECIES
H 1.0 H.pbe-vbc.UPF
Si 28.0 Si.pbe-rrkj.UPF
ATOMIC_POSITIONS {angstrom}
Si 0.000000000 0.000000000 0.000000000
H 0.861290004 0.861290004 0.861290004
H -0.861290004 -0.861290004 0.861290004
H -0.861290004 0.861290004 -0.861290004
H 0.861290004 -0.861290004 -0.861290004
K_POINTS {gamma}
EOF
$ECHO " running the scf calculation for Silane...\c"
$PW_COMMAND < silane_scf.in > silane_scf.out
check_failure $?
$ECHO " done"
#
cat > silane_pw4gww.in << EOF
&inputpw4gww
prefix='SiH4'
num_nbndv(1)=4
num_nbnds=8
l_truncated_coulomb=.true.
truncation_radius=10.d0
!numw_prod=50
l_bse=.true.
l_no_GW_just_screening=.true.
l_no_GW_bare_coulomb=.false.
no_GW_cg_maxit = 10
no_GW_cg_threshold = 5.D-7
pseudo_dir = '$PSEUDO_DIR/',
outdir='$TMP_DIR/'
/
EOF
$ECHO " running the pw4gww calculation for silane...\c"
$PW4GWW_COMMAND < silane_pw4gww.in > silane_pw4gww.out
check_failure $?
$ECHO " done"
cat > $TMP_DIR/SiH4-bands.dat << EOF
5
1
1 -16.61249 -20.44779 -20.21290 -25.31691
2 -9.11165 -13.67612 -13.59143 -14.42309
3 -9.11165 -13.67021 -13.58364 -14.42309
4 -9.11165 -13.67111 -13.58495 -14.42309
5 -0.56519 0.21252 0.21196 0.90046
EOF
#
cat > silane_bse.in << EOF
&inputbse
prefix='SiH4'
outdir='$TMP_DIR/'
num_nbndv(1)=4
numw_prod=50
n_eig=1
l_truncated_coulomb=.true.
truncation_radius=10.d0
lambda=1.d0
eps=1.d-4
eps_eig=1.d-5
lm_delta=2.d0
l_scissor=.false.
qpe_imin=1
qpe_imax=5
scissor=0.0d0
dual_bse=1.d0
l_read_www=.true.
l_contraction=.false.
/
EOF
$ECHO " running the bse calculation for Silane...\c"
$BSE_COMMAND < silane_bse.in > silane_bse.out
check_failure $?
$ECHO " done"
# clean TMP_DIR
$ECHO " cleaning $TMP_DIR...\c"
rm -rf $TMP_DIR/SiH4*
$ECHO " done"
$ECHO
$ECHO "$EXAMPLE_DIR : done"

View File

@ -1,5 +1,6 @@
# Makefile for pw4gww (PW4GWW)
# Author G. Stenuit and L. Martin-Samos
# Modified Joshua Elliott November 2020 as JDE
include ../../make.inc
@ -44,7 +45,9 @@ mp_wave_parallel.o \
wannier_bse.o\
hpsi_pw4gww.o \
cgsolve_all_gamma.o \
realus.o
realus.o \
operator_1_vp.o \
operator_debug.o
QEMODS = ../../Modules/libqemod.a ../../upflib/libupf.a \
../../KS_Solvers/libks_solvers.a \
@ -52,16 +55,17 @@ QEMODS = ../../Modules/libqemod.a ../../upflib/libupf.a \
../../UtilXlib/libutil.a ../../dft-d3/libdftd3qe.a
# dft-d3 required by xlf for obscure reasons
PWOBJS = ../../PW/src/libpw.a
PHOBJS = ../../PHonon/Gamma/libphcg.a
LIBMIN=
TLDEPS= phlibs
TLDEPS= phlibs
all : tldeps pw4gww.x
pw4gww.x : pw4gww.o libpw4gww.a $(PW4GWWOBJS) $(PWOBJS) $(QEMODS) $(LIBOBJS) $(LIBMIN)
$(LD) $(LDFLAGS) -o $@ \
pw4gww.o libpw4gww.a $(PWOBJS) $(QEMODS) $(LIBOBJS) $(LIBMIN) $(QELIBS)
pw4gww.o libpw4gww.a $(PWOBJS) $(PHOBJS) $(QEMODS) $(LIBOBJS) $(LIBMIN) $(QELIBS)
- ( cd ../../bin ; ln -fs ../GWW/pw4gww/$@ . )
tldeps :

View File

@ -117,7 +117,8 @@ fake_conduction.o : ../../UtilXlib/mp.o
fake_conduction.o : ../../upflib/uspp.o
fake_conduction.o : fft_custom.o
fake_conduction.o : mp_wave_parallel.o
fft_custom.o : ../../FFTXlib/fft_interfaces.o
fft_custom.o : ../../FFTXlib/fft_parallel.o
fft_custom.o : ../../FFTXlib/fft_scalar.o
fft_custom.o : ../../FFTXlib/fft_support.o
fft_custom.o : ../../FFTXlib/fft_types.o
fft_custom.o : ../../FFTXlib/stick_base.o
@ -216,6 +217,35 @@ openfil_pw4gww.o : ../../PW/src/atomic_wfc_mod.o
openfil_pw4gww.o : ../../PW/src/ldaU.o
openfil_pw4gww.o : ../../PW/src/pwcom.o
openfil_pw4gww.o : ../../upflib/uspp.o
operator_1_vp.o : ../../FFTXlib/fft_interfaces.o
operator_1_vp.o : ../../Modules/becmod.o
operator_1_vp.o : ../../Modules/cell_base.o
operator_1_vp.o : ../../Modules/constants.o
operator_1_vp.o : ../../Modules/fft_base.o
operator_1_vp.o : ../../Modules/io_global.o
operator_1_vp.o : ../../Modules/kind.o
operator_1_vp.o : ../../Modules/mp_world.o
operator_1_vp.o : ../../Modules/recvec.o
operator_1_vp.o : ../../Modules/wannier_gw.o
operator_1_vp.o : ../../Modules/wavefunctions.o
operator_1_vp.o : ../../PW/src/g_psi_mod.o
operator_1_vp.o : ../../PW/src/pwcom.o
operator_1_vp.o : ../../UtilXlib/mp.o
operator_1_vp.o : ../../upflib/uspp.o
operator_debug.o : ../../FFTXlib/fft_interfaces.o
operator_debug.o : ../../Modules/becmod.o
operator_debug.o : ../../Modules/cell_base.o
operator_debug.o : ../../Modules/constants.o
operator_debug.o : ../../Modules/fft_base.o
operator_debug.o : ../../Modules/io_global.o
operator_debug.o : ../../Modules/kind.o
operator_debug.o : ../../Modules/mp_world.o
operator_debug.o : ../../Modules/recvec.o
operator_debug.o : ../../Modules/wannier_gw.o
operator_debug.o : ../../PW/src/g_psi_mod.o
operator_debug.o : ../../PW/src/pwcom.o
operator_debug.o : ../../UtilXlib/mp.o
operator_debug.o : ../../upflib/uspp.o
optimal.o : ../../Modules/io_global.o
optimal.o : ../../Modules/kind.o
optimal.o : ../../Modules/mp_world.o

View File

@ -565,7 +565,7 @@ SUBROUTINE o_1psi_gamma( numv, v_states, psi, opsi,l_freq,hdiag, ptype,fcw_numbe
call stop_clock('opsi_pc')
enddo
write(stdout,*) 'DEBUG1'
! write(stdout,*) 'DEBUG1'
FLUSH(stdout)
!call (H-e)^-1 solver
if(.true.) then
@ -573,13 +573,13 @@ SUBROUTINE o_1psi_gamma( numv, v_states, psi, opsi,l_freq,hdiag, ptype,fcw_numbe
else
psi_g2(1:npw,1:numv)=tmp_psi(1:npw,1:numv)
endif
write(stdout,*) 'DEBUG1.5'
! write(stdout,*) 'DEBUG1.5'
FLUSH(stdout)
call cgsolve_all_gamma (hpsi_pw4gww,cg_psi_pw4gww,et(1,1),psi_g,psi_g2, &
h_diag,npw,npw,ethr,1,kter,lconv_root,anorm,numv,1)
tmp_psi(1:npw,1:numv)=psi_g2(1:npw,1:numv)
write(stdout,*) 'DEBUG2',kter,lconv_root,anorm
! write(stdout,*) 'DEBUG2',kter,lconv_root,anorm
FLUSH(stdout)

View File

@ -0,0 +1,114 @@
!
! Copyright (C) 2001-2020 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 .
!
!
! Written by Joshua Elliott JDE
!
! This subroutine computes the operator (1-vP) for overlapping
! wannier functions
!
SUBROUTINE operator_1_vp(npw, e, x, u)
USE wannier_gw
USE gvect
USE becmod, ONLY : becp,allocate_bec_type,deallocate_bec_type
USE cell_base, ONLY : at, alat, tpiba, omega, tpiba2
USE constants, ONLY : e2, pi, tpi, fpi
USE fft_base, ONLY : dfftp, dffts
USE fft_interfaces, ONLY : fwfft, invfft
USE g_psi_mod, ONLY : h_diag, s_diag
USE gvecs, ONLY : doublegrid
USE io_global, ONLY : stdout, ionode, ionode_id
USE kinds, ONLY : DP
USE klist, ONLY : xk,igk_k
USE mp, ONLY : mp_sum, mp_barrier, mp_bcast
USE mp_world, ONLY : world_comm, mpime, nproc
USE uspp, ONLY : vkb, nkb, okvan
USE wvfct, ONLY : g2kin, npwx, nbnd, et
USE wavefunctions, ONLY : evc
IMPLICIT NONE
! Dummy Variables
INTEGER :: npw
REAL(KIND=DP) :: e ! eigenvalue (needed for call not used)
COMPLEX(KIND=DP) :: x(npw), u(npw,1) ! Upon call should contain v_c|x>
! variables for computing bare Coulomb interaction
REAL(KIND=DP), ALLOCATABLE :: fac(:)
REAL(KIND=DP) :: qq
INTEGER :: ig
! variables for computing P|x> = |op_x>
COMPLEX(KIND=DP), ALLOCATABLE :: op_x(:)
COMPLEX(KIND=DP), ALLOCATABLE :: ovp_x(:)
COMPLEX(KIND=DP), ALLOCATABLE :: fcw_state(:,:) ! Only needed for call, not used
REAL(KIND=DP), ALLOCATABLE :: hdiag(:) ! Only needed for call, not used (pmat_type=2)
REAL(KIND=DP), ALLOCATABLE :: fcw_mat(:,:) ! Only needed for call, not used
REAL(KIND=DP), ALLOCATABLE :: v_states(:,:) ! The valence states
INTEGER :: fcw_number ! Only needed for call, not used
INTEGER :: loop, lp_v
ALLOCATE(fac(1:npw))
ALLOCATE(op_x(1:npw))
ALLOCATE(ovp_x(1:npw))
!v_c
IF (l_truncated_coulomb) THEN
DO ig=1,npw
qq = g(1,ig)**2.d0 + g(2,ig)**2.d0 + g(3,ig)**2.d0
IF (qq > 1.d-8) THEN
fac(ig)=(e2*fpi/(tpiba2*qq))*(1.d0-DCOS(DSQRT(qq)*truncation_radius*tpiba))
ELSE
fac(ig)=e2*fpi*(truncation_radius**2.d0/2.d0)
END IF
END DO
fac(:)=fac(:)/omega
ELSE
fac(:)=0.d0
fac(1:npw)=vg_q(1:npw)
END IF
! Allocation and assignment of "fake conduction" states
! NOTE: not used during call since pmat_type=0
fcw_number=1
ALLOCATE(fcw_state(npw,fcw_number))
ALLOCATE(fcw_mat(fcw_number,fcw_number))
ALLOCATE(hdiag(1))
! Have to reobtain the valence_states to avoid having them in call
ALLOCATE(v_states(dfftp%nnr,num_nbndv(1)))
CALL evc_to_real(num_nbndv(1), v_states) ! gives v_states in real space
! P operator onto state
CALL o_1psi_gamma(num_nbndv(1), v_states, x, op_x, .FALSE., hdiag, &
0, fcw_number, fcw_state, fcw_mat, pmat_ethr)
! -1*(v_c) operator onto state
ovp_x(1:npw) = op_x(1:npw) * fac(1:npw)
ovp_x(1:npw) = -4.d0 * ovp_x(1:npw)
! calcualte (1-vP)|x> = |x> + |ovp_x>
DO loop = 1,npw
u(loop,1) = x(loop) + ovp_x(loop)
END DO
DEALLOCATE(v_states)
DEALLOCATE(hdiag)
DEALLOCATE(fcw_state)
DEALLOCATE(fcw_mat)
DEALLOCATE(fac)
DEALLOCATE(op_x)
DEALLOCATE(ovp_x)
RETURN
END SUBROUTINE operator_1_vp

View File

@ -0,0 +1,32 @@
SUBROUTINE operator_debug(npw, e, x, u)
USE wannier_gw
USE gvect
USE becmod, ONLY : becp,allocate_bec_type,deallocate_bec_type
USE cell_base, ONLY : at, alat, tpiba, omega, tpiba2
USE constants, ONLY : e2, pi, tpi, fpi
USE fft_base, ONLY : dfftp, dffts
USE fft_interfaces, ONLY : fwfft, invfft
USE g_psi_mod, ONLY : h_diag, s_diag
USE gvecs, ONLY : doublegrid
USE io_global, ONLY : stdout, ionode, ionode_id
USE kinds, ONLY : DP
USE klist, ONLY : xk,igk_k
USE mp, ONLY : mp_sum, mp_barrier, mp_bcast
USE mp_world, ONLY : world_comm, mpime, nproc
USE uspp, ONLY : vkb, nkb, okvan
USE wvfct, ONLY : g2kin, npwx, nbnd, et
IMPLICIT NONE
! Dummy Variables
REAL(KIND=DP) :: e ! eigenvalue (needed for call not used)
INTEGER :: npw
COMPLEX(KIND=DP) :: x(npw), u(npw,1) ! Upon call should contain v_c|x>
WRITE(*,*) 'Inside operator'
u(1:npw,1) = x(1:npw)
WRITE(*,*) 'Leaving operator'
RETURN
END SUBROUTINE operator_debug

View File

@ -5,7 +5,7 @@
! in the root directory of the present distribution,
! or http://www.gnu.org/copyleft/gpl.txt .
!
!
! Modified by Joshua Elliott November 2020 as JDE
SUBROUTINE produce_wannier_gamma
@ -241,7 +241,14 @@
endif
deallocate(evc)
endif
write(stdout,*) 'USE RESTART: 1'
! JDE start
if (l_no_GW_just_screening) THEN
! If no GW skip to bse
restart_gww=7
else
write(stdout,*) 'USE RESTART: 1'
end if
! JDE end
FLUSH(stdout)
if(restart_gww <= 1) then
@ -615,10 +622,22 @@
allocate(tmp_rot(nbnd,nbnd))
allocate( evc( npwx, nbnd ) )
! JDE
IF (l_no_GW_just_screening) THEN
ALLOCATE (ewvc(npwx, nbnd, nspin))
END IF
! JDE
do is=1,nspin
allocate(o_mat(num_nbndv(is),num_nbndv(is)))
call davcio(evc,2*nwordwfc,iunwfc,is,-1)
! JDE
IF (l_no_GW_just_screening) THEN
ewvc(1:npwx,1:nbnd,is) = evc(1:npwx,1:nbnd)
END IF
! JDE
tmp_rot(:,:)=dble(u_trans(:,:,is))
call rotate_wannier_gamma( tmp_rot,1,0)
@ -630,7 +649,11 @@
deallocate(tmp_rot)
deallocate(evc)
! JDE
IF (l_no_GW_just_screening) THEN
DEALLOCATE(ewvc)
END IF
! JDE
endif
!NOT_TO_BE_INCLUDED_END

View File

@ -11,6 +11,7 @@
! Original version by Andrea Ferretti
! Modified mainly by Layla Martin-Samos
! Modified by Joe Stenuit
! Modified by Joshua David Elliott November 2020 as JDE
!
!=----------------------------------------------------------------------------=!
MODULE io_base_export
@ -149,7 +150,11 @@ program gwl_punch
scissor,&
l_full,&
n_full,&
l_simple
l_simple,&
l_no_GW_just_screening,& ! JDE
l_no_GW_bare_Coulomb,& ! JDE
no_GW_cg_maxit,& ! JDE
no_GW_cg_threshold ! JDE
USE exchange_custom, ONLY : exchange_fast_dual
@ -186,7 +191,8 @@ program gwl_punch
s_last_state,l_selfconsistent,l_whole_s,l_ts_eigen,l_frac_occ,num_nbndv_min,&
l_cond_pol_base,l_semicore,n_semicore,l_semicore_read, l_verbose, l_contour,&
l_real,exchange_fast_dual,l_bse,s_bse,dual_bse,l_big_system,extra_pw_cutoff,&
l_list,l_scissor,scissor,l_full,n_full,l_simple
l_list,l_scissor,scissor,l_full,n_full,l_simple,&
l_no_GW_just_screening, l_no_GW_bare_Coulomb, no_GW_cg_maxit, no_GW_cg_threshold ! JDE
!
@ -284,6 +290,10 @@ program gwl_punch
l_full=.false.
n_full=0
l_simple=.false.
l_no_GW_just_screening=.false. ! JDE
l_no_GW_bare_coulomb=.false. ! JDE
no_GW_cg_maxit=30 ! JDE
no_GW_cg_threshold=1.d-10 ! JDE
!
! Reading input file
!
@ -404,6 +414,10 @@ program gwl_punch
CALL mp_bcast(l_full, ionode_id, world_comm)
CALL mp_bcast(n_full, ionode_id, world_comm)
CALL mp_bcast(l_simple, ionode_id, world_comm)
CALL mp_bcast(l_no_GW_just_screening, ionode_id, world_comm) ! JDE
CALL mp_bcast(l_no_GW_bare_coulomb, ionode_id, world_comm) ! JDE
CALL mp_bcast(no_GW_cg_maxit, ionode_id, world_comm) ! JDE
CALL mp_bcast(no_GW_cg_threshold, ionode_id, world_comm) ! JDE
call read_file

View File

@ -6,7 +6,8 @@
! or http://www.gnu.org/copyleft/gpl.txt .
!
!
! Modified by Joshua Elliott November 2020 as JDE
!
! This subroutine computes the overlap between Wannier orbitals Ovv' and
! computes the (v*w_v*w_v')(r) term for each vv' such that Ovv'>s_bse, and
! writes to disk Ovv' and (v*w_v*w_v')(r) ,and z_beta_v_v'=v*phi_beta*wv*wv'
@ -17,13 +18,14 @@ subroutine wannier_bse(ispin,w_wfcs,o_mat)
USE io_files, ONLY : prefix, tmp_dir, diropn
USE kinds, ONLY : DP
USE wannier_gw, ONLY : num_nbndv,dual_bse,s_bse,l_truncated_coulomb,truncation_radius,vg_q,&
max_ngm,numw_prod
max_ngm,numw_prod, pmat_type, l_no_GW_just_screening, l_no_GW_bare_coulomb,& ! JDE
no_GW_cg_maxit, no_GW_cg_threshold, ewvc ! JDE
USE fft_custom_gwl
USE wvfct, ONLY : npwx, npw, nbnd
USE wvfct, ONLY : npwx, npw, nbnd, nbndx ! JDE
USE gvecw, ONLY : ecutwfc
USE mp_pools, ONLY : intra_pool_comm
USE mp_world, ONLY : mpime, nproc, world_comm
USE mp, ONLY : mp_sum
USE mp, ONLY : mp_sum, mp_bcast ! JDE
USE gvect
USE wavefunctions, ONLY : psic
USE constants, ONLY : e2, fpi
@ -58,13 +60,28 @@ subroutine wannier_bse(ispin,w_wfcs,o_mat)
INTEGER :: iunu, iungprod,iunz,iuni
REAL(kind=DP) :: qq
LOGICAL :: exst
logical :: debug
logical :: debug, debug_operator ! JDE
integer :: iundebug
! JDE
INTEGER :: wannier_product_unit, loop_wannier_prod, &
wannier_write_product_unit, wwwdebug, iunwww, &
start_loop_wannier
EXTERNAL :: operator_1_vp, operator_debug
COMPLEX(kind=DP), allocatable :: ww_read_prodg2(:), ww_solved_prodg2(:)
REAL(KIND=dp), ALLOCATABLE :: overlap(:,:), diagonal(:), e(:)
COMPLEX(KIND=dp), ALLOCATABLE :: evc_jsh(:,:)
COMPLEX(KIND=dp), DIMENSION(:,:), ALLOCATABLE :: x, b, u, h, Ah, evc, pu
INTEGER :: cg_iter
LOGICAL :: cgsolve_conv
! JDE
fc%ecutt=ecutwfc
fc%dual_t=dual_bse
debug=.true.
debug_operator=.false.
! FFT the wannier function to r-space (dual grid)
@ -206,19 +223,135 @@ subroutine wannier_bse(ispin,w_wfcs,o_mat)
FLUSH(stdout)
close(iungprod)
! read polarization basis
! JDE start
! Obtain polarization basis
! Iterative method
IF (l_no_GW_just_screening) THEN
allocate(ww_read_prodg2(npw))
allocate(ww_solved_prodg2(npw))
allocate(p_basis(npw,numw_prod))
CALL diropn( iungprod, 'wiwjwfc_red', npw*2, exst )
if (debug) then
wwwdebug = find_free_unit()
open(wwwdebug,file='Www_pw4gww.dat')
endif
do ii=1,numw_prod
call davcio(p_basis(:,ii),npw*2,iungprod,ii,-1)
p_basis(1:npw,ii)=p_basis(1:npw,ii)*fac(1:npw)
enddo
! Open files for wannier products
wannier_product_unit = find_free_unit()
IF (ispin .EQ. 1) CALL diropn( wannier_product_unit, 'vww_bse1.',npw*2, exst)
IF (ispin .EQ. 2) CALL diropn( wannier_product_unit, 'vww_bse2.',npw*2, exst)
wannier_write_product_unit = find_free_unit()
IF (ispin .EQ. 1) CALL diropn( wannier_write_product_unit, 'Www_bse1.',npw*2, exst)
IF (ispin .EQ. 2) CALL diropn( wannier_write_product_unit, 'Www_bse2.',npw*2, exst)
close(iungprod)
! Allocate variables needed for cgsolve routine
IF (.NOT. l_no_GW_bare_coulomb) THEN
ALLOCATE(overlap(nbndx,1))
ALLOCATE(diagonal(npw))
ALLOCATE(evc_jsh(npw,1))
ALLOCATE(e(1))
ALLOCATE(b(npw,1))
ALLOCATE(u(npw,1))
ALLOCATE(h(npw,1))
ALLOCATE(Ah(npw,1))
ALLOCATE(pu(npw,1))
! maximum number of non-zero overlap
evc_jsh= 0.d0
diagonal= 0.d0
overlap= 0.d0
! BE VERY CAREFUL PMAT_TYPE IS A GLOBAL VARIABLE
WRITE(stdout,*) 'Note: we have changed pmat_type on the fly!'
pmat_type = 0
! BE VERY CAREFUL PMAT_TYPE IS A GLOBAL VARIABLE
END IF
INQUIRE(FILE=TRIM(tmp_dir)//TRIM(prefix)//'.restart_Www_stat', EXIST=exst)
IF (exst) THEN
IF (ionode) THEN
iunwww = find_free_unit()
OPEN(UNIT=iunwww,FILE=TRIM(tmp_dir)//TRIM(prefix)//'.restart_Www_stat')
READ(iunwww,*) start_loop_wannier
CLOSE(iunwww)
END IF
start_loop_wannier = start_loop_wannier + 1
CALL mp_bcast(start_loop_wannier, ionode_id, world_comm)
ELSE
start_loop_wannier = 1
END IF
DO loop_wannier_prod = start_loop_wannier, ii
CALL davcio(ww_read_prodg2,npw*2,wannier_product_unit,loop_wannier_prod,-1)
ww_solved_prodg2(:) = 0.d0
! NOTE: read Vww :: do not need to apply Coulomb operator
!ww_read_prodg2(1:npw) = ww_read_prodg2(1:npw) * fac(1:npw)
IF (.NOT. l_no_GW_bare_coulomb) THEN
IF (debug_operator) THEN
WRITE(*,*) 'before cg'
CALL cgsolve(operator_debug, npw, evc_jsh, npw, 1, overlap, &
1, .TRUE., .FALSE., diagonal, &
.FALSE.,e,ww_read_prodg2,u,h,Ah,pu,no_GW_cg_maxit,no_GW_cg_threshold,cg_iter,ww_solved_prodg2 )
ELSE
WRITE(stdout,*) 'CGSOLVE ww PAIR:', loop_wannier_prod
cgsolve_conv = .false.
DO WHILE (.NOT. cgsolve_conv)
overlap=0.d0
diagonal=0.d0
evc_jsh=0.d0
CALL cgsolve(operator_1_vp, npw, evc_jsh, npw, 1, overlap, 1, .TRUE., .FALSE., diagonal, .FALSE.,&
e, ww_read_prodg2, u, h, Ah, pu, no_GW_cg_maxit, no_GW_cg_threshold, cg_iter, ww_solved_prodg2 )
IF (cg_iter .LT. no_GW_cg_maxit) THEN
cgsolve_conv = .true.
END IF
END DO
END IF
ELSE
ww_solved_prodg2(1:npw) = ww_read_prodg2(1:npw)
END IF
CALL davcio(ww_solved_prodg2,npw*2,wannier_write_product_unit,loop_wannier_prod,1)
if(debug) then
if(ionode) then
write(wwwdebug,*) npw
do i=1,npw
write(wwwdebug,*) ww_solved_prodg2(i)
enddo
endif
endif
IF (ionode) THEN ! Store the last wannier product index
iunwww = find_free_unit()
OPEN(UNIT=iunwww,FILE=TRIM(tmp_dir)//TRIM(prefix)//'.restart_Www_stat')
WRITE(iunwww,*) loop_wannier_prod
CLOSE(iunwww)
END IF
END DO
IF (.NOT. l_no_GW_bare_coulomb) THEN
DEALLOCATE(overlap, diagonal, e, b, u, h, Ah, pu)
END IF
close(wannier_product_unit)
close(wannier_write_product_unit)
if (debug) close(wwwdebug)
write(stdout,*) 'files closed'
! Or read from file
ELSE
allocate(p_basis(npw,numw_prod))
CALL diropn( iungprod, 'wiwjwfc_red', npw*2, exst )
do ii=1,numw_prod
call davcio(p_basis(:,ii),npw*2,iungprod,ii,-1)
p_basis(1:npw,ii)=p_basis(1:npw,ii)*fac(1:npw)
enddo
close(iungprod)
END IF
! JDE end
! maximum number of non-zero overlap
np_max=0
do iv=1, num_nbndv(ispin)
np=0
@ -228,48 +361,49 @@ subroutine wannier_bse(ispin,w_wfcs,o_mat)
if (np>np_max) np_max=np
enddo
if(ionode) then
iunz = find_free_unit()
if (ispin==1) open(unit=iunz,file=trim(tmp_dir)//trim(prefix)//'.zbse1',status='unknown',form='unformatted')
if (ispin==2) open(unit=iunz,file=trim(tmp_dir)//trim(prefix)//'.zbse2',status='unknown',form='unformatted')
write(iunz) num_nbndv(ispin)
write(iunz) s_bse
write (iunz) np_max
write (iunz) numw_prod
endif
allocate(z(numw_prod))
z(1:numw_prod)=0.d0
do iv=1, num_nbndv(ispin)
do jv=1, num_nbndv(ispin)
if (o_mat(jv,iv)>=s_bse) then
ww_prod(1:fc%nrxxt)= w_wfcs_r(1:fc%nrxxt,iv)* w_wfcs_r(1:fc%nrxxt,jv)
psic(1:fc%nrxxt)=dcmplx(ww_prod(1:fc%nrxxt),0.d0)
CALL cft3t(fc, psic, fc%nr1t, fc%nr2t, fc%nr3t, fc%nrx1t, fc%nrx2t, fc%nrx3t, -2 )
ww_prodg(1:fc%npwt) = psic(fc%nlt(1:fc%npwt))
call mergewf(ww_prodg,evc_g,fc%npwt,fc%ig_l2gt,mpime,nproc,ionode_id,intra_pool_comm)
call splitwf(ww_prodg2,evc_g,npw,ig_l2g,mpime,nproc,ionode_id,intra_pool_comm)
call dgemm('T','N',numw_prod,1,2*npw,2.d0,p_basis,&
&2*npw,ww_prodg2,2*npw,0.d0,z,numw_prod)
if(gstart==2) then
do ii=1,numw_prod
z(ii)=z(ii)-dble(p_basis(1,ii)*conjg(ww_prodg2(1)))
enddo
endif
call mp_sum(z,world_comm)
if(ionode) then
write(iunz) z
endif
endif
IF (.NOT. l_no_GW_just_screening) THEN ! JDE
if(ionode) then
iunz = find_free_unit()
if (ispin==1) open(unit=iunz,file=trim(tmp_dir)//trim(prefix)//'.zbse1',status='unknown',form='unformatted')
if (ispin==2) open(unit=iunz,file=trim(tmp_dir)//trim(prefix)//'.zbse2',status='unknown',form='unformatted')
write(iunz) num_nbndv(ispin)
write(iunz) s_bse
write (iunz) np_max
write (iunz) numw_prod
endif
allocate(z(numw_prod))
z(1:numw_prod)=0.d0
do iv=1, num_nbndv(ispin)
do jv=1, num_nbndv(ispin)
if (o_mat(jv,iv)>=s_bse) then
ww_prod(1:fc%nrxxt)= w_wfcs_r(1:fc%nrxxt,iv)* w_wfcs_r(1:fc%nrxxt,jv)
psic(1:fc%nrxxt)=dcmplx(ww_prod(1:fc%nrxxt),0.d0)
CALL cft3t(fc, psic, fc%nr1t, fc%nr2t, fc%nr3t, fc%nrx1t, fc%nrx2t, fc%nrx3t, -2 )
ww_prodg(1:fc%npwt) = psic(fc%nlt(1:fc%npwt))
call mergewf(ww_prodg,evc_g,fc%npwt,fc%ig_l2gt,mpime,nproc,ionode_id,intra_pool_comm)
call splitwf(ww_prodg2,evc_g,npw,ig_l2g,mpime,nproc,ionode_id,intra_pool_comm)
call dgemm('T','N',numw_prod,1,2*npw,2.d0,p_basis,&
&2*npw,ww_prodg2,2*npw,0.d0,z,numw_prod)
if(gstart==2) then
do ii=1,numw_prod
z(ii)=z(ii)-dble(p_basis(1,ii)*conjg(ww_prodg2(1)))
enddo
endif
call mp_sum(z,world_comm)
if(ionode) then
write(iunz) z
endif
endif
enddo
enddo
enddo
close(iunz)
close(iunz)
END IF ! JDE
allocate(iww(np_max))
@ -297,14 +431,16 @@ subroutine wannier_bse(ispin,w_wfcs,o_mat)
enddo
if(ionode) write(iuni) iww
enddo
close(iuni)
if (ionode) close(iuni) ! JDE fixes a seg fault when fcheck=bounds
if(debug) close(iundebug)
if(debug) close(iundebug)
deallocate(iww)
deallocate(z)
deallocate(p_basis)
IF (.NOT. l_no_GW_just_screening) THEN ! JDE
deallocate(z)
deallocate(p_basis)
END IF ! JDE
deallocate(ww_prod)
deallocate(ww_prodg)
deallocate(ww_prodg2)

View File

@ -5,6 +5,9 @@
! in the root directory of the present distribution,
! or http://www.gnu.org/copyleft/gpl.txt .
!
!
! Modified by Joshua Elliott November 2020 as JDE
!
!--------------------------------------------------------------------------
!
MODULE wannier_gw
@ -205,7 +208,13 @@ MODULE wannier_gw
INTEGER :: len_head_block_freq!length of blocks on frequency
INTEGER :: len_head_block_wfc!length of blocks on unperturbed occupied wfcs
! JDE
LOGICAL :: l_no_GW_just_screening ! When true use strategy to compute screening via iterative minimization
LOGICAL :: l_no_GW_bare_coulomb ! When true only do not compute correlation part of W for just_screening
INTEGER :: no_GW_cg_maxit ! Maximum number of conj. grad. steps in calculation of (1-vP) operator
REAL(KIND=DP) :: no_GW_cg_threshold ! Convergence threshold for conj. grad. calculation of (1-vP) operator
COMPLEX(KIND=DP), ALLOCATABLE :: ewvc(:,:,:)
! JDE
INTERFACE free_memory

View File

@ -49,10 +49,14 @@ SUBROUTINE cgsolve (operator,npw,evc,npwx,nbnd,overlap, &
ELSE
CALL calbec ( npw, evc, u, lagrange )
ENDIF
IF (.not. orthonormal) &
! JDE putting back the old version because this looks wrong.
IF (.not. orthonormal) THEN
CALL DPOTRS('U',nbnd,nbnd,overlap,nbndx,lagrange,nbnd,info)
IF (info/=0) CALL errore('cgsolve','error in potrs',info)
!
IF (info/=0) CALL errore('cgsolve','error in potrs',info)
END IF
! JDE putting back the old version because this looks wrong.
!
CALL dgemm ('N', 'N', 2*npw, nbnd, nbnd, -1.d0, evc, &
2*npwx, lagrange, nbndx, 1.d0, u, 2*npwx)
!
@ -60,7 +64,7 @@ SUBROUTINE cgsolve (operator,npw,evc,npwx,nbnd,overlap, &
IF (precondition) THEN
CALL zvscal(npw,npwx,nbnd,diagonal,u,h)
ELSE
CALL zcopy(npwx,nbnd,u,1,h,1)
CALL zcopy(npwx,u,1,h,1)
ENDIF
! uu = <u|h>
CALL pw_dot('Y',npw,nbnd,u,npwx,h,npwx,uu)
@ -69,7 +73,7 @@ SUBROUTINE cgsolve (operator,npw,evc,npwx,nbnd,overlap, &
u_u = u_u + uu(ibnd)
ENDDO
!
! print '(" iter # ",i3," u_u = ",e10.4)', 0, u_u
print '(" iter # ",i3," u_u = ",e10.4)', 0, u_u ! JDE
!
! main iteration loop
!
@ -106,9 +110,12 @@ SUBROUTINE cgsolve (operator,npw,evc,npwx,nbnd,overlap, &
ELSE
CALL calbec ( npw, evc, u, lagrange )
ENDIF
IF (.not. orthonormal) &
! JDE putting back the old version because this looks wrong.
IF (.not. orthonormal) THEN
CALL DPOTRS('U',nbnd,nbnd,overlap,nbndx,lagrange,nbnd,info)
IF (info/=0) CALL errore('cgsolve','error in potrs',info)
IF (info/=0) CALL errore('cgsolve','error in potrs',info)
! JDE putting back the old version because this looks wrong.
END IF
CALL dgemm ('N', 'N', 2*npw, nbnd, nbnd,-1.d0, evc, &
2*npwx, lagrange, nbndx, 1.d0, u, 2*npwx)
IF (precondition) THEN
@ -123,7 +130,7 @@ SUBROUTINE cgsolve (operator,npw,evc,npwx,nbnd,overlap, &
DO ibnd=1,nbnd
u_u = u_u + uu(ibnd)
ENDDO
! print '(" iter # ",i3," u_u = ",e10.4)', iter, u_u
print '(" iter # ",i3," u_u = ",e10.4)', iter, u_u ! JDE
!
IF( u_u <= eps) GOTO 10
IF (iter==niter) THEN