15 integer ik,jk,iv(3),jspn,idm
16 integer is,ia,ias,ip,nthd
17 integer nmix,nwork,n,lp
19 integer,
parameter :: mtype=3
23 real(8),
allocatable :: evalfv(:,:),work(:)
24 complex(8),
allocatable :: dyn(:,:)
25 complex(8),
allocatable :: apwalm(:,:,:,:,:),apwalmq(:,:,:,:,:)
26 complex(8),
allocatable :: dapwalm(:,:,:,:),dapwalmq(:,:,:,:)
27 complex(8),
allocatable :: evecfv(:,:,:),devecfv(:,:,:)
28 complex(8),
allocatable :: evecsv(:,:),devecsv(:,:)
36 if ((iv(1) /= 0).or.(iv(2) /= 0).or.(iv(3) /= 0))
then 38 write(*,
'("Error(phonon): k-point grid incommensurate with q-point grid")')
39 write(*,
'(" ngridk : ",3I6)')
ngridk 40 write(*,
'(" ngridq : ",3I6)')
ngridq 46 write(*,
'("Error(phonon): lmaxi too small for calculating DFPT phonons : ",& 48 write(*,
'(" Run the ground-state calculation again with lmaxi >= 2")')
54 write(*,
'("Error(phonon): spin-polarised phonons not yet available")')
61 write(*,
'("Error(phonon): ssdph should be .false. for DFPT phonons")')
96 write(*,
'("Info(phonon): working on ",A)')
'DYN'//trim(fext)
98 open(65,file=
'RMSDDVS'//trim(fext),form=
'FORMATTED')
160 sfacgk(:,:,jspn,ik),apwalm(:,:,:,:,jspn))
162 apwalm(:,:,:,:,jspn),dapwalm(:,:,:,jspn))
164 sfacgkq(:,:,jspn,ik),apwalmq(:,:,:,:,jspn))
166 apwalmq(:,:,:,:,jspn),dapwalmq(:,:,:,jspn))
175 igkqig(:,jspn,ik),
vgkc(:,:,jspn,ik),
vgkqc(:,:,jspn,ik),evalfv(:,jspn), &
176 apwalm(:,:,:,:,jspn),apwalmq(:,:,:,:,jspn),dapwalm(:,:,:,jspn), &
177 dapwalmq(:,:,:,jspn),evecfv(:,:,jspn),
devalfv(:,jspn,ik), &
199 call drhomagk(
ngk(:,ik),
ngkq(:,ik),
igkig(:,:,ik),
igkqig(:,:,ik), &
200 occsv(:,jk),
doccsv(:,ik),apwalm,apwalmq,dapwalm,evecfv,devecfv,evecsv, &
204 deallocate(evalfv,apwalm,apwalmq,dapwalm,dapwalmq)
205 deallocate(evecfv,devecfv,evecsv,devecsv)
230 call mpi_allreduce(mpi_in_place,
drhmg,n,mpi_double_complex,mpi_sum,
mpicom, &
244 write(65,
'(G18.10)') ddv
260 write(*,
'("Warning(phonon): failed to reach self-consistency after ",I4,& 279 if (abs(a) < 1.d-12) a=0.d0
280 if (abs(b) < 1.d-12) b=0.d0
281 write(80,
'(2G18.10," : is = ",I4,", ia = ",I4,", ip = ",I4)') a,b,is,ia,ip
subroutine zfmtctof(zfmt)
subroutine drhomagk(ngp, ngpq, igpig, igpqig, occsvp, doccsvp, apwalm, apwalmq, dapwalm, evecfv, devecfv, evecsv, devecsv)
complex(8), dimension(:,:), pointer, contiguous dmagir
subroutine getevecsv(fext, ikp, vpl, evecsv)
real(8), dimension(:,:), allocatable evalsv
complex(8), dimension(:,:), pointer, contiguous drhomt
real(8), dimension(:,:,:), allocatable gkqc
subroutine getevecfv(fext, ikp, vpl, vgpl, evecfv)
subroutine getevalsv(fext, ikp, vpl, evalsv_)
subroutine match(ngp, vgpc, gpc, sfacgp, apwalm)
integer, dimension(:,:,:), allocatable ivkik
subroutine dyntask(fnum, fext)
real(8), dimension(:,:), allocatable devalsv
complex(8), dimension(:,:,:,:), allocatable sfacgk
subroutine mixerifc(mtype, n, v, dv, nwork, work)
subroutine putdevecfv(ik, devecfv)
pure subroutine gengclgq(treg, iq, ngq, gqc, gclgq)
complex(8), dimension(:,:,:), pointer, contiguous dmagmt
integer, dimension(:,:), allocatable ngk
complex(8), dimension(:,:,:,:), allocatable sfacgkq
subroutine putdevecsv(ik, devecsv)
real(8), dimension(:,:), allocatable doccsv
real(8), dimension(:,:,:,:), allocatable vgkl
complex(8), dimension(:), allocatable, target drhmg
real(8), dimension(:,:,:), allocatable devalfv
real(8), dimension(maxspecies) spmass
integer, dimension(3) ngridk
real(8), dimension(:,:), allocatable occsv
subroutine getevalfv(fext, ikp, vpl, evalfv)
real(8), dimension(:,:,:,:), allocatable vgkc
integer, dimension(3) ngridq
real(8), dimension(:,:), allocatable vkl
subroutine delfiles(evec, devec, eval, occ, pmat, epsi)
integer, dimension(maxatoms *maxspecies) idxis
subroutine getoccsv(fext, ikp, vpl, occsvp)
real(8), dimension(:,:,:), allocatable gkc
subroutine deveqnfv(ngp, ngpq, igpig, igpqig, vgpc, vgpqc, evalfv, apwalm, apwalmq, dapwalm, dapwalmq, evecfv, devalfvp, devecfv)
complex(8), dimension(:), pointer, contiguous drhoir
subroutine zfirctof(zfirc, zfir)
complex(8), dimension(:), allocatable, target dvsbs
subroutine holdthd(nloop, nthd)
integer, dimension(:,:), allocatable ngkq
integer, dimension(maxatoms *maxspecies) idxia
real(8), dimension(:,:,:,:), allocatable vgkqc
real(8), dimension(:), allocatable gqc
pure subroutine dmatch(ias, ip, ngp, vgpc, apwalm, dapwalm)
integer, dimension(:,:,:), allocatable igkig
subroutine writedvs(fext)
integer, dimension(:,:), allocatable ivk
integer, dimension(:,:,:), allocatable igkqig
real(8), dimension(:), allocatable gclgq