Commit 8a9a7f4e authored by Stan Moore's avatar Stan Moore
Browse files

Fix issues

parent d2da1f57
Loading
Loading
Loading
Loading
+5 −5
Original line number Diff line number Diff line
@@ -255,7 +255,7 @@ void FixQEqReaxKokkos<DeviceType>::pre_force(int vflag)
  k_t.template sync<DeviceType>();

  if (neighflag != FULL)
    red_o = Kokkos::Experimental::create_reduction_view<> (k_o.d_view); // allocate duplicated memory
    red_o = Kokkos::Experimental::create_reduction_view<> (d_o); // allocate duplicated memory

  // 1st cg solve over b_s, s
  cg_solve1();
@@ -502,7 +502,7 @@ void FixQEqReaxKokkos<DeviceType>::cg_solve1()
    Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType,TagZeroQGhosts>(nlocal,nlocal+atom->nghost),*this);
    FixQEqReaxKokkosSparse13Functor<DeviceType,HALFTHREAD> sparse13_functor(this);
    Kokkos::parallel_for(inum,sparse13_functor);
    Kokkos::Experimental::contribute(k_o.d_view, red_o);
    Kokkos::Experimental::contribute(d_o, red_o);
  } else {
    Kokkos::parallel_for(Kokkos::TeamPolicy <DeviceType, TagSparseMatvec1> (inum, teamsize), *this);
  }
@@ -553,7 +553,7 @@ void FixQEqReaxKokkos<DeviceType>::cg_solve1()
      red_o.reset_except(d_o);
      FixQEqReaxKokkosSparse23Functor<DeviceType,HALFTHREAD> sparse23_functor(this);
      Kokkos::parallel_for(inum,sparse23_functor);
      Kokkos::Experimental::contribute(k_o.d_view, red_o);
      Kokkos::Experimental::contribute(d_o, red_o);
    } else {
      Kokkos::parallel_for(Kokkos::TeamPolicy <DeviceType, TagSparseMatvec2> (inum, teamsize), *this);
    }
@@ -626,7 +626,7 @@ void FixQEqReaxKokkos<DeviceType>::cg_solve2()
    red_o.reset_except(d_o);
    FixQEqReaxKokkosSparse33Functor<DeviceType,HALFTHREAD> sparse33_functor(this);
    Kokkos::parallel_for(inum,sparse33_functor);
    Kokkos::Experimental::contribute(k_o.d_view, red_o);
    Kokkos::Experimental::contribute(d_o, red_o);
  } else {
    Kokkos::parallel_for(Kokkos::TeamPolicy <DeviceType, TagSparseMatvec3> (inum, teamsize), *this);
  }
@@ -677,7 +677,7 @@ void FixQEqReaxKokkos<DeviceType>::cg_solve2()
      red_o.reset_except(d_o);
      FixQEqReaxKokkosSparse23Functor<DeviceType,HALFTHREAD> sparse23_functor(this);
      Kokkos::parallel_for(inum,sparse23_functor);
      Kokkos::Experimental::contribute(k_o.d_view, red_o);
      Kokkos::Experimental::contribute(d_o, red_o);
    } else {
      Kokkos::parallel_for(Kokkos::TeamPolicy <DeviceType, TagSparseMatvec2> (inum, teamsize), *this);
    }
+2 −2
Original line number Diff line number Diff line
@@ -19,10 +19,10 @@
#define LMP_PAIR_KOKKOS_H

#include "Kokkos_Macros.hpp"
#include "Kokkos_Vectorization.hpp"
#include "Kokkos_ReductionView.hpp"
#include "pair.h"
#include "neigh_list_kokkos.h"
#include "Kokkos_Vectorization.hpp"
#include "Kokkos_ReductionView.hpp"

namespace LAMMPS_NS {

+41 −59
Original line number Diff line number Diff line
@@ -712,11 +712,9 @@ void PairReaxCKokkos<DeviceType>::compute(int eflag_in, int vflag_in)
  d_ilist = k_list->d_ilist;

  // allocate duplicated memory
  if (neighflag != FULL) {
  dup_f            = Kokkos::Experimental::create_reduction_view<>(f);
  dup_eatom        = Kokkos::Experimental::create_reduction_view<>(v_eatom);
  dup_vatom        = Kokkos::Experimental::create_reduction_view<>(v_vatom);
  }

  if (eflag_global) {
    for (int i = 0; i < 14; i++)
@@ -788,10 +786,8 @@ void PairReaxCKokkos<DeviceType>::compute(int eflag_in, int vflag_in)
  }

  // allocate duplicated memory
  if (neighflag != FULL) {
  dup_dDeltap_self = Kokkos::Experimental::create_reduction_view<>(d_dDeltap_self);
  dup_total_bo     = Kokkos::Experimental::create_reduction_view<>(d_total_bo);
  }

  // Neighbor lists for bond and hbond

@@ -832,23 +828,18 @@ void PairReaxCKokkos<DeviceType>::compute(int eflag_in, int vflag_in)
    resize = resize_bo || resize_hb;
    if (resize) {
      allocate_array();
      if (neighflag != FULL) {
      dup_dDeltap_self = Kokkos::Experimental::create_reduction_view<>(d_dDeltap_self);
      dup_total_bo     = Kokkos::Experimental::create_reduction_view<>(d_total_bo);
    }
  }
  }

  // allocate duplicated memory
  if (neighflag != FULL) {
  dup_CdDelta = Kokkos::Experimental::create_reduction_view<>(d_CdDelta);
  //dup_Cdbo    = Kokkos::Experimental::create_reduction_view<>(d_Cdbo);
  //dup_Cdbopi  = Kokkos::Experimental::create_reduction_view<>(d_Cdbopi);
  //dup_Cdbopi2 = Kokkos::Experimental::create_reduction_view<>(d_Cdbopi2);
  }

  // reduction over duplicated memory
  if (neighflag != FULL)
  Kokkos::Experimental::contribute(d_total_bo, dup_total_bo); // needed in BondOrder1

  // Bond order
@@ -955,7 +946,6 @@ void PairReaxCKokkos<DeviceType>::compute(int eflag_in, int vflag_in)
  ev_all.evdwl += ev.ereax[8];

  // reduction over duplicated memory
  if (neighflag != FULL) {
  Kokkos::Experimental::contribute(d_dDeltap_self, dup_dDeltap_self); // needed in ComputeBond2
  Kokkos::Experimental::contribute(d_CdDelta, dup_CdDelta); // needed in ComputeBond2

@@ -965,18 +955,16 @@ void PairReaxCKokkos<DeviceType>::compute(int eflag_in, int vflag_in)
  //dup_Cdbo.reset_except(d_Cdbo);
  //dup_Cdbopi.reset_except(d_Cdbopi);
  //dup_Cdbopi2.reset_except(d_Cdbopi2);
  }

  // Bond force
  if (neighflag == HALF) {
    Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType, PairReaxUpdateBond<HALF> >(0,ignum),*this);

    // reduction over duplicated memory
    //if (neighflag != FULL) {
    //Kokkos::Experimental::contribute(d_Cdbo, dup_Cdbo); // needed in ComputeBond2
    //Kokkos::Experimental::contribute(d_Cdbopi, dup_Cdbopi); // needed in ComputeBond2
    //Kokkos::Experimental::contribute(d_Cdbopi2, dup_Cdbopi2); // needed in ComputeBond2
    //}

    if (evflag)
      Kokkos::parallel_reduce(Kokkos::RangePolicy<DeviceType, PairReaxComputeBond2<HALF,1> >(0,ignum),*this,ev);
    else
@@ -987,11 +975,10 @@ void PairReaxCKokkos<DeviceType>::compute(int eflag_in, int vflag_in)
    Kokkos::parallel_for(Kokkos::RangePolicy<DeviceType, PairReaxUpdateBond<HALFTHREAD> >(0,ignum),*this);

    // reduction over duplicated memory
    //if (neighflag != FULL) {
    //Kokkos::Experimental::contribute(d_Cdbo, dup_Cdbo); // needed in ComputeBond2
    //Kokkos::Experimental::contribute(d_Cdbopi, dup_Cdbopi); // needed in ComputeBond2
    //Kokkos::Experimental::contribute(d_Cdbopi2, dup_Cdbopi2); // needed in ComputeBond2
    //}

    if (evflag)
      Kokkos::parallel_reduce(Kokkos::RangePolicy<DeviceType, PairReaxComputeBond2<HALFTHREAD,1> >(0,ignum),*this,ev);
    else
@@ -1001,7 +988,6 @@ void PairReaxCKokkos<DeviceType>::compute(int eflag_in, int vflag_in)
  }

  // reduction over duplicated memory
  if (neighflag != FULL)
  Kokkos::Experimental::contribute(f, dup_f);

  if (eflag_global) {
@@ -1020,14 +1006,12 @@ void PairReaxCKokkos<DeviceType>::compute(int eflag_in, int vflag_in)
  if (vflag_fdotr) pair_virial_fdotr_compute(this);

  if (eflag_atom) {
    if (neighflag != FULL)
    Kokkos::Experimental::contribute(v_eatom, dup_eatom);
    k_eatom.template modify<DeviceType>();
    k_eatom.template sync<LMPHostType>();
  }

  if (vflag_atom) {
    if (neighflag != FULL)
    Kokkos::Experimental::contribute(v_vatom, dup_vatom);
    k_vatom.template modify<DeviceType>();
    k_vatom.template sync<LMPHostType>();
@@ -1037,7 +1021,6 @@ void PairReaxCKokkos<DeviceType>::compute(int eflag_in, int vflag_in)
    FindBondSpecies();

  // free duplicated memory
  if (neighflag != FULL) {
  dup_f            = decltype(dup_f)();
  dup_dDeltap_self = decltype(dup_dDeltap_self)();
  dup_total_bo     = decltype(dup_total_bo)();
@@ -1047,7 +1030,6 @@ void PairReaxCKokkos<DeviceType>::compute(int eflag_in, int vflag_in)
  //dup_Cdbopi2      = decltype(dup_Cdbopi2)();
  dup_eatom        = decltype(dup_eatom)();
  dup_vatom        = decltype(dup_vatom)();
  }

  copymode = 0;
}