#ifdef FIX_CLASS
FixStyle(nve/sphere/kk,FixNVESphereKokkos<LMPDeviceType>)
FixStyle(nve/sphere/kk/device,FixNVESphereKokkos<LMPDeviceType>)
FixStyle(nve/sphere/kk/host,FixNVESphereKokkos<LMPHostType>)
#else
#ifndef LMP_FIX_NVE_SPHERE_KOKKOS_H
#define LMP_FIX_NVE_SPHERE_KOKKOS_H
#include "fix_nve_sphere.h"
#include "kokkos_type.h"
namespace LAMMPS_NS {
template<class DeviceType>
class FixNVESphereKokkos : public FixNVESphere {
public:
FixNVESphereKokkos(class LAMMPS *, int, char **);
virtual ~FixNVESphereKokkos() {}
void cleanup_copy();
void init();
void initial_integrate(int);
void final_integrate();
KOKKOS_INLINE_FUNCTION
void initial_integrate_item(const int i) const;
KOKKOS_INLINE_FUNCTION
void final_integrate_item(const int i) const;
private:
typename ArrayTypes<DeviceType>::t_x_array x;
typename ArrayTypes<DeviceType>::t_v_array v;
typename ArrayTypes<DeviceType>::t_v_array omega;
typename ArrayTypes<DeviceType>::t_f_array f;
typename ArrayTypes<DeviceType>::t_f_array torque;
typename ArrayTypes<DeviceType>::t_float_1d rmass;
typename ArrayTypes<DeviceType>::t_float_1d radius;
typename ArrayTypes<DeviceType>::t_int_1d mask;
};
template <class DeviceType>
struct FixNVESphereKokkosInitialIntegrateFunctor {
FixNVESphereKokkos<DeviceType> c;
FixNVESphereKokkosInitialIntegrateFunctor(FixNVESphereKokkos<DeviceType> *c_ptr): c(*c_ptr) { c.cleanup_copy(); }
KOKKOS_INLINE_FUNCTION
void operator()(const int i) const {
c.initial_integrate_item(i);
}
};
template <class DeviceType>
struct FixNVESphereKokkosFinalIntegrateFunctor {
FixNVESphereKokkos<DeviceType> c;
FixNVESphereKokkosFinalIntegrateFunctor(FixNVESphereKokkos<DeviceType> *c_ptr): c(*c_ptr) { c.cleanup_copy(); }
KOKKOS_INLINE_FUNCTION
void operator()(const int i) const {
c.final_integrate_item(i);
}
};
}
#endif #endif