|
| 1 | +! |
| 2 | +! \author Kwanmgin Yu <[email protected]> |
| 3 | +! |
| 4 | +! |
| 5 | + |
| 6 | + |
| 7 | +!--------------------------- |
| 8 | +SUBROUTINE h_psiq_k_gpu(lda, n, m, psi, hpsi, spsi) |
| 9 | +!--------------------------- |
| 10 | + USE kinds, ONLY : DP |
| 11 | + USE gvecs, ONLY : nls, ngms |
| 12 | + USE wvfct, ONLY : g2kin, npwx |
| 13 | + USE fft_base, ONLY : dffts |
| 14 | + USE wavefunctions_module, ONLY : psic, psic_nc |
| 15 | + USE becmod, ONLY : bec_type, becp, calbec |
| 16 | + USE noncollin_module, ONLY : noncolin, npol |
| 17 | + USE lsda_mod, ONLY : current_spin |
| 18 | + USE fft_interfaces, ONLY: fwfft, invfft |
| 19 | + USE spin_orb, ONLY : domag |
| 20 | + USE scf, ONLY : vrs |
| 21 | + USE uspp, ONLY : vkb |
| 22 | + USE qpoint, ONLY: igkq, nksq |
| 23 | + USE control_flags, ONLY : gamma_only ! Needed only for TDDFPT |
| 24 | + USE mp_pools, ONLY: npool |
| 25 | + |
| 26 | + |
| 27 | + IMPLICIT NONE |
| 28 | + ! |
| 29 | + INTEGER, INTENT(in) :: lda, n, m |
| 30 | + !INTEGER, POINTER :: igkq(:) |
| 31 | + COMPLEX(DP), INTENT(INOUT) :: psi (lda*npol, m) |
| 32 | + COMPLEX(DP), INTENT(OUT) :: hpsi (lda*npol, m), spsi (lda*npol, m) |
| 33 | + ! |
| 34 | + INTEGER, EXTERNAL :: h_psiq_cuda_k |
| 35 | + ! |
| 36 | + INTEGER :: ierr |
| 37 | + INTEGER :: i,j |
| 38 | + |
| 39 | + |
| 40 | + |
| 41 | + CALL calbec ( n, vkb, psi, becp, m) |
| 42 | + |
| 43 | + ierr = h_psiq_cuda_k( lda, npol, dffts%nnr, dffts%nr1x, dffts%nr2x, dffts%nr3x, n, m, psi, vrs(:,current_spin), hpsi, igkq(1:), nls(1:), ngms, g2kin) |
| 44 | + |
| 45 | + |
| 46 | + IF (ierr.EQ.1) THEN |
| 47 | + !CPU fall-back |
| 48 | + write (*,*) 'h_psiq_k_gpu()::ierr : ', ierr |
| 49 | + CALL h_psiq() |
| 50 | + ENDIF |
| 51 | + |
| 52 | + CALL add_vuspsi (lda, n, m, hpsi) |
| 53 | + |
| 54 | + CALL s_psi (lda, n, m, psi, spsi) |
| 55 | + |
| 56 | + ! |
| 57 | + RETURN |
| 58 | +END SUBROUTINE h_psiq_k_gpu |
| 59 | + |
0 commit comments