Skip to content

Commit 6cecd6f

Browse files
committed
merge with the latest develop
2 parents 11c163f + 7a4acf8 commit 6cecd6f

File tree

96 files changed

+6363
-4777
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

96 files changed

+6363
-4777
lines changed

CPV/src/wave.f90

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -88,21 +88,26 @@ subroutine elec_fakekine_x( ekincm, ema0bg, emass, c0, cm, ngw, n, noff, delt )
8888
real(DP) :: ftmp
8989
integer :: i
9090

91-
ALLOCATE( emainv( ngw ) )
92-
emainv = 1.0d0 / ema0bg
93-
ftmp = 1.0d0
94-
if( gstart == 2 ) ftmp = 0.5d0
95-
9691
ekincm=0.0d0
97-
do i = noff, n + noff - 1
98-
ekincm = ekincm + 2.0d0 * wave_speed2( c0(:,i), cm(:,i), emainv, ftmp )
99-
end do
100-
ekincm = ekincm * emass / ( delt * delt )
92+
93+
IF( ngw > 0 ) THEN
94+
95+
ALLOCATE( emainv( ngw ) )
96+
emainv = 1.0d0 / ema0bg
97+
ftmp = 1.0d0
98+
if( gstart == 2 ) ftmp = 0.5d0
99+
100+
do i = noff, n + noff - 1
101+
ekincm = ekincm + 2.0d0 * wave_speed2( c0(:,i), cm(:,i), emainv, ftmp )
102+
end do
103+
ekincm = ekincm * emass / ( delt * delt )
104+
DEALLOCATE( emainv )
105+
106+
END IF
101107

102108
CALL mp_sum( ekincm, intra_bgrp_comm )
103109
IF( nbgrp > 1 ) &
104110
CALL mp_sum( ekincm, inter_bgrp_comm )
105-
DEALLOCATE( emainv )
106111

107112
return
108113
end subroutine elec_fakekine_x

FFTXlib/fft_helper_subroutines.f90

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ SUBROUTINE tg_reduce_rho_1( rhos, tg_rho_nc, tg_rho, ispin, noncolin, domag, des
2121
REAL(DP), INTENT(INOUT) :: tg_rho_nc(:,:)
2222
REAL(DP), INTENT(OUT) :: rhos(:,:)
2323

24-
INTEGER :: ierr, ioff, idx, ir3, ir, ipol, ioff_tg, nxyp, npol_
24+
INTEGER :: ierr, ioff, ir3, ir, ipol, ioff_tg, nxyp, npol_
2525
! write (*,*) ' enter tg_reduce_rho_1'
2626

2727
#if defined(__MPI)
@@ -71,7 +71,7 @@ SUBROUTINE tg_reduce_rho_2( rhos, tmp_rhos, ispin, desc )
7171
REAL(DP), INTENT(INOUT) :: tmp_rhos(:)
7272
REAL(DP), INTENT(OUT) :: rhos(:,:)
7373

74-
INTEGER :: ierr, ioff, idx, ir3, nxyp, ioff_tg
74+
INTEGER :: ierr, ioff, ir3, nxyp, ioff_tg
7575
! write (*,*) ' enter tg_reduce_rho_2'
7676

7777
IF ( desc%nproc2 > 1 ) THEN

FFTXlib/fft_types.f90

Lines changed: 36 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -140,7 +140,7 @@ MODULE fft_types
140140

141141
PUBLIC :: fft_type_descriptor, fft_type_init
142142
PUBLIC :: fft_type_allocate, fft_type_deallocate
143-
PUBLIC :: fft_stick_index
143+
PUBLIC :: fft_stick_index, fft_index_to_3d
144144

145145
CONTAINS
146146

@@ -994,6 +994,41 @@ PURE FUNCTION fft_stick_index( desc, i, j )
994994
fft_stick_index = desc%isind ( mc )
995995
END FUNCTION
996996

997+
!
998+
SUBROUTINE fft_index_to_3d (ir, dfft, i,j,k, offrange)
999+
!
1000+
!! returns indices i,j,k yielding the position of grid point ir
1001+
!! in the real-space FFT grid described by descriptor dfft:
1002+
!! r(:,ir)= i*tau(:,1)/n1 + j*tau(:,2)/n2 + k*tau(:,3)/n3
1003+
!
1004+
IMPLICIT NONE
1005+
INTEGER, INTENT(IN) :: ir
1006+
!! point in the FFT real-space grid
1007+
TYPE(fft_type_descriptor), INTENT(IN) :: dfft
1008+
!! descriptor for the FFT grid
1009+
INTEGER, INTENT(OUT) :: i
1010+
!! (i,j,k) corresponding to grid point ir
1011+
INTEGER, INTENT(OUT) :: j
1012+
!! (i,j,k) corresponding to grid point ir
1013+
INTEGER, INTENT(OUT) :: k
1014+
!! (i,j,k) corresponding to grid point ir
1015+
LOGICAL, INTENT(OUT) :: offrange
1016+
!! true if computed i,j,k lie outside the physical range of values
1017+
!
1018+
i = ir - 1
1019+
k = i / (dfft%nr1x*dfft%my_nr2p)
1020+
i = i - (dfft%nr1x*dfft%my_nr2p) * k
1021+
j = i / dfft%nr1x
1022+
i = i - dfft%nr1x * j
1023+
j = j + dfft%my_i0r2p
1024+
k = k + dfft%my_i0r3p
1025+
!
1026+
offrange = (i < 0 .OR. i >= dfft%nr1 ) .OR. &
1027+
(j < 0 .OR. j >= dfft%nr2 ) .OR. &
1028+
(k < 0 .OR. k >= dfft%nr3 )
1029+
!
1030+
END SUBROUTINE fft_index_to_3d
1031+
9971032
!=----------------------------------------------------------------------------=!
9981033
END MODULE fft_types
9991034
!=----------------------------------------------------------------------------=!

GWW/head/head.f90

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,6 @@ PROGRAM head
104104
!
105105
! If necessary the bands are recalculated
106106
!
107-
!IF (setup_pw) CALL run_pwscf(do_band)
108107
IF (setup_pw) CALL run_nscf(do_band, iq)
109108
!
110109
! Initialize the quantities which do not depend on

Modules/compute_dipole.f90

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ SUBROUTINE compute_dipole( nnr, rho, r0, dipole, quadrupole )
1616
USE kinds, ONLY : DP
1717
USE cell_base, ONLY : at, bg, alat, omega
1818
USE fft_base, ONLY : dfftp
19+
USE fft_types, ONLY : fft_index_to_3d
1920
USE mp_bands, ONLY : intra_bgrp_comm
2021
USE mp, ONLY : mp_sum
2122
!
@@ -33,8 +34,9 @@ SUBROUTINE compute_dipole( nnr, rho, r0, dipole, quadrupole )
3334
! ... Local variables
3435
!
3536
REAL(DP) :: r(3), rhoir
36-
INTEGER :: i, j, k, ip, ir, ir_end, idx, j0, k0
37+
INTEGER :: i, j, k, ip, ir, ir_end
3738
REAL(DP) :: inv_nr1, inv_nr2, inv_nr3
39+
LOGICAL :: offrange
3840
!
3941
! ... Initialization
4042
!
@@ -46,28 +48,17 @@ SUBROUTINE compute_dipole( nnr, rho, r0, dipole, quadrupole )
4648
quadrupole(:) = 0.D0
4749
!
4850
#if defined (__MPI)
49-
j0 = dfftp%my_i0r2p ; k0 = dfftp%my_i0r3p
5051
ir_end = MIN(nnr,dfftp%nr1x*dfftp%my_nr2p*dfftp%my_nr3p)
5152
#else
52-
j0 = 0 ; k0 = 0
5353
ir_end = nnr
5454
#endif
5555
!
5656
DO ir = 1, ir_end
5757
!
5858
! ... three dimensional indexes
5959
!
60-
idx = ir -1
61-
k = idx / (dfftp%nr1x*dfftp%my_nr2p)
62-
idx = idx - (dfftp%nr1x*dfftp%my_nr2p)*k
63-
k = k + k0
64-
IF ( k .GE. dfftp%nr3 ) CYCLE
65-
j = idx / dfftp%nr1x
66-
idx = idx - dfftp%nr1x * j
67-
j = j + j0
68-
IF ( j .GE. dfftp%nr2 ) CYCLE
69-
i = idx
70-
IF ( i .GE. dfftp%nr1 ) CYCLE
60+
CALL fft_index_to_3d (ir, dfftp, i,j,k, offrange)
61+
IF ( offrange ) CYCLE
7162
!
7263
DO ip = 1, 3
7364
r(ip) = DBLE( i )*inv_nr1*at(ip,1) + &

Modules/fd_gradient.f90

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ SUBROUTINE calc_fd_gradient( nfdpoint, icfd, ncfd, nnr, f, grad )
2727
USE kinds, ONLY : DP
2828
USE cell_base, ONLY : at, bg, alat
2929
USE fft_base, ONLY : dfftp
30+
USE fft_types, ONLY : fft_index_to_3d
3031
USE scatter_mod, ONLY : scatter_grid
3132
USE mp, ONLY : mp_sum
3233
USE mp_bands, ONLY : me_bgrp, intra_bgrp_comm
@@ -40,37 +41,27 @@ SUBROUTINE calc_fd_gradient( nfdpoint, icfd, ncfd, nnr, f, grad )
4041
REAL( DP ), DIMENSION( nnr ), INTENT(IN) :: f
4142
REAL( DP ), DIMENSION( 3, nnr ), INTENT(OUT) :: grad
4243

43-
INTEGER :: idx, j0, k0, i, ir, ir_end, ipol, in
44+
INTEGER :: i, ir, ir_end, ipol, in
4445
INTEGER :: ix(-nfdpoint:nfdpoint),iy(-nfdpoint:nfdpoint),iz(-nfdpoint:nfdpoint)
4546
INTEGER :: ixc, iyc, izc, ixp, ixm, iyp, iym, izp, izm
4647
REAL( DP ), DIMENSION( :, : ), ALLOCATABLE :: gradtmp, gradaux
48+
LOGICAL :: offrange
4749
!
4850
grad = 0.D0
4951
!
5052
ALLOCATE( gradtmp( dfftp%nr1x*dfftp%nr2x*dfftp%nr3x, 3 ) )
5153
gradtmp = 0.D0
5254
!
5355
#if defined (__MPI)
54-
j0 = dfftp%my_i0r2p ; k0 = dfftp%my_i0r3p
5556
ir_end = MIN(nnr,dfftp%nr1x*dfftp%my_nr2p*dfftp%my_nr3p)
5657
#else
57-
j0 = 0 ; k0 = 0
5858
ir_end = nnr
5959
#endif
6060
!
6161
DO ir = 1, ir_end
6262
!
63-
idx = ir - 1
64-
iz(0) = idx / (dfftp%nr1x*dfftp%my_nr2p)
65-
idx = idx - (dfftp%nr1x*dfftp%my_nr2p)*iz(0)
66-
iz(0) = iz(0) + k0
67-
IF ( iz(0) .GE. dfftp%nr3 ) CYCLE ! if nr3x > nr3 skip unphysical part of the grid
68-
iy(0) = idx / dfftp%nr1x
69-
idx = idx - dfftp%nr1x*iy(0)
70-
iy(0) = iy(0) + j0
71-
IF ( iy(0) .GE. dfftp%nr2 ) CYCLE ! if nr2x > nr2 skip unphysical part of the grid
72-
ix(0) = idx
73-
IF ( ix(0) .GE. dfftp%nr1 ) CYCLE ! if nr1x > nr1 skip unphysical part of the grid
63+
CALL fft_index_to_3d (ir, dfftp, ix(0), iy(0), iz(0), offrange)
64+
IF ( offrange ) CYCLE
7465
!
7566
DO in = 1, nfdpoint
7667
ix(in) = ix(in-1) + 1

0 commit comments

Comments
 (0)