If Im not mistaken, the rotated spinor eigenvectors can be dotted directly onto the A_mn
when the PAW pseudopotential is used (According to PW2WANNIER90.F90
for pwscf v6.4
):
! general routine
! for quantisation axis (a,b,c)
! 'up' eigenvector is 1/sqrt(1+c) [c+1,a+ib]
! 'down' eigenvector is 1/sqrt(1-c) [c-1,a+ib]
if(spin_eig(iw)==1) then
fac(1)=(1.0_dp/sqrt(1+spin_qaxis(3,iw)))*(spin_qaxis(3,iw)+1)*cmplx(1.0d0,0.0d0,dp)
fac(2)=(1.0_dp/sqrt(1+spin_qaxis(3,iw)))*cmplx(spin_qaxis(1,iw),spin_qaxis(2,iw),dp)
else
fac(1)=(1.0_dp/sqrt(1-spin_qaxis(3,iw)))*(spin_qaxis(3,iw)-1)*cmplx(1.0d0,0.0d0,dp)
fac(2)=(1.0_dp/sqrt(1-spin_qaxis(3,iw)))*cmplx(spin_qaxis(1,iw),spin_qaxis(2,iw),dp)
endif
ibnd1 = 0
DO ibnd = 1,nbnd
IF (excluded_band(ibnd)) CYCLE
amn=(0.0_dp,0.0_dp)
DO ipol=1,npol
istart = (ipol-1)*npwx + 1
amn_tmp=(0.0_dp,0.0_dp)
if (any_uspp) then
amn_tmp = zdotc(npw,evc(istart,ibnd),1,sgf_spinor(istart,iw),1)
CALL mp_sum(amn_tmp, intra_pool_comm)
amn=amn+amn_tmp
else
amn_tmp = zdotc(npw,evc(istart,ibnd),1,sgf(1,iw),1)
CALL mp_sum(amn_tmp, intra_pool_comm)
amn=amn+fac(ipol)*amn_tmp
endif
enddo
ibnd1=ibnd1+1
IF (wan_mode=='standalone') THEN
IF (ionode) WRITE(iun_amn,'(3i5,2f18.12)') ibnd1, iw, ik, amn
ELSEIF (wan_mode=='library') THEN
a_mat(ibnd1,iw+n_proj*(ipol-1),ik) = amn
ELSE
CALL errore('compute_amn',' value of wan_mode not recognised',1)
ENDIF
ENDDO
endif