mirror of https://gitlab.com/QEF/q-e.git
Vpaw_acc - offload switch removed in radial_gradient
This commit is contained in:
parent
815a511754
commit
5bebcea5b4
|
@ -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
|
||||
|
|
|
@ -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
|
||||
!
|
||||
|
|
Loading…
Reference in New Issue