From 5bebcea5b407d6a48992b4f18232868c99535948 Mon Sep 17 00:00:00 2001 From: fabrizio22 Date: Fri, 3 May 2024 14:31:30 +0200 Subject: [PATCH] Vpaw_acc - offload switch removed in radial_gradient --- Modules/radial_gradients.f90 | 18 +----------------- PW/src/paw_onecenter.f90 | 13 ++++++++++--- 2 files changed, 11 insertions(+), 20 deletions(-) diff --git a/Modules/radial_gradients.f90 b/Modules/radial_gradients.f90 index 293ab0155..c166507b2 100644 --- a/Modules/radial_gradients.f90 +++ b/Modules/radial_gradients.f90 @@ -6,7 +6,7 @@ ! or http://www.gnu.org/copyleft/gpl.txt . ! !------------------------------------------------------------------------------ -SUBROUTINE radial_gradient( f, gf, r, mesh, iflag, offld_ ) +SUBROUTINE radial_gradient( f, gf, r, mesh, iflag ) !--------------------------------------------------------------------------- !! This subroutine calculates the derivative with respect to r of a !! radial function defined on the mesh r. @@ -23,34 +23,22 @@ SUBROUTINE radial_gradient( f, gf, r, mesh, iflag, offld_ ) INTEGER, INTENT(IN) :: mesh, iflag REAL(DP), INTENT(IN) :: f(mesh), r(mesh) REAL(DP), INTENT(OUT) :: gf(mesh) - LOGICAL, INTENT(IN), OPTIONAL :: offld_ ! INTEGER :: i, j, k, imin, npoint REAL(DP) :: delta, b(5), faux(6), raux(6) - LOGICAL :: offld ! ! ... This formula is used in the all-electron case. ! - offld = .FALSE. - IF (PRESENT(offld_)) offld = offld_ - ! IF (iflag==0) THEN ! - !$acc data copyin(f,r) copyout(gf) if(offld) - ! - !$acc parallel loop if(offld) DO i = 2, mesh-1 gf(i) = ( (r(i+1)-r(i))**2*(f(i-1)-f(i)) & -(r(i-1)-r(i))**2*(f(i+1)-f(i)) ) & / ((r(i+1)-r(i))*(r(i-1)-r(i))*(r(i+1)-r(i-1))) ENDDO ! - !$acc parallel if(offld) gf(mesh) = 0.0_DP gf(1) = gf(2) + (gf(3)-gf(2)) * (r(1)-r(2)) / (r(3)-r(2)) - !$acc end parallel - ! - !$acc end data ! ELSE ! @@ -64,8 +52,6 @@ SUBROUTINE radial_gradient( f, gf, r, mesh, iflag, offld_ ) ! ... and this formula coincides with the previous one. ! ... (ADC 08/2007) ! - !$acc update self(f) if(offld) - ! delta = 0.00001_DP imin = 1 ! @@ -126,8 +112,6 @@ SUBROUTINE radial_gradient( f, gf, r, mesh, iflag, offld_ ) gf(i) = b(1)+r(i)*(b(2)+r(i)*(b(3)+r(i)*b(4))) ENDDO ! - !$acc update device(gf) if(offld) - ! ENDIF ! RETURN diff --git a/PW/src/paw_onecenter.f90 b/PW/src/paw_onecenter.f90 index 99ae7ef46..25b8787b7 100644 --- a/PW/src/paw_onecenter.f90 +++ b/PW/src/paw_onecenter.f90 @@ -1004,12 +1004,15 @@ MODULE paw_onecenter ENDDO ENDDO ! + !$acc update self(F_lm(:,1:1,:,:)) + ! ! ... Compute partial radial derivative d/dr DO is = 1, nspin_gga DO lm = 1, lmaxq_out**2 ! ... Derive along \hat{r} (F already contains a r**2 factor, otherwise ! ... it may be better to expand (1/r**2) d(A*r**2)/dr = dA/dr + 2A/r) - CALL radial_gradient( F_lm(1:i%m,1,lm,is), aux, g(i%t)%r, i%m, radial_grad_style, .TRUE. ) + CALL radial_gradient( F_lm(1:i%m,1,lm,is), aux, g(i%t)%r, i%m, radial_grad_style ) + !$acc update device(aux) ! ! ... Sum it in the divergence: it is already in the right Y_lm form ! @@ -1093,11 +1096,13 @@ MODULE paw_onecenter ENDDO ENDDO ! + !$acc update self(aux) DO ix = 1, nx_loc ixs = (ix-1)*i%m+1 ixe = ix*i%m - CALL radial_gradient( aux(ixs:ixe), aux2(ixs:ixe), g(i%t)%r, i%m, radial_grad_style, .TRUE. ) + CALL radial_gradient( aux(ixs:ixe), aux2(ixs:ixe), g(i%t)%r, i%m, radial_grad_style ) ENDDO + !$acc update device(aux2) ! !$acc parallel loop collapse(2) present(rad(i%t:i%t),g(i%t:i%t)) DO ix = 1, nx_loc @@ -1368,7 +1373,9 @@ MODULE paw_onecenter !-------------------------------------------------------------------------------- SUBROUTINE PAW_rad2lm( i, F_rad, F_lm, lmax_loc, nspin ) !------------------------------------------------------------------------------ - !! gpu double + !! Computes: + !! \[ F_{lm}(r) = \int d \Omega\ F(r,\text{th},\text{ph})\ Y_{lm}(\text{th}, + !! \text{ph}) \] ! IMPLICIT NONE !