diff --git a/src/KOKKOS/pppm_kokkos.cpp b/src/KOKKOS/pppm_kokkos.cpp index 3fe93f6825..e2956036c3 100644 --- a/src/KOKKOS/pppm_kokkos.cpp +++ b/src/KOKKOS/pppm_kokkos.cpp @@ -479,9 +479,13 @@ void PPPMKokkos::setup_triclinic() delzinv = nz_pppm; delvolinv = delxinv*delyinv*delzinv/volume; + numz_fft = nzhi_fft-nzlo_fft + 1; + numy_fft = nyhi_fft-nylo_fft + 1; + numx_fft = nxhi_fft-nxlo_fft + 1; + const int inum_fft = numz_fft*numy_fft*numx_fft; + copymode = 1; - Kokkos::parallel_for(Kokkos::MDRangePolicy, DeviceType, TagPPPM_setup_triclinic1>\ - ({nzlo_fft, nylo_fft, nxlo_fft}, {nzhi_fft+1, nyhi_fft+1, nxhi_fft+1}),*this); + Kokkos::parallel_for(Kokkos::RangePolicy(0,inum_fft),*this); copymode = 0; // virial coefficients @@ -495,14 +499,18 @@ void PPPMKokkos::setup_triclinic() template KOKKOS_INLINE_FUNCTION -void PPPMKokkos::operator()(TagPPPM_setup_triclinic1, const int &k, const int &j, const int& i) const +void PPPMKokkos::operator()(TagPPPM_setup_triclinic1, const int &n) const { + int k = n/(numy_fft*numx_fft); + int j = (n - k*numy_fft*numx_fft) / numx_fft; + int i = n - k*numy_fft*numx_fft - j*numx_fft; + k += nzlo_fft; + j += nylo_fft; + i += nxlo_fft; + double per_k = k - nz_pppm*(2*k/nz_pppm); double per_j = j - ny_pppm*(2*j/ny_pppm); double per_i = i - nx_pppm*(2*i/nx_pppm); - // n corresponds to the "number" of this iteration if we were to execute the loop monotonically and in serial - int n = (nxhi_fft - nxlo_fft + 1)*(nyhi_fft - nylo_fft + 1)*(k - nzlo_fft)+ - (nxhi_fft - nxlo_fft + 1)*(j - nylo_fft) + (i - nxlo_fft); double unitk_lamda[3]; unitk_lamda[0] = 2.0*MY_PI*per_i; diff --git a/src/KOKKOS/pppm_kokkos.h b/src/KOKKOS/pppm_kokkos.h index e7c55b1726..ad8612e637 100644 --- a/src/KOKKOS/pppm_kokkos.h +++ b/src/KOKKOS/pppm_kokkos.h @@ -141,7 +141,7 @@ class PPPMKokkos : public PPPM, public KokkosBaseFFT { void operator()(TagPPPM_setup4, const int&) const; KOKKOS_INLINE_FUNCTION - void operator()(TagPPPM_setup_triclinic1, const int&, const int&, const int&) const; + void operator()(TagPPPM_setup_triclinic1, const int&) const; KOKKOS_INLINE_FUNCTION void operator()(TagPPPM_setup_triclinic2, const int&) const;