diff --git a/src/KOKKOS/pair_meam_kokkos.cpp b/src/KOKKOS/pair_meam_kokkos.cpp index c0f18a2969..86b4a2ed51 100644 --- a/src/KOKKOS/pair_meam_kokkos.cpp +++ b/src/KOKKOS/pair_meam_kokkos.cpp @@ -123,6 +123,7 @@ void PairMEAMKokkos::compute(int eflag_in, int vflag_in) Kokkos::parallel_reduce(Kokkos::RangePolicy(0,inum_half),*this,n); meam_inst_kk->meam_dens_setup(atom->nmax, nall, n); + update_meam_views(); x = atomKK->k_x.view(); f = atomKK->k_f.view(); @@ -324,35 +325,35 @@ KOKKOS_INLINE_FUNCTION void PairMEAMKokkos::operator()(TagPairMEAMPackForwardComm, const int &i) const { int j = d_sendlist(iswap, i); int m = i*38; - v_buf[m++] = meam_inst_kk->d_rho0[j]; - v_buf[m++] = meam_inst_kk->d_rho1[j]; - v_buf[m++] = meam_inst_kk->d_rho2[j]; - v_buf[m++] = meam_inst_kk->d_rho3[j]; - v_buf[m++] = meam_inst_kk->d_frhop[j]; - v_buf[m++] = meam_inst_kk->d_gamma[j]; - v_buf[m++] = meam_inst_kk->d_dgamma1[j]; - v_buf[m++] = meam_inst_kk->d_dgamma2[j]; - v_buf[m++] = meam_inst_kk->d_dgamma3[j]; - v_buf[m++] = meam_inst_kk->d_arho2b[j]; - v_buf[m++] = meam_inst_kk->d_arho1(j,0); - v_buf[m++] = meam_inst_kk->d_arho1(j,1); - v_buf[m++] = meam_inst_kk->d_arho1(j,2); - v_buf[m++] = meam_inst_kk->d_arho2(j,0); - v_buf[m++] = meam_inst_kk->d_arho2(j,1); - v_buf[m++] = meam_inst_kk->d_arho2(j,2); - v_buf[m++] = meam_inst_kk->d_arho2(j,3); - v_buf[m++] = meam_inst_kk->d_arho2(j,4); - v_buf[m++] = meam_inst_kk->d_arho2(j,5); - for (int k = 0; k < 10; k++) v_buf[m++] = meam_inst_kk->d_arho3(j,k); - v_buf[m++] = meam_inst_kk->d_arho3b(j,0); - v_buf[m++] = meam_inst_kk->d_arho3b(j,1); - v_buf[m++] = meam_inst_kk->d_arho3b(j,2); - v_buf[m++] = meam_inst_kk->d_t_ave(j,0); - v_buf[m++] = meam_inst_kk->d_t_ave(j,1); - v_buf[m++] = meam_inst_kk->d_t_ave(j,2); - v_buf[m++] = meam_inst_kk->d_tsq_ave(j,0); - v_buf[m++] = meam_inst_kk->d_tsq_ave(j,1); - v_buf[m++] = meam_inst_kk->d_tsq_ave(j,2); + v_buf[m++] = d_rho0[j]; + v_buf[m++] = d_rho1[j]; + v_buf[m++] = d_rho2[j]; + v_buf[m++] = d_rho3[j]; + v_buf[m++] = d_frhop[j]; + v_buf[m++] = d_gamma[j]; + v_buf[m++] = d_dgamma1[j]; + v_buf[m++] = d_dgamma2[j]; + v_buf[m++] = d_dgamma3[j]; + v_buf[m++] = d_arho2b[j]; + v_buf[m++] = d_arho1(j,0); + v_buf[m++] = d_arho1(j,1); + v_buf[m++] = d_arho1(j,2); + v_buf[m++] = d_arho2(j,0); + v_buf[m++] = d_arho2(j,1); + v_buf[m++] = d_arho2(j,2); + v_buf[m++] = d_arho2(j,3); + v_buf[m++] = d_arho2(j,4); + v_buf[m++] = d_arho2(j,5); + for (int k = 0; k < 10; k++) v_buf[m++] = d_arho3(j,k); + v_buf[m++] = d_arho3b(j,0); + v_buf[m++] = d_arho3b(j,1); + v_buf[m++] = d_arho3b(j,2); + v_buf[m++] = d_t_ave(j,0); + v_buf[m++] = d_t_ave(j,1); + v_buf[m++] = d_t_ave(j,2); + v_buf[m++] = d_tsq_ave(j,0); + v_buf[m++] = d_tsq_ave(j,1); + v_buf[m++] = d_tsq_ave(j,2); } /* ---------------------------------------------------------------------- */ @@ -372,35 +373,35 @@ KOKKOS_INLINE_FUNCTION void PairMEAMKokkos::operator()(TagPairMEAMUnpackForwardComm, const int &i) const{ int m = i*38; - meam_inst_kk->d_rho0[i+first] = v_buf[m++]; - meam_inst_kk->d_rho1[i+first] = v_buf[m++]; - meam_inst_kk->d_rho2[i+first] = v_buf[m++]; - meam_inst_kk->d_rho3[i+first] = v_buf[m++]; - meam_inst_kk->d_frhop[i+first] = v_buf[m++]; - meam_inst_kk->d_gamma[i+first] = v_buf[m++]; - meam_inst_kk->d_dgamma1[i+first] = v_buf[m++]; - meam_inst_kk->d_dgamma2[i+first] = v_buf[m++]; - meam_inst_kk->d_dgamma3[i+first] = v_buf[m++]; - meam_inst_kk->d_arho2b[i+first] = v_buf[m++]; - meam_inst_kk->d_arho1(i+first,0) = v_buf[m++]; - meam_inst_kk->d_arho1(i+first,1) = v_buf[m++]; - meam_inst_kk->d_arho1(i+first,2) = v_buf[m++]; - meam_inst_kk->d_arho2(i+first,0) = v_buf[m++]; - meam_inst_kk->d_arho2(i+first,1) = v_buf[m++]; - meam_inst_kk->d_arho2(i+first,2) = v_buf[m++]; - meam_inst_kk->d_arho2(i+first,3) = v_buf[m++]; - meam_inst_kk->d_arho2(i+first,4) = v_buf[m++]; - meam_inst_kk->d_arho2(i+first,5) = v_buf[m++]; - for (int k = 0; k < 10; k++) meam_inst_kk->d_arho3(i+first,k) = v_buf[m++]; - meam_inst_kk->d_arho3b(i+first,0) = v_buf[m++]; - meam_inst_kk->d_arho3b(i+first,1) = v_buf[m++]; - meam_inst_kk->d_arho3b(i+first,2) = v_buf[m++]; - meam_inst_kk->d_t_ave(i+first,0) = v_buf[m++]; - meam_inst_kk->d_t_ave(i+first,1) = v_buf[m++]; - meam_inst_kk->d_t_ave(i+first,2) = v_buf[m++]; - meam_inst_kk->d_tsq_ave(i+first,0) = v_buf[m++]; - meam_inst_kk->d_tsq_ave(i+first,1) = v_buf[m++]; - meam_inst_kk->d_tsq_ave(i+first,2) = v_buf[m++]; + d_rho0[i+first] = v_buf[m++]; + d_rho1[i+first] = v_buf[m++]; + d_rho2[i+first] = v_buf[m++]; + d_rho3[i+first] = v_buf[m++]; + d_frhop[i+first] = v_buf[m++]; + d_gamma[i+first] = v_buf[m++]; + d_dgamma1[i+first] = v_buf[m++]; + d_dgamma2[i+first] = v_buf[m++]; + d_dgamma3[i+first] = v_buf[m++]; + d_arho2b[i+first] = v_buf[m++]; + d_arho1(i+first,0) = v_buf[m++]; + d_arho1(i+first,1) = v_buf[m++]; + d_arho1(i+first,2) = v_buf[m++]; + d_arho2(i+first,0) = v_buf[m++]; + d_arho2(i+first,1) = v_buf[m++]; + d_arho2(i+first,2) = v_buf[m++]; + d_arho2(i+first,3) = v_buf[m++]; + d_arho2(i+first,4) = v_buf[m++]; + d_arho2(i+first,5) = v_buf[m++]; + for (int k = 0; k < 10; k++) d_arho3(i+first,k) = v_buf[m++]; + d_arho3b(i+first,0) = v_buf[m++]; + d_arho3b(i+first,1) = v_buf[m++]; + d_arho3b(i+first,2) = v_buf[m++]; + d_t_ave(i+first,0) = v_buf[m++]; + d_t_ave(i+first,1) = v_buf[m++]; + d_t_ave(i+first,2) = v_buf[m++]; + d_tsq_ave(i+first,0) = v_buf[m++]; + d_tsq_ave(i+first,1) = v_buf[m++]; + d_tsq_ave(i+first,2) = v_buf[m++]; } /* ---------------------------------------------------------------------- */ @@ -555,27 +556,27 @@ KOKKOS_INLINE_FUNCTION void PairMEAMKokkos::operator()(TagPairMEAMPackReverseComm, const int &i) const { int m = i*30; - v_buf[m++] = meam_inst_kk->d_rho0[i+first]; - v_buf[m++] = meam_inst_kk->d_arho2b[i+first]; - v_buf[m++] = meam_inst_kk->d_arho1(i+first,0); - v_buf[m++] = meam_inst_kk->d_arho1(i+first,1); - v_buf[m++] = meam_inst_kk->d_arho1(i+first,2); - v_buf[m++] = meam_inst_kk->d_arho2(i+first,0); - v_buf[m++] = meam_inst_kk->d_arho2(i+first,1); - v_buf[m++] = meam_inst_kk->d_arho2(i+first,2); - v_buf[m++] = meam_inst_kk->d_arho2(i+first,3); - v_buf[m++] = meam_inst_kk->d_arho2(i+first,4); - v_buf[m++] = meam_inst_kk->d_arho2(i+first,5); - for (int k = 0; k < 10; k++) v_buf[m++] = meam_inst_kk->d_arho3(i+first,k); - v_buf[m++] = meam_inst_kk->d_arho3b(i+first,0); - v_buf[m++] = meam_inst_kk->d_arho3b(i+first,1); - v_buf[m++] = meam_inst_kk->d_arho3b(i+first,2); - v_buf[m++] = meam_inst_kk->d_t_ave(i+first,0); - v_buf[m++] = meam_inst_kk->d_t_ave(i+first,1); - v_buf[m++] = meam_inst_kk->d_t_ave(i+first,2); - v_buf[m++] = meam_inst_kk->d_tsq_ave(i+first,0); - v_buf[m++] = meam_inst_kk->d_tsq_ave(i+first,1); - v_buf[m++] = meam_inst_kk->d_tsq_ave(i+first,2); + v_buf[m++] = d_rho0[i+first]; + v_buf[m++] = d_arho2b[i+first]; + v_buf[m++] = d_arho1(i+first,0); + v_buf[m++] = d_arho1(i+first,1); + v_buf[m++] = d_arho1(i+first,2); + v_buf[m++] = d_arho2(i+first,0); + v_buf[m++] = d_arho2(i+first,1); + v_buf[m++] = d_arho2(i+first,2); + v_buf[m++] = d_arho2(i+first,3); + v_buf[m++] = d_arho2(i+first,4); + v_buf[m++] = d_arho2(i+first,5); + for (int k = 0; k < 10; k++) v_buf[m++] = d_arho3(i+first,k); + v_buf[m++] = d_arho3b(i+first,0); + v_buf[m++] = d_arho3b(i+first,1); + v_buf[m++] = d_arho3b(i+first,2); + v_buf[m++] = d_t_ave(i+first,0); + v_buf[m++] = d_t_ave(i+first,1); + v_buf[m++] = d_t_ave(i+first,2); + v_buf[m++] = d_tsq_ave(i+first,0); + v_buf[m++] = d_tsq_ave(i+first,1); + v_buf[m++] = d_tsq_ave(i+first,2); } /* ---------------------------------------------------------------------- */ @@ -640,27 +641,27 @@ void PairMEAMKokkos::operator()(TagPairMEAMUnpackReverseComm, const int j = d_sendlist(iswap, i); int m = i*30; - meam_inst_kk->d_rho0[j] += v_buf[m++]; - meam_inst_kk->d_arho2b[j] += v_buf[m++]; - meam_inst_kk->d_arho1(j,0) += v_buf[m++]; - meam_inst_kk->d_arho1(j,1) += v_buf[m++]; - meam_inst_kk->d_arho1(j,2) += v_buf[m++]; - meam_inst_kk->d_arho2(j,0) += v_buf[m++]; - meam_inst_kk->d_arho2(j,1) += v_buf[m++]; - meam_inst_kk->d_arho2(j,2) += v_buf[m++]; - meam_inst_kk->d_arho2(j,3) += v_buf[m++]; - meam_inst_kk->d_arho2(j,4) += v_buf[m++]; - meam_inst_kk->d_arho2(j,5) += v_buf[m++]; - for (int k = 0; k < 10; k++) meam_inst_kk->d_arho3(j,k) += v_buf[m++]; - meam_inst_kk->d_arho3b(j,0) += v_buf[m++]; - meam_inst_kk->d_arho3b(j,1) += v_buf[m++]; - meam_inst_kk->d_arho3b(j,2) += v_buf[m++]; - meam_inst_kk->d_t_ave(j,0) += v_buf[m++]; - meam_inst_kk->d_t_ave(j,1) += v_buf[m++]; - meam_inst_kk->d_t_ave(j,2) += v_buf[m++]; - meam_inst_kk->d_tsq_ave(j,0) += v_buf[m++]; - meam_inst_kk->d_tsq_ave(j,1) += v_buf[m++]; - meam_inst_kk->d_tsq_ave(j,2) += v_buf[m++]; + d_rho0[j] += v_buf[m++]; + d_arho2b[j] += v_buf[m++]; + d_arho1(j,0) += v_buf[m++]; + d_arho1(j,1) += v_buf[m++]; + d_arho1(j,2) += v_buf[m++]; + d_arho2(j,0) += v_buf[m++]; + d_arho2(j,1) += v_buf[m++]; + d_arho2(j,2) += v_buf[m++]; + d_arho2(j,3) += v_buf[m++]; + d_arho2(j,4) += v_buf[m++]; + d_arho2(j,5) += v_buf[m++]; + for (int k = 0; k < 10; k++) d_arho3(j,k) += v_buf[m++]; + d_arho3b(j,0) += v_buf[m++]; + d_arho3b(j,1) += v_buf[m++]; + d_arho3b(j,2) += v_buf[m++]; + d_t_ave(j,0) += v_buf[m++]; + d_t_ave(j,1) += v_buf[m++]; + d_t_ave(j,2) += v_buf[m++]; + d_tsq_ave(j,0) += v_buf[m++]; + d_tsq_ave(j,1) += v_buf[m++]; + d_tsq_ave(j,2) += v_buf[m++]; } /* ---------------------------------------------------------------------- */ @@ -744,6 +745,29 @@ void PairMEAMKokkos::operator()(TagPairMEAMOffsets, const int ii, in /* ---------------------------------------------------------------------- */ +template +void PairMEAMKokkos::update_meam_views() +{ + d_rho0 = meam_inst_kk->d_rho0; + d_rho1 = meam_inst_kk->d_rho1; + d_rho2 = meam_inst_kk->d_rho2; + d_rho3 = meam_inst_kk->d_rho3; + d_frhop = meam_inst_kk->d_frhop; + d_gamma = meam_inst_kk->d_gamma; + d_dgamma1 = meam_inst_kk->d_dgamma1; + d_dgamma2 = meam_inst_kk->d_dgamma2; + d_dgamma3 = meam_inst_kk->d_dgamma3; + d_arho1 = meam_inst_kk->d_arho1; + d_arho2 = meam_inst_kk->d_arho2; + d_arho3 = meam_inst_kk->d_arho3; + d_arho2b = meam_inst_kk->d_arho2b; + d_arho3b = meam_inst_kk->d_arho3b; + d_t_ave = meam_inst_kk->d_t_ave; + d_tsq_ave = meam_inst_kk->d_tsq_ave; +} + +/* ---------------------------------------------------------------------- */ + namespace LAMMPS_NS { template class PairMEAMKokkos; #ifdef KOKKOS_ENABLE_CUDA diff --git a/src/KOKKOS/pair_meam_kokkos.h b/src/KOKKOS/pair_meam_kokkos.h index fef4266b8a..a213c1e9b1 100644 --- a/src/KOKKOS/pair_meam_kokkos.h +++ b/src/KOKKOS/pair_meam_kokkos.h @@ -114,6 +114,12 @@ class PairMEAMKokkos : public PairMEAM, public KokkosBase { int iswap,first; int neighflag,nlocal,nall,eflag,vflag; + typename ArrayTypes::t_ffloat_1d d_rho, d_rho0, d_rho1, d_rho2, d_rho3, d_frhop; + typename ArrayTypes::t_ffloat_1d d_gamma, d_dgamma1, d_dgamma2, d_dgamma3, d_arho2b; + typename ArrayTypes::t_ffloat_2d d_arho1, d_arho2, d_arho3, d_arho3b, d_t_ave, d_tsq_ave; + + void update_meam_views(); + friend void pair_virial_fdotr_compute(PairMEAMKokkos*); };