Commit 34785af4 authored by stamoor's avatar stamoor
Browse files

Fixing Kokkos bugs

git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@14472 f3b2605a-c512-4ea7-a41b-209d697bcdaa
parent c8fb8478
Loading
Loading
Loading
Loading
+14 −14
Original line number Diff line number Diff line
@@ -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;
        }
      }
    }
+28 −1
Original line number Diff line number Diff line
@@ -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>
+3 −0
Original line number Diff line number Diff line
@@ -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;