fft_wraps - rho_fft in sum_band_gpu

This commit is contained in:
fabrizio22 2022-07-13 11:39:36 +02:00
parent 6969d46d9c
commit f1ea3ef1dd
2 changed files with 15 additions and 29 deletions

View File

@ -57,6 +57,9 @@ CONTAINS
! !
IF( nspin == 1 ) THEN IF( nspin == 1 ) THEN
! !
!$acc kernels
psi(desc%nnr+1:) = (0.d0,0.d0)
!$acc end kernels
iss = 1 iss = 1
IF( PRESENT(v) ) THEN IF( PRESENT(v) ) THEN
!$acc parallel loop !$acc parallel loop
@ -119,6 +122,10 @@ CONTAINS
!$acc end data !$acc end data
DEALLOCATE( psi ) DEALLOCATE( psi )
! !
!$acc kernels
rhog(desc%ngm+1:,:) = (0.d0,0.d0)
!$acc end kernels
!
!$acc end data !$acc end data
! !
END SUBROUTINE rho_r2g END SUBROUTINE rho_r2g

View File

@ -22,6 +22,7 @@ SUBROUTINE sum_band_gpu()
USE ions_base, ONLY : nat, ntyp => nsp, ityp USE ions_base, ONLY : nat, ntyp => nsp, ityp
USE fft_base, ONLY : dfftp, dffts USE fft_base, ONLY : dfftp, dffts
USE fft_interfaces, ONLY : fwfft, invfft USE fft_interfaces, ONLY : fwfft, invfft
USE fft_rho, ONLY : rho_g2r, rho_r2g
USE gvect, ONLY : ngm, g USE gvect, ONLY : ngm, g
USE gvecs, ONLY : doublegrid USE gvecs, ONLY : doublegrid
USE klist, ONLY : nks, nkstot, wk, xk, ngk, igk_k, igk_k_d USE klist, ONLY : nks, nkstot, wk, xk, ngk, igk_k, igk_k_d
@ -168,14 +169,8 @@ SUBROUTINE sum_band_gpu()
! !
! ... bring the unsymmetrized rho(r) to G-space (use psic as work array) ! ... bring the unsymmetrized rho(r) to G-space (use psic as work array)
! !
DO is = 1, nspin CALL rho_r2g( dffts, rho%of_r, rho%of_g )
psic(1:dffts%nnr) = rho%of_r(1:dffts%nnr,is) !
psic(dffts%nnr+1:) = 0.0_dp
CALL fwfft ('Rho', psic, dffts)
rho%of_g(1:dffts%ngm,is) = psic(dffts%nl(1:dffts%ngm))
rho%of_g(dffts%ngm+1:,is) = (0.0_dp,0.0_dp)
END DO
IF( okvan ) THEN IF( okvan ) THEN
! !
! ... becsum is summed over bands (if bgrp_parallelization is done) ! ... becsum is summed over bands (if bgrp_parallelization is done)
@ -219,13 +214,7 @@ SUBROUTINE sum_band_gpu()
! !
! ... synchronize rho%of_r to the calculated rho%of_g (use psic as work array) ! ... synchronize rho%of_r to the calculated rho%of_g (use psic as work array)
! !
DO is = 1, nspin_mag CALL rho_g2r( dfftp, rho%of_g, rho%of_r )
psic(:) = ( 0.D0, 0.D0 )
psic(dfftp%nl(:)) = rho%of_g(:,is)
IF ( gamma_only ) psic(dfftp%nlm(:)) = CONJG( rho%of_g(:,is) )
CALL invfft ('Rho', psic, dfftp)
rho%of_r(:,is) = psic(:)
END DO
! !
! ... rho_kin(r): sum over bands, k-points, bring to G-space, symmetrize, ! ... rho_kin(r): sum over bands, k-points, bring to G-space, symmetrize,
! ... synchronize with rho_kin(G) ! ... synchronize with rho_kin(G)
@ -234,24 +223,14 @@ SUBROUTINE sum_band_gpu()
! !
CALL mp_sum( rho%kin_r, inter_pool_comm ) CALL mp_sum( rho%kin_r, inter_pool_comm )
CALL mp_sum( rho%kin_r, inter_bgrp_comm ) CALL mp_sum( rho%kin_r, inter_bgrp_comm )
DO is = 1, nspin !
psic(1:dffts%nnr) = rho%kin_r(1:dffts%nnr,is) CALL rho_r2g( dffts, rho%kin_r, rho%kin_g )
psic(dffts%nnr+1:) = 0.0_dp
CALL fwfft ('Rho', psic, dffts)
rho%kin_g(1:dffts%ngm,is) = psic(dffts%nl(1:dffts%ngm))
END DO
! !
IF (.NOT. gamma_only) CALL sym_rho( nspin, rho%kin_g ) IF (.NOT. gamma_only) CALL sym_rho( nspin, rho%kin_g )
! !
DO is = 1, nspin CALL rho_g2r( dfftp, rho%kin_g, rho%kin_r )
psic(:) = ( 0.D0, 0.D0 )
psic(dfftp%nl(:)) = rho%kin_g(:,is)
IF ( gamma_only ) psic(dfftp%nlm(:)) = CONJG( rho%kin_g(:,is) )
CALL invfft ('Rho', psic, dfftp)
rho%kin_r(:,is) = psic(:)
END DO
! !
END IF ENDIF
CALL stop_clock_gpu( 'sum_band:sym_rho' ) CALL stop_clock_gpu( 'sum_band:sym_rho' )
! !
! ... if LSDA rho%of_r and rho%of_g are converted from (up,dw) to ! ... if LSDA rho%of_r and rho%of_g are converted from (up,dw) to