forked from lijiext/lammps
git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@3054 f3b2605a-c512-4ea7-a41b-209d697bcdaa
This commit is contained in:
parent
323fb937c3
commit
bd0d78aeac
|
@ -21,18 +21,18 @@ namespace LAMMPS_NS {
|
||||||
class PairGayBerne : public Pair {
|
class PairGayBerne : public Pair {
|
||||||
public:
|
public:
|
||||||
PairGayBerne(LAMMPS *lmp);
|
PairGayBerne(LAMMPS *lmp);
|
||||||
~PairGayBerne();
|
virtual ~PairGayBerne();
|
||||||
void compute(int, int);
|
virtual void compute(int, int);
|
||||||
void settings(int, char **);
|
virtual void settings(int, char **);
|
||||||
void coeff(int, char **);
|
void coeff(int, char **);
|
||||||
void init_style();
|
virtual void init_style();
|
||||||
double init_one(int, int);
|
double init_one(int, int);
|
||||||
void write_restart(FILE *);
|
void write_restart(FILE *);
|
||||||
void read_restart(FILE *);
|
void read_restart(FILE *);
|
||||||
void write_restart_settings(FILE *);
|
void write_restart_settings(FILE *);
|
||||||
void read_restart_settings(FILE *);
|
void read_restart_settings(FILE *);
|
||||||
|
|
||||||
private:
|
protected:
|
||||||
double cut_global;
|
double cut_global;
|
||||||
double **cut;
|
double **cut;
|
||||||
|
|
||||||
|
|
|
@ -18,7 +18,6 @@
|
||||||
#include "math.h"
|
#include "math.h"
|
||||||
#include "stdio.h"
|
#include "stdio.h"
|
||||||
#include "stdlib.h"
|
#include "stdlib.h"
|
||||||
#include "string.h"
|
|
||||||
#include "pair_gayberne_gpu.h"
|
#include "pair_gayberne_gpu.h"
|
||||||
#include "math_extra.h"
|
#include "math_extra.h"
|
||||||
#include "atom.h"
|
#include "atom.h"
|
||||||
|
@ -33,6 +32,8 @@
|
||||||
#include "neigh_request.h"
|
#include "neigh_request.h"
|
||||||
#include "universe.h"
|
#include "universe.h"
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
|
||||||
#ifdef GB_GPU_OMP
|
#ifdef GB_GPU_OMP
|
||||||
#include "omp.h"
|
#include "omp.h"
|
||||||
#endif
|
#endif
|
||||||
|
@ -41,6 +42,7 @@
|
||||||
#define MAX(a,b) ((a) > (b) ? (a) : (b))
|
#define MAX(a,b) ((a) > (b) ? (a) : (b))
|
||||||
|
|
||||||
// External functions from cuda library for atom decomposition
|
// External functions from cuda library for atom decomposition
|
||||||
|
|
||||||
int * gb_gpu_init(int &ij_size, const int ntypes, const double gamma,
|
int * gb_gpu_init(int &ij_size, const int ntypes, const double gamma,
|
||||||
const double upsilon, const double mu, double **shape,
|
const double upsilon, const double mu, double **shape,
|
||||||
double **well, double **cutsq, double **sigma,
|
double **well, double **cutsq, double **sigma,
|
||||||
|
@ -91,7 +93,7 @@ PairGayBerneGPU::~PairGayBerneGPU()
|
||||||
printf("\n-------------------------------------");
|
printf("\n-------------------------------------");
|
||||||
printf("--------------------------------\n");
|
printf("--------------------------------\n");
|
||||||
gb_gpu_time(my_thread);
|
gb_gpu_time(my_thread);
|
||||||
std::cout << "Procs: " << universe->nprocs << std::endl;
|
printf("Procs: %d\n",comm->nprocs);
|
||||||
printf("-------------------------------------");
|
printf("-------------------------------------");
|
||||||
printf("--------------------------------\n\n");
|
printf("--------------------------------\n\n");
|
||||||
}
|
}
|
||||||
|
@ -226,32 +228,31 @@ void PairGayBerneGPU::compute(int eflag, int vflag)
|
||||||
|
|
||||||
void PairGayBerneGPU::settings(int narg, char **arg)
|
void PairGayBerneGPU::settings(int narg, char **arg)
|
||||||
{
|
{
|
||||||
if (narg != 4 && narg != 6) error->all("Illegal pair_style command");
|
// strip off GPU keyword/value and send remaining args to parent
|
||||||
|
|
||||||
// Set multi_gpu_mode to one_node for multiple gpus on 1 node
|
|
||||||
// -- param is starting gpu id
|
|
||||||
// Set multi_gpu_mode to one_gpu to select the same gpu id on every node
|
|
||||||
// -- param is id of gpu
|
|
||||||
// Set multi_gpu_mode to multi_gpu to get ma
|
|
||||||
// -- param is number of gpus per node
|
|
||||||
multi_gpu_mode=ONE_NODE;
|
|
||||||
multi_gpu_param=0;
|
|
||||||
if (narg==6) {
|
|
||||||
multi_gpu_param=atoi(arg[5]);
|
|
||||||
if (strcmp("one_node",arg[4])==0)
|
|
||||||
multi_gpu_mode=ONE_NODE;
|
|
||||||
else if (strcmp("one_gpu",arg[4])==0)
|
|
||||||
multi_gpu_mode=ONE_GPU;
|
|
||||||
else if (strcmp("multi_gpu",arg[4])==0) {
|
|
||||||
multi_gpu_mode=MULTI_GPU;
|
|
||||||
if (multi_gpu_param<1)
|
|
||||||
error->all("Illegal pair_style command");
|
|
||||||
} else
|
|
||||||
error->all("Illegal pair_style command");
|
|
||||||
narg-=2;
|
|
||||||
}
|
|
||||||
|
|
||||||
PairGayBerne::settings(narg,arg);
|
if (narg < 2) error->all("Illegal pair_style command");
|
||||||
|
|
||||||
|
// set multi_gpu_mode to one/node for multiple gpus on 1 node
|
||||||
|
// -- param is starting gpu id
|
||||||
|
// set multi_gpu_mode to one/gpu to select the same gpu id on every node
|
||||||
|
// -- param is id of gpu
|
||||||
|
// set multi_gpu_mode to multi/gpu to get ma
|
||||||
|
// -- param is number of gpus per node
|
||||||
|
|
||||||
|
if (strcmp(arg[0],"one/node") == 0)
|
||||||
|
multi_gpu_mode = ONE_NODE;
|
||||||
|
else if (strcmp(arg[0],"one/gpu") == 0)
|
||||||
|
multi_gpu_mode = ONE_GPU;
|
||||||
|
else if (strcmp(arg[0],"multi/gpu") == 0)
|
||||||
|
multi_gpu_mode = MULTI_GPU;
|
||||||
|
else error->all("Illegal pair_style command");
|
||||||
|
|
||||||
|
multi_gpu_param = atoi(arg[1]);
|
||||||
|
|
||||||
|
if (multi_gpu_mode == MULTI_GPU && multi_gpu_param < 1)
|
||||||
|
error->all("Illegal pair_style command");
|
||||||
|
|
||||||
|
PairGayBerne::settings(narg-2,&arg[2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
|
@ -260,7 +261,15 @@ void PairGayBerneGPU::settings(int narg, char **arg)
|
||||||
|
|
||||||
void PairGayBerneGPU::init_style()
|
void PairGayBerneGPU::init_style()
|
||||||
{
|
{
|
||||||
// Set the GPU ID
|
if (force->pair_match("gpu",0) == NULL)
|
||||||
|
error->all("Cannot use pair hybrid with multiple GPU pair styles");
|
||||||
|
if (!atom->quat_flag || !atom->torque_flag || !atom->avec->shape_type)
|
||||||
|
error->all("Pair gayberne requires atom attributes quat, torque, shape");
|
||||||
|
if (atom->radius_flag)
|
||||||
|
error->all("Pair gayberne cannot be used with atom attribute diameter");
|
||||||
|
|
||||||
|
// set the GPU ID
|
||||||
|
|
||||||
int my_gpu=comm->me+multi_gpu_param;
|
int my_gpu=comm->me+multi_gpu_param;
|
||||||
int ngpus=universe->nprocs;
|
int ngpus=universe->nprocs;
|
||||||
if (multi_gpu_mode==ONE_GPU) {
|
if (multi_gpu_mode==ONE_GPU) {
|
||||||
|
@ -272,11 +281,6 @@ void PairGayBerneGPU::init_style()
|
||||||
if (ngpus>universe->nprocs)
|
if (ngpus>universe->nprocs)
|
||||||
ngpus=universe->nprocs;
|
ngpus=universe->nprocs;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!atom->quat_flag || !atom->torque_flag || !atom->avec->shape_type)
|
|
||||||
error->all("Pair gayberne requires atom attributes quat, torque, shape");
|
|
||||||
if (atom->radius_flag)
|
|
||||||
error->all("Pair gayberne cannot be used with atom attribute diameter");
|
|
||||||
|
|
||||||
int irequest = neighbor->request(this);
|
int irequest = neighbor->request(this);
|
||||||
|
|
||||||
|
|
|
@ -18,7 +18,6 @@
|
||||||
#include "math.h"
|
#include "math.h"
|
||||||
#include "stdio.h"
|
#include "stdio.h"
|
||||||
#include "stdlib.h"
|
#include "stdlib.h"
|
||||||
#include "string.h"
|
|
||||||
#include "pair_lj_cut_gpu.h"
|
#include "pair_lj_cut_gpu.h"
|
||||||
#include "math_extra.h"
|
#include "math_extra.h"
|
||||||
#include "atom.h"
|
#include "atom.h"
|
||||||
|
@ -33,10 +32,13 @@
|
||||||
#include "neigh_request.h"
|
#include "neigh_request.h"
|
||||||
#include "universe.h"
|
#include "universe.h"
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
|
||||||
#define MIN(a,b) ((a) < (b) ? (a) : (b))
|
#define MIN(a,b) ((a) < (b) ? (a) : (b))
|
||||||
#define MAX(a,b) ((a) > (b) ? (a) : (b))
|
#define MAX(a,b) ((a) > (b) ? (a) : (b))
|
||||||
|
|
||||||
// External functions from cuda library for force decomposition
|
// External functions from cuda library for force decomposition
|
||||||
|
|
||||||
int * lj_gpu_init(int &ij_size, const int ntypes, double **cutsq,
|
int * lj_gpu_init(int &ij_size, const int ntypes, double **cutsq,
|
||||||
double **sigma, double **epsilon, double **host_lj1,
|
double **sigma, double **epsilon, double **host_lj1,
|
||||||
double **host_lj2, double **host_lj3, double **host_lj4,
|
double **host_lj2, double **host_lj3, double **host_lj4,
|
||||||
|
@ -80,7 +82,7 @@ PairLJCutGPU::~PairLJCutGPU()
|
||||||
printf("\n-------------------------------------");
|
printf("\n-------------------------------------");
|
||||||
printf("--------------------------------\n");
|
printf("--------------------------------\n");
|
||||||
lj_gpu_time();
|
lj_gpu_time();
|
||||||
std::cout << "Procs: " << universe->nprocs << std::endl;
|
printf("Procs: %d\n",comm->nprocs);
|
||||||
printf("-------------------------------------");
|
printf("-------------------------------------");
|
||||||
printf("--------------------------------\n\n");
|
printf("--------------------------------\n\n");
|
||||||
}
|
}
|
||||||
|
@ -167,32 +169,31 @@ void PairLJCutGPU::compute(int eflag, int vflag)
|
||||||
|
|
||||||
void PairLJCutGPU::settings(int narg, char **arg)
|
void PairLJCutGPU::settings(int narg, char **arg)
|
||||||
{
|
{
|
||||||
if (narg != 1 && narg != 3) error->all("Illegal pair_style command");
|
// strip off GPU keyword/value and send remaining args to parent
|
||||||
|
|
||||||
// Set multi_gpu_mode to one_node for multiple gpus on 1 node
|
|
||||||
// -- param is starting gpu id
|
|
||||||
// Set multi_gpu_mode to one_gpu to select the same gpu id on every node
|
|
||||||
// -- param is id of gpu
|
|
||||||
// Set multi_gpu_mode to multi_gpu to get ma
|
|
||||||
// -- param is number of gpus per node
|
|
||||||
multi_gpu_mode=ONE_NODE;
|
|
||||||
multi_gpu_param=0;
|
|
||||||
if (narg==3) {
|
|
||||||
multi_gpu_param=atoi(arg[2]);
|
|
||||||
if (strcmp("one_node",arg[1])==0)
|
|
||||||
multi_gpu_mode=ONE_NODE;
|
|
||||||
else if (strcmp("one_gpu",arg[1])==0)
|
|
||||||
multi_gpu_mode=ONE_GPU;
|
|
||||||
else if (strcmp("multi_gpu",arg[1])==0) {
|
|
||||||
multi_gpu_mode=MULTI_GPU;
|
|
||||||
if (multi_gpu_param<1)
|
|
||||||
error->all("Illegal pair_style command");
|
|
||||||
} else
|
|
||||||
error->all("Illegal pair_style command");
|
|
||||||
narg-=2;
|
|
||||||
}
|
|
||||||
|
|
||||||
PairLJCut::settings(narg,arg);
|
if (narg < 2) error->all("Illegal pair_style command");
|
||||||
|
|
||||||
|
// set multi_gpu_mode to one/node for multiple gpus on 1 node
|
||||||
|
// -- param is starting gpu id
|
||||||
|
// set multi_gpu_mode to one/gpu to select the same gpu id on every node
|
||||||
|
// -- param is id of gpu
|
||||||
|
// set multi_gpu_mode to multi/gpu to get ma
|
||||||
|
// -- param is number of gpus per node
|
||||||
|
|
||||||
|
if (strcmp(arg[0],"one/node") == 0)
|
||||||
|
multi_gpu_mode = ONE_NODE;
|
||||||
|
else if (strcmp(arg[0],"one/gpu") == 0)
|
||||||
|
multi_gpu_mode = ONE_GPU;
|
||||||
|
else if (strcmp(arg[0],"multi/gpu") == 0)
|
||||||
|
multi_gpu_mode = MULTI_GPU;
|
||||||
|
else error->all("Illegal pair_style command");
|
||||||
|
|
||||||
|
multi_gpu_param = atoi(arg[1]);
|
||||||
|
|
||||||
|
if (multi_gpu_mode == MULTI_GPU && multi_gpu_param < 1)
|
||||||
|
error->all("Illegal pair_style command");
|
||||||
|
|
||||||
|
PairLJCut::settings(narg-2,&arg[2]);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
|
@ -201,7 +202,11 @@ void PairLJCutGPU::settings(int narg, char **arg)
|
||||||
|
|
||||||
void PairLJCutGPU::init_style()
|
void PairLJCutGPU::init_style()
|
||||||
{
|
{
|
||||||
// Set the GPU ID
|
if (force->pair_match("gpu",0) == NULL)
|
||||||
|
error->all("Cannot use pair hybrid with multiple GPU pair styles");
|
||||||
|
|
||||||
|
// set the GPU ID
|
||||||
|
|
||||||
int my_gpu=comm->me+multi_gpu_param;
|
int my_gpu=comm->me+multi_gpu_param;
|
||||||
int ngpus=universe->nprocs;
|
int ngpus=universe->nprocs;
|
||||||
if (multi_gpu_mode==ONE_GPU) {
|
if (multi_gpu_mode==ONE_GPU) {
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
# Settings for libraries used by specific LAMMPS packages
|
# Settings for libraries used by specific LAMMPS packages
|
||||||
# this file is auto-edited when those packages are included/excluded
|
# this file is auto-edited when those packages are included/excluded
|
||||||
|
|
||||||
PKGINC = -I../../lib/poems -I../../lib/meam -I../../lib/reax
|
PKGINC = -I../../lib/reax -I../../lib/poems -I../../lib/meam
|
||||||
PKGPATH = -L../../lib/poems -L../../lib/meam -L../../lib/reax
|
PKGPATH = -L../../lib/reax -L../../lib/poems -L../../lib/meam -L../../lib/gpu
|
||||||
PKGLIB = -lpoems -lmeam -lreax
|
PKGLIB = -lreax -lpoems -lmeam -lgpu
|
||||||
|
|
|
@ -156,30 +156,44 @@ Pair *Force::new_pair(const char *style)
|
||||||
return ptr to current pair class or hybrid sub-class
|
return ptr to current pair class or hybrid sub-class
|
||||||
if exact, then style name must be exact match to word
|
if exact, then style name must be exact match to word
|
||||||
if not exact, style name must contain word
|
if not exact, style name must contain word
|
||||||
else return NULL
|
return NULL if no match
|
||||||
|
return NULL if not exact and multiple hybrid sub-styles match
|
||||||
------------------------------------------------------------------------- */
|
------------------------------------------------------------------------- */
|
||||||
|
|
||||||
Pair *Force::pair_match(const char *word, int exact)
|
Pair *Force::pair_match(const char *word, int exact)
|
||||||
{
|
{
|
||||||
|
int iwhich,count;
|
||||||
|
|
||||||
if (exact && strcmp(pair_style,word) == 0) return pair;
|
if (exact && strcmp(pair_style,word) == 0) return pair;
|
||||||
else if (!exact && strstr(pair_style,word)) return pair;
|
else if (!exact && strstr(pair_style,word)) return pair;
|
||||||
|
|
||||||
else if (strcmp(pair_style,"hybrid") == 0) {
|
else if (strcmp(pair_style,"hybrid") == 0) {
|
||||||
PairHybrid *hybrid = (PairHybrid *) pair;
|
PairHybrid *hybrid = (PairHybrid *) pair;
|
||||||
|
count = 0;
|
||||||
for (int i = 0; i < hybrid->nstyles; i++) {
|
for (int i = 0; i < hybrid->nstyles; i++) {
|
||||||
if (exact && strcmp(hybrid->keywords[i],word) == 0)
|
if (exact && strcmp(hybrid->keywords[i],word) == 0)
|
||||||
return hybrid->styles[i];
|
return hybrid->styles[i];
|
||||||
else if (!exact && strstr(hybrid->keywords[i],word))
|
if (!exact && strstr(hybrid->keywords[i],word)) {
|
||||||
return hybrid->styles[i];
|
iwhich = i;
|
||||||
|
count++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
if (!exact && count == 1) return hybrid->styles[iwhich];
|
||||||
|
|
||||||
} else if (strcmp(pair_style,"hybrid/overlay") == 0) {
|
} else if (strcmp(pair_style,"hybrid/overlay") == 0) {
|
||||||
PairHybridOverlay *hybrid = (PairHybridOverlay *) pair;
|
PairHybridOverlay *hybrid = (PairHybridOverlay *) pair;
|
||||||
|
count = 0;
|
||||||
for (int i = 0; i < hybrid->nstyles; i++) {
|
for (int i = 0; i < hybrid->nstyles; i++) {
|
||||||
if (exact && strcmp(hybrid->keywords[i],word) == 0)
|
if (exact && strcmp(hybrid->keywords[i],word) == 0)
|
||||||
return hybrid->styles[i];
|
return hybrid->styles[i];
|
||||||
else if (!exact && strstr(hybrid->keywords[i],word))
|
else if (!exact && strstr(hybrid->keywords[i],word)) {
|
||||||
return hybrid->styles[i];
|
iwhich = i;
|
||||||
|
count++;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
if (!exact && count == 1) return hybrid->styles[iwhich];
|
||||||
}
|
}
|
||||||
|
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -194,6 +194,7 @@ void PairHybrid::settings(int narg, char **arg)
|
||||||
// count sub-styles by skipping numeric args
|
// count sub-styles by skipping numeric args
|
||||||
// one exception is 1st arg of style "table", which is non-numeric word
|
// one exception is 1st arg of style "table", which is non-numeric word
|
||||||
// one exception is 1st two args of style "lj/coul", which are non-numeric
|
// one exception is 1st two args of style "lj/coul", which are non-numeric
|
||||||
|
// one exception is 1st two args of style "lj/coul", which are non-numeric
|
||||||
// need a better way to skip these exceptions
|
// need a better way to skip these exceptions
|
||||||
|
|
||||||
nstyles = 0;
|
nstyles = 0;
|
||||||
|
@ -213,8 +214,9 @@ void PairHybrid::settings(int narg, char **arg)
|
||||||
|
|
||||||
// allocate each sub-style and call its settings() with subset of args
|
// allocate each sub-style and call its settings() with subset of args
|
||||||
// define subset of args for a sub-style by skipping numeric args
|
// define subset of args for a sub-style by skipping numeric args
|
||||||
// one exception is 1st arg of style "table", which is non-numeric word
|
// one exception is 1st arg of style "table", which is non-numeric
|
||||||
// one exception is 1st two args of style "lj/coul", which are non-numeric
|
// one exception is 1st two args of style "lj/coul", which are non-numeric
|
||||||
|
// one exception is 1st arg of any "gpu" style, which is non-numeric
|
||||||
// need a better way to skip these exceptions
|
// need a better way to skip these exceptions
|
||||||
|
|
||||||
nstyles = 0;
|
nstyles = 0;
|
||||||
|
@ -233,6 +235,7 @@ void PairHybrid::settings(int narg, char **arg)
|
||||||
istyle = i;
|
istyle = i;
|
||||||
if (strcmp(arg[i],"table") == 0) i++;
|
if (strcmp(arg[i],"table") == 0) i++;
|
||||||
if (strcmp(arg[i],"lj/coul") == 0) i += 2;
|
if (strcmp(arg[i],"lj/coul") == 0) i += 2;
|
||||||
|
if (strstr(arg[i],"gpu")) i++;
|
||||||
i++;
|
i++;
|
||||||
while (i < narg && !isalpha(arg[i][0])) i++;
|
while (i < narg && !isalpha(arg[i][0])) i++;
|
||||||
styles[nstyles]->settings(i-istyle-1,&arg[istyle+1]);
|
styles[nstyles]->settings(i-istyle-1,&arg[istyle+1]);
|
||||||
|
|
|
@ -22,10 +22,10 @@ class PairLJCut : public Pair {
|
||||||
public:
|
public:
|
||||||
PairLJCut(class LAMMPS *);
|
PairLJCut(class LAMMPS *);
|
||||||
~PairLJCut();
|
~PairLJCut();
|
||||||
void compute(int, int);
|
virtual void compute(int, int);
|
||||||
void settings(int, char **);
|
virtual void settings(int, char **);
|
||||||
void coeff(int, char **);
|
void coeff(int, char **);
|
||||||
void init_style();
|
virtual void init_style();
|
||||||
void init_list(int, class NeighList *);
|
void init_list(int, class NeighList *);
|
||||||
double init_one(int, int);
|
double init_one(int, int);
|
||||||
void write_restart(FILE *);
|
void write_restart(FILE *);
|
||||||
|
|
Loading…
Reference in New Issue