Skip to content
Snippets Groups Projects
lal_dipole_long_lj.cpp 5.83 KiB
/***************************************************************************
                                 dipole_lj.cpp
                             -------------------
                            Trung Dac Nguyen (ORNL)

  Class for acceleration of the dipole/cut pair style.

 __________________________________________________________________________
    This file is part of the LAMMPS Accelerator Library (LAMMPS_AL)
 __________________________________________________________________________

    begin                :
    email                : nguyentd@ornl.gov
 ***************************************************************************/

#ifdef USE_OPENCL
#include "dipole_long_lj_cl.h"
#elif defined(USE_CUDART)
const char *dipole_long_lj=0;
#else
#include "dipole_long_lj_cubin.h"
#endif

#include "lal_dipole_long_lj.h"
#include <cassert>
using namespace LAMMPS_AL;
#define DipoleLongLJT DipoleLongLJ<numtyp, acctyp>

extern Device<PRECISION,ACC_PRECISION> device;

template <class numtyp, class acctyp>
DipoleLongLJT::DipoleLongLJ() : BaseDipole<numtyp,acctyp>(),
                                    _allocated(false) {
}

template <class numtyp, class acctyp>
DipoleLongLJT::~DipoleLongLJ() {
  clear();
}

template <class numtyp, class acctyp>
int DipoleLongLJT::bytes_per_atom(const int max_nbors) const {
  return this->bytes_per_atom_atomic(max_nbors);
}

template <class numtyp, class acctyp>
int DipoleLongLJT::init(const int ntypes,
                    double **host_cutsq, double **host_lj1,
                    double **host_lj2, double **host_lj3,
                    double **host_lj4, double **host_offset,
                    double *host_special_lj, const int nlocal,
                    const int nall, const int max_nbors,
                    const int maxspecial, const double cell_size,
                    const double gpu_split, FILE *_screen,
                    double **host_cut_ljsq, const double host_cut_coulsq,
                    double *host_special_coul, const double qqrd2e,
                    const double g_ewald) {
  int success;
  success=this->init_atomic(nlocal,nall,max_nbors,maxspecial,cell_size,gpu_split,
                            _screen,dipole_long_lj,"k_dipole_long_lj");
  if (success!=0)
    return success;

  // If atom type constants fit in shared memory use fast kernel
  int lj_types=ntypes;
  shared_types=false;
  int max_shared_types=this->device->max_shared_types();
  if (lj_types<=max_shared_types && this->_block_size>=max_shared_types) {
    lj_types=max_shared_types;
    shared_types=true;