Vpaw_acc - offload switch removed in radial_gradient

This commit is contained in:
fabrizio22 2024-05-03 14:31:30 +02:00
parent 815a511754
commit 5bebcea5b4
2 changed files with 11 additions and 20 deletions

View File

@ -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

View File

@ -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
!