1 /* -*- c++ -*- ---------------------------------------------------------- 2 LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator 3 https://www.lammps.org/, Sandia National Laboratories 4 Steve Plimpton, sjplimp@sandia.gov 5 6 Copyright (2003) Sandia Corporation. Under the terms of Contract 7 DE-AC04-94AL85000 with Sandia Corporation, the U.S. Government retains 8 certain rights in this software. This software is distributed under 9 the GNU General Public License. 10 11 See the README file in the top-level LAMMPS directory. 12 ------------------------------------------------------------------------- */ 13 14 #ifdef NPAIR_CLASS 15 // clang-format off 16 // Newton 17 18 typedef NPairHalffullKokkos<LMPDeviceType,1> NPairKokkosHalffullNewtonDevice; 19 NPairStyle(halffull/newton/kk/device, 20 NPairKokkosHalffullNewtonDevice, 21 NP_HALF_FULL | NP_NEWTON | NP_HALF | NP_NSQ | NP_BIN | NP_MULTI | 22 NP_ORTHO | NP_TRI | NP_KOKKOS_DEVICE); 23 24 typedef NPairHalffullKokkos<LMPHostType,1> NPairKokkosHalffullNewtonHost; 25 NPairStyle(halffull/newton/kk/host, 26 NPairKokkosHalffullNewtonHost, 27 NP_HALF_FULL | NP_NEWTON | NP_HALF | NP_NSQ | NP_BIN | NP_MULTI | 28 NP_ORTHO | NP_TRI | NP_KOKKOS_HOST); 29 30 typedef NPairHalffullKokkos<LMPDeviceType,1> NPairKokkosHalffullNewtonDevice; 31 NPairStyle(halffull/newton/skip/kk/device, 32 NPairKokkosHalffullNewtonDevice, 33 NP_HALF_FULL | NP_NEWTON | NP_HALF | NP_NSQ | NP_BIN | NP_MULTI | 34 NP_ORTHO | NP_TRI | NP_SKIP | NP_KOKKOS_DEVICE); 35 36 typedef NPairHalffullKokkos<LMPHostType,1> NPairKokkosHalffullNewtonHost; 37 NPairStyle(halffull/newton/skip/kk/host, 38 NPairKokkosHalffullNewtonHost, 39 NP_HALF_FULL | NP_NEWTON | NP_HALF | NP_NSQ | NP_BIN | NP_MULTI | 40 NP_ORTHO | NP_TRI | NP_SKIP | NP_KOKKOS_HOST); 41 42 // Newtoff 43 44 typedef NPairHalffullKokkos<LMPDeviceType,0> NPairKokkosHalffullNewtoffDevice; 45 NPairStyle(halffull/newtoff/kk/device, 46 NPairKokkosHalffullNewtoffDevice, 47 NP_HALF_FULL | NP_NEWTOFF | NP_HALF | NP_NSQ | NP_BIN | NP_MULTI | 48 NP_ORTHO | NP_TRI | NP_KOKKOS_DEVICE); 49 50 typedef NPairHalffullKokkos<LMPHostType,0> NPairKokkosHalffullNewtoffHost; 51 NPairStyle(halffull/newtoff/kk/host, 52 NPairKokkosHalffullNewtoffHost, 53 NP_HALF_FULL | NP_NEWTOFF | NP_HALF | NP_NSQ | NP_BIN | NP_MULTI | 54 NP_ORTHO | NP_TRI | NP_KOKKOS_HOST); 55 56 typedef NPairHalffullKokkos<LMPDeviceType,0> NPairKokkosHalffullNewtoffDevice; 57 NPairStyle(halffull/newtoff/skip/kk/device, 58 NPairKokkosHalffullNewtoffDevice, 59 NP_HALF_FULL | NP_NEWTOFF | NP_HALF | NP_NSQ | NP_BIN | NP_MULTI | 60 NP_ORTHO | NP_TRI | NP_SKIP | NP_KOKKOS_DEVICE); 61 62 typedef NPairHalffullKokkos<LMPHostType,0> NPairKokkosHalffullNewtoffHost; 63 NPairStyle(halffull/newtoff/skip/kk/host, 64 NPairKokkosHalffullNewtoffHost, 65 NP_HALF_FULL | NP_NEWTOFF | NP_HALF | NP_NSQ | NP_BIN | NP_MULTI | 66 NP_ORTHO | NP_TRI | NP_SKIP | NP_KOKKOS_HOST); 67 68 //************ Ghost ************** 69 70 // Newton 71 72 typedef NPairHalffullKokkos<LMPDeviceType,1> NPairKokkosHalffullNewtonGhostDevice; 73 NPairStyle(halffull/newton/ghost/kk/device, 74 NPairKokkosHalffullNewtonGhostDevice, 75 NP_HALF_FULL | NP_NEWTON | NP_HALF | NP_NSQ | NP_BIN | NP_MULTI | 76 NP_ORTHO | NP_TRI | NP_GHOST | NP_KOKKOS_DEVICE); 77 78 typedef NPairHalffullKokkos<LMPHostType,1> NPairKokkosHalffullNewtonHost; 79 NPairStyle(halffull/newton/ghost/kk/host, 80 NPairKokkosHalffullNewtonHost, 81 NP_HALF_FULL | NP_NEWTON | NP_HALF | NP_NSQ | NP_BIN | NP_MULTI | 82 NP_ORTHO | NP_TRI | NP_GHOST | NP_KOKKOS_HOST); 83 84 typedef NPairHalffullKokkos<LMPDeviceType,1> NPairKokkosHalffullNewtonGhostDevice; 85 NPairStyle(halffull/newton/skip/ghost/kk/device, 86 NPairKokkosHalffullNewtonGhostDevice, 87 NP_HALF_FULL | NP_NEWTON | NP_HALF | NP_NSQ | NP_BIN | NP_MULTI | 88 NP_ORTHO | NP_TRI | NP_GHOST | NP_SKIP | NP_KOKKOS_DEVICE); 89 90 typedef NPairHalffullKokkos<LMPHostType,1> NPairKokkosHalffullNewtonHost; 91 NPairStyle(halffull/newton/skip/ghost/kk/host, 92 NPairKokkosHalffullNewtonHost, 93 NP_HALF_FULL | NP_NEWTON | NP_HALF | NP_NSQ | NP_BIN | NP_MULTI | 94 NP_ORTHO | NP_TRI | NP_GHOST | NP_SKIP | NP_KOKKOS_HOST); 95 96 // Newtoff 97 98 typedef NPairHalffullKokkos<LMPDeviceType,0> NPairKokkosHalffullNewtoffGhostDevice; 99 NPairStyle(halffull/newtoff/ghost/kk/device, 100 NPairKokkosHalffullNewtoffGhostDevice, 101 NP_HALF_FULL | NP_NEWTOFF | NP_HALF | NP_NSQ | NP_BIN | NP_MULTI | 102 NP_ORTHO | NP_TRI | NP_GHOST | NP_KOKKOS_DEVICE); 103 104 typedef NPairHalffullKokkos<LMPHostType,0> NPairKokkosHalffullNewtoffHost; 105 NPairStyle(halffull/newtoff/ghost/kk/host, 106 NPairKokkosHalffullNewtoffHost, 107 NP_HALF_FULL | NP_NEWTOFF | NP_HALF | NP_NSQ | NP_BIN | NP_MULTI | 108 NP_ORTHO | NP_TRI | NP_GHOST | NP_KOKKOS_HOST); 109 110 typedef NPairHalffullKokkos<LMPDeviceType,0> NPairKokkosHalffullNewtoffGhostDevice; 111 NPairStyle(halffull/newtoff/skip/ghost/kk/device, 112 NPairKokkosHalffullNewtoffGhostDevice, 113 NP_HALF_FULL | NP_NEWTOFF | NP_HALF | NP_NSQ | NP_BIN | NP_MULTI | 114 NP_ORTHO | NP_TRI | NP_GHOST | NP_SKIP | NP_KOKKOS_DEVICE); 115 116 typedef NPairHalffullKokkos<LMPHostType,0> NPairKokkosHalffullNewtoffHost; 117 NPairStyle(halffull/newtoff/skip/ghost/kk/host, 118 NPairKokkosHalffullNewtoffHost, 119 NP_HALF_FULL | NP_NEWTOFF | NP_HALF | NP_NSQ | NP_BIN | NP_MULTI | 120 NP_ORTHO | NP_TRI | NP_GHOST | NP_SKIP | NP_KOKKOS_HOST); 121 // clang-format on 122 #else 123 124 // clang-format off 125 #ifndef LMP_NPAIR_HALFFULL_KOKKOS_H 126 #define LMP_NPAIR_HALFFULL_KOKKOS_H 127 128 #include "npair.h" 129 #include "kokkos_type.h" 130 131 namespace LAMMPS_NS { 132 133 struct TagNPairHalffullCompute{}; 134 135 template<class DeviceType, int NEWTON> 136 class NPairHalffullKokkos : public NPair { 137 public: 138 typedef DeviceType device_type; 139 typedef ArrayTypes<DeviceType> AT; 140 141 NPairHalffullKokkos(class LAMMPS *); ~NPairHalffullKokkos()142 ~NPairHalffullKokkos() {} 143 void build(class NeighList *); 144 145 KOKKOS_INLINE_FUNCTION 146 void operator()(TagNPairHalffullCompute, const int&) const; 147 148 private: 149 int nlocal; 150 151 typename AT::t_x_array_randomread x; 152 153 typename AT::t_neighbors_2d_const d_neighbors_full; 154 typename AT::t_int_1d_const d_ilist_full; 155 typename AT::t_int_1d_const d_numneigh_full; 156 157 typename AT::t_neighbors_2d d_neighbors; 158 typename AT::t_int_1d d_ilist; 159 typename AT::t_int_1d d_numneigh; 160 }; 161 162 } 163 164 #endif 165 #endif 166 167 /* ERROR/WARNING messages: 168 169 */ 170