/* ---------------------------------------------------------------------- LAMMPS - Large-scale Atomic/Molecular Massively Parallel Simulator Original Version: http://lammps.sandia.gov, Sandia National Laboratories Steve Plimpton, sjplimp@sandia.gov See the README file in the top-level LAMMPS directory. ----------------------------------------------------------------------- USER-CUDA Package and associated modifications: https://sourceforge.net/projects/lammpscuda/ Christian Trott, christian.trott@tu-ilmenau.de Lars Winterfeld, lars.winterfeld@tu-ilmenau.de Theoretical Physics II, University of Technology Ilmenau, Germany See the README file in the USER-CUDA directory. This software is distributed under the GNU General Public License. ------------------------------------------------------------------------- */ __global__ void PairGranHookeCuda_Kernel(int eflag, int vflag,int eflag_atom,int vflag_atom,int** firstneight,int* binned_id ,F_FLOAT kn,F_FLOAT gamman,F_FLOAT gammat, F_FLOAT xmu) { ENERGY_FLOAT evdwl = ENERGY_F(0.0); ENERGY_FLOAT* sharedE; ENERGY_FLOAT* sharedV; if(eflag||eflag_atom) { sharedE = &sharedmem[threadIdx.x]; sharedV = &sharedmem[0]; sharedE[0] = ENERGY_F(0.0); sharedV+=blockDim.x; } if(vflag||vflag_atom) { sharedV += threadIdx.x; sharedV[0*blockDim.x] = ENERGY_F(0.0); sharedV[1*blockDim.x] = ENERGY_F(0.0); sharedV[2*blockDim.x] = ENERGY_F(0.0); sharedV[3*blockDim.x] = ENERGY_F(0.0); sharedV[4*blockDim.x] = ENERGY_F(0.0); sharedV[5*blockDim.x] = ENERGY_F(0.0); } int ii = (blockIdx.x*gridDim.y+blockIdx.y)*blockDim.x+threadIdx.x; MYEMUDBG( if(ii==0) printf("# CUDA: PairGranHookeCuda_Kernel: -- no binning --\n"); ) X_FLOAT xtmp,ytmp,ztmp; X_FLOAT4 myxtype; V_FLOAT4 myvradius, ovradius; F_FLOAT fxtmp,fytmp,fztmp,torquextmp,torqueytmp,torqueztmp; F_FLOAT delx,dely,delz; F_FLOAT radi,radj,radsum,r,rsqinv; F_FLOAT vr1,vr2,vr3,vnnr,vn1,vn2,vn3,vt1,vt2,vt3; F_FLOAT wr1,wr2,wr3; F_FLOAT vtr1,vtr2,vtr3,vrel; F_FLOAT meff,damp,ccel,tor1,tor2,tor3; F_FLOAT fn,fs,ft,fs1,fs2,fs3; int jnum =0; int i,j; int* jlist; if(ii < _inum) { i = _ilist[ii]; myxtype = fetchXType(i); myvradius = fetchVRadius(i); xtmp=myxtype.x; ytmp=myxtype.y; ztmp=myxtype.z; radi = myvradius.w; fxtmp = F_F(0.0); fytmp = F_F(0.0); fztmp = F_F(0.0); torquextmp = F_F(0.0); torqueytmp = F_F(0.0); torqueztmp = F_F(0.0); jnum = _numneigh[i]; jlist = &_neighbors[i]; } __syncthreads(); for (int jj = 0; jj < jnum; jj++) { if(ii < _inum) if(jj