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