SUBROUTINE fft6_g2r_green_sco (f_g, f_r) ! 6-D fourier transform used for G(G,G'). ! which agrees with convention in FG's paper. USE io_files, ONLY : prefix, iunigk USE kinds, ONLY : DP USE cell_base, ONLY : omega, alat USE control_gw, ONLY : lgamma USE wvfct, ONLY : npw, npwx, igk USE qpoint, ONLY : xq, npwq, igkq, nksq, ikks, ikqs USE gwsigma, ONLY : ngmsco, nrsco, nr1sco, nr2sco, nr3sco, nlsco IMPLICIT NONE INTEGER :: ios INTEGER :: ig, igp, ir, irp INTEGER :: ngmtmp COMPLEX(DP) :: aux(nrsco) COMPLEX(DP) :: czero INTEGER :: nr1tmp, nr2tmp, nr3tmp, nrtmp COMPLEX(DP), INTENT(INOUT) :: f_g(ngmsco,ngmsco) COMPLEX(DP), INTENT(INOUT) :: f_r (nrsco,nrsco) czero = (0.0d0, 0.0d0) f_r(:,:) = czero ngmtmp = ngmsco if (ngmtmp.gt.npwq) ngmtmp = npwq do ig = 1, ngmtmp aux(:) = czero do igp = 1, ngmtmp write(6,*)ig + igp aux(nlsco(igkq(igp))) = f_g(ig,igp) enddo call cft3s (aux, nr1sco, nr2sco, nr3sco, nr1sco, nr2sco, nr3sco, +2) f_r(ig, 1:nrsco) = aux / omega enddo ! the conjg/conjg is to calculate sum_G f(G) exp(-iGr) ! following the convention set in the paper ! because the standard transform is sum_G f(G) exp(iGr). do irp = 1, nrsco aux = czero do ig = 1, ngmtmp aux(nlsco(igkq(ig))) = conjg( f_r(ig,irp) ) enddo call cft3s (aux, nr1sco, nr2sco, nr3sco, nr1sco, nr2sco, nr3sco, +2) f_r(1:nrsco,irp) = conjg ( aux ) enddo END SUBROUTINE fft6_g2r_green_sco