From 34785af4a6a04ab092b893dc2f8eeaa55a207b19 Mon Sep 17 00:00:00 2001 From: stamoor <stamoor@f3b2605a-c512-4ea7-a41b-209d697bcdaa> Date: Fri, 22 Jan 2016 23:35:38 +0000 Subject: [PATCH] Fixing Kokkos bugs git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@14472 f3b2605a-c512-4ea7-a41b-209d697bcdaa --- src/KOKKOS/pair_kokkos.h | 28 ++++++++++++++-------------- src/KOKKOS/pair_lj_cut_kokkos.cpp | 29 ++++++++++++++++++++++++++++- src/KOKKOS/pair_lj_cut_kokkos.h | 3 +++ 3 files changed, 45 insertions(+), 15 deletions(-) diff --git a/src/KOKKOS/pair_kokkos.h b/src/KOKKOS/pair_kokkos.h index eb188f9c14..b880654fbf 100644 --- a/src/KOKKOS/pair_kokkos.h +++ b/src/KOKKOS/pair_kokkos.h @@ -246,8 +246,8 @@ struct PairComputeFunctor { if (EFLAG) { if (c.eflag_atom) { const E_FLOAT epairhalf = 0.5 * epair; - if (NEWTON_PAIR || i < c.nlocal) eatom[i] += epairhalf; - if ((NEWTON_PAIR || j < c.nlocal) && NEIGHFLAG != FULL) eatom[j] += epairhalf; + if (NEWTON_PAIR || i < c.nlocal) c.d_eatom[i] += epairhalf; + if ((NEWTON_PAIR || j < c.nlocal) && NEIGHFLAG != FULL) c.d_eatom[j] += epairhalf; } } @@ -298,20 +298,20 @@ struct PairComputeFunctor { if (c.vflag_atom) { if (NEWTON_PAIR || i < c.nlocal) { - vatom(i,0) += 0.5*v0; - vatom(i,1) += 0.5*v1; - vatom(i,2) += 0.5*v2; - vatom(i,3) += 0.5*v3; - vatom(i,4) += 0.5*v4; - vatom(i,5) += 0.5*v5; + c.d_vatom(i,0) += 0.5*v0; + c.d_vatom(i,1) += 0.5*v1; + c.d_vatom(i,2) += 0.5*v2; + c.d_vatom(i,3) += 0.5*v3; + c.d_vatom(i,4) += 0.5*v4; + c.d_vatom(i,5) += 0.5*v5; } if ((NEWTON_PAIR || j < c.nlocal) && NEIGHFLAG != FULL) { - vatom(j,0) += 0.5*v0; - vatom(j,1) += 0.5*v1; - vatom(j,2) += 0.5*v2; - vatom(j,3) += 0.5*v3; - vatom(j,4) += 0.5*v4; - vatom(j,5) += 0.5*v5; + c.d_vatom(j,0) += 0.5*v0; + c.d_vatom(j,1) += 0.5*v1; + c.d_vatom(j,2) += 0.5*v2; + c.d_vatom(j,3) += 0.5*v3; + c.d_vatom(j,4) += 0.5*v4; + c.d_vatom(j,5) += 0.5*v5; } } } diff --git a/src/KOKKOS/pair_lj_cut_kokkos.cpp b/src/KOKKOS/pair_lj_cut_kokkos.cpp index 1e400c6413..3fd73350ed 100644 --- a/src/KOKKOS/pair_lj_cut_kokkos.cpp +++ b/src/KOKKOS/pair_lj_cut_kokkos.cpp @@ -57,8 +57,12 @@ template<class DeviceType> PairLJCutKokkos<DeviceType>::~PairLJCutKokkos() { if (allocated) { + memory->destroy_kokkos(k_eatom,eatom); + memory->destroy_kokkos(k_vatom,vatom); k_cutsq = DAT::tdual_ffloat_2d(); memory->sfree(cutsq); + eatom = NULL; + vatom = NULL; cutsq = NULL; } } @@ -88,6 +92,19 @@ void PairLJCutKokkos<DeviceType>::compute(int eflag_in, int vflag_in) if (eflag || vflag) ev_setup(eflag,vflag); else evflag = vflag_fdotr = 0; + // reallocate per-atom arrays if necessary + + if (eflag_atom) { + memory->destroy_kokkos(k_eatom,eatom); + memory->create_kokkos(k_eatom,eatom,maxeatom,"pair:eatom"); + d_eatom = k_eatom.view<DeviceType>(); + } + if (vflag_atom) { + memory->destroy_kokkos(k_vatom,vatom); + memory->create_kokkos(k_vatom,vatom,maxvatom,6,"pair:vatom"); + d_vatom = k_vatom.view<DeviceType>(); + } + atomKK->sync(execution_space,datamask_read); k_cutsq.template sync<DeviceType>(); k_params.template sync<DeviceType>(); @@ -112,7 +129,7 @@ void PairLJCutKokkos<DeviceType>::compute(int eflag_in, int vflag_in) EV_FLOAT ev = pair_compute<PairLJCutKokkos<DeviceType>,void >(this,(NeighListKokkos<DeviceType>*)list); DeviceType::fence(); - if (eflag) eng_vdwl += ev.evdwl; + if (eflag_global) eng_vdwl += ev.evdwl; if (vflag_global) { virial[0] += ev.v[0]; virial[1] += ev.v[1]; @@ -123,6 +140,16 @@ void PairLJCutKokkos<DeviceType>::compute(int eflag_in, int vflag_in) } if (vflag_fdotr) pair_virial_fdotr_compute(this); + + if (eflag_atom) { + k_eatom.template modify<DeviceType>(); + k_eatom.template sync<LMPHostType>(); + } + + if (vflag_atom) { + k_vatom.template modify<DeviceType>(); + k_vatom.template sync<LMPHostType>(); + } } template<class DeviceType> diff --git a/src/KOKKOS/pair_lj_cut_kokkos.h b/src/KOKKOS/pair_lj_cut_kokkos.h index 37046e457a..88e13ea9ad 100644 --- a/src/KOKKOS/pair_lj_cut_kokkos.h +++ b/src/KOKKOS/pair_lj_cut_kokkos.h @@ -77,6 +77,9 @@ class PairLJCutKokkos : public PairLJCut { typename ArrayTypes<DeviceType>::t_x_array c_x; typename ArrayTypes<DeviceType>::t_f_array f; typename ArrayTypes<DeviceType>::t_int_1d_randomread type; + + DAT::tdual_efloat_1d k_eatom; + DAT::tdual_virial_array k_vatom; typename ArrayTypes<DeviceType>::t_efloat_1d d_eatom; typename ArrayTypes<DeviceType>::t_virial_array d_vatom; typename ArrayTypes<DeviceType>::t_tagint_1d tag; -- GitLab