1 /*************************************************************************** 2 coul_dsf.h 3 ------------------- 4 Trung Dac Nguyen (ORNL) 5 6 Class for acceleration of the coul/dsf pair style. 7 8 __________________________________________________________________________ 9 This file is part of the LAMMPS Accelerator Library (LAMMPS_AL) 10 __________________________________________________________________________ 11 12 begin : 8/15/2012 13 email : nguyentd@ornl.gov 14 ***************************************************************************/ 15 16 #ifndef LAL_LJ_DSF_H 17 #define LAL_LJ_DSF_H 18 19 #include "lal_base_charge.h" 20 21 namespace LAMMPS_AL { 22 23 template <class numtyp, class acctyp> 24 class CoulDSF : public BaseCharge<numtyp, acctyp> { 25 public: 26 CoulDSF(); 27 ~CoulDSF(); 28 29 /// Clear any previous data and set up for a new LAMMPS run 30 /** \param max_nbors initial number of rows in the neighbor matrix 31 * \param cell_size cutoff + skin 32 * \param gpu_split fraction of particles handled by device 33 * 34 * Returns: 35 * - 0 if successful 36 * - -1 if fix gpu not found 37 * - -3 if there is an out of memory error 38 * - -4 if the GPU library was not compiled for GPU 39 * - -5 Double precision is not supported on card **/ 40 int init(const int ntypes, const int nlocal, const int nall, 41 const int max_nbors, const int maxspecial, 42 const double cell_size, const double gpu_split, FILE *screen, 43 const double host_cut_coulsq, double *host_special_coul, 44 const double qqrd2e, const double e_shift, const double f_shift, 45 const double alpha); 46 47 /// Clear all host and device data 48 /** \note This is called at the beginning of the init() routine **/ 49 void clear(); 50 51 /// Returns memory usage on device per atom 52 int bytes_per_atom(const int max_nbors) const; 53 54 /// Total host memory used by library for pair style 55 double host_memory_usage() const; 56 57 // --------------------------- TYPE DATA -------------------------- 58 59 /// Special LJ values [0-3] and Special Coul values [4-7] 60 UCL_D_Vec<numtyp> sp_lj; 61 62 /// If atom type constants fit in shared memory, use fast kernels 63 bool shared_types; 64 65 /// Number of atom types 66 int _lj_types; 67 68 numtyp _qqrd2e; 69 70 private: 71 bool _allocated; 72 numtyp _e_shift, _f_shift, _alpha, _cut_coulsq; 73 int loop(const int eflag, const int vflag); 74 }; 75 76 } 77 78 #endif 79