git-svn-id: svn://svn.icms.temple.edu/lammps-ro/trunk@8016 f3b2605a-c512-4ea7-a41b-209d697bcdaa

This commit is contained in:
sjplimp
2012-04-12 22:32:17 +00:00
parent b82dc33475
commit e4974ae9af
18 changed files with 127 additions and 43 deletions

View File

@ -14,6 +14,9 @@
#include "stdlib.h" #include "stdlib.h"
#include "integrate.h" #include "integrate.h"
#include "update.h" #include "update.h"
#include "force.h"
#include "pair.h"
#include "kspace.h"
#include "modify.h" #include "modify.h"
#include "compute.h" #include "compute.h"
@ -38,6 +41,18 @@ Integrate::~Integrate()
delete [] vlist_atom; delete [] vlist_atom;
} }
/* ---------------------------------------------------------------------- */
void Integrate::init()
{
// allow pair and Kspace compute() to be turned off via modify flags
if (force->pair && force->pair->compute_flag) pair_compute_flag = 1;
else pair_compute_flag = 0;
if (force->kspace && force->kspace->compute_flag) kspace_compute_flag = 1;
else kspace_compute_flag = 0;
}
/* ---------------------------------------------------------------------- /* ----------------------------------------------------------------------
setup lists of computes for global and per-atom PE and pressure setup lists of computes for global and per-atom PE and pressure
------------------------------------------------------------------------- */ ------------------------------------------------------------------------- */

View File

@ -22,7 +22,7 @@ class Integrate : protected Pointers {
public: public:
Integrate(class LAMMPS *, int, char **); Integrate(class LAMMPS *, int, char **);
virtual ~Integrate(); virtual ~Integrate();
virtual void init() = 0; virtual void init();
virtual void setup() = 0; virtual void setup() = 0;
virtual void setup_minimal(int) = 0; virtual void setup_minimal(int) = 0;
virtual void run(int) = 0; virtual void run(int) = 0;
@ -42,6 +42,9 @@ class Integrate : protected Pointers {
class Compute **vlist_global; class Compute **vlist_global;
class Compute **vlist_atom; class Compute **vlist_atom;
int pair_compute_flag; // 0 if pair->compute is skipped
int kspace_compute_flag; // 0 if kspace->compute is skipped
void ev_setup(); void ev_setup();
void ev_set(bigint); void ev_set(bigint);
}; };

View File

@ -28,6 +28,9 @@ using namespace LAMMPS_NS;
KSpace::KSpace(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp) KSpace::KSpace(LAMMPS *lmp, int narg, char **arg) : Pointers(lmp)
{ {
energy = 0.0; energy = 0.0;
virial[0] = virial[1] = virial[2] = virial[3] = virial[4] = virial[5] = 0.0;
compute_flag = 1;
order = 5; order = 5;
gridflag = 0; gridflag = 0;
gewaldflag = 0; gewaldflag = 0;
@ -53,6 +56,15 @@ KSpace::~KSpace()
memory->destroy(vatom); memory->destroy(vatom);
} }
/* ---------------------------------------------------------------------- */
void KSpace::compute_dummy(int eflag, int vflag)
{
if (eflag || vflag) ev_setup(eflag,vflag);
else evflag = evflag_atom = eflag_global = vflag_global =
eflag_atom = vflag_atom = 0;
}
/* ---------------------------------------------------------------------- /* ----------------------------------------------------------------------
setup for energy, virial computation setup for energy, virial computation
see integrate::ev_set() for values of eflag (0-3) and vflag (0-6) see integrate::ev_set() for values of eflag (0-3) and vflag (0-6)
@ -149,6 +161,12 @@ void KSpace::modify_params(int narg, char **arg)
error->warning(FLERR,"Kspace_modify slab param < 2.0 may " error->warning(FLERR,"Kspace_modify slab param < 2.0 may "
"cause unphysical behavior"); "cause unphysical behavior");
slabflag = 1; slabflag = 1;
} else if (strcmp(arg[iarg],"compute") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal kspace_modify command");
if (strcmp(arg[iarg+1],"yes") == 0) compute_flag = 1;
else if (strcmp(arg[iarg+1],"no") == 0) compute_flag = 0;
else error->all(FLERR,"Illegal kspace_modify command");
iarg += 2;
} else error->all(FLERR,"Illegal kspace_modify command"); } else error->all(FLERR,"Illegal kspace_modify command");
} }
} }

View File

@ -29,10 +29,15 @@ class KSpace : protected Pointers {
double g_ewald; double g_ewald;
int nx_pppm,ny_pppm,nz_pppm; int nx_pppm,ny_pppm,nz_pppm;
int compute_flag; // 0 if skip compute()
KSpace(class LAMMPS *, int, char **); KSpace(class LAMMPS *, int, char **);
virtual ~KSpace(); virtual ~KSpace();
void modify_params(int, char **); void modify_params(int, char **);
void *extract(const char *); void *extract(const char *);
void compute_dummy(int, int);
// general child-class methods
virtual void init() = 0; virtual void init() = 0;
virtual void setup() = 0; virtual void setup() = 0;

View File

@ -151,6 +151,13 @@ void Min::init()
rho_flag = 0; rho_flag = 0;
if (atom->rho_flag) rho_flag = 1; if (atom->rho_flag) rho_flag = 1;
// allow pair and Kspace compute() to be turned off via modify flags
if (force->pair && force->pair->compute_flag) pair_compute_flag = 1;
else pair_compute_flag = 0;
if (force->kspace && force->kspace->compute_flag) kspace_compute_flag = 1;
else kspace_compute_flag = 0;
// orthogonal vs triclinic simulation box // orthogonal vs triclinic simulation box
triclinic = domain->triclinic; triclinic = domain->triclinic;
@ -172,10 +179,6 @@ void Min::init()
neighbor->dist_check = 1; neighbor->dist_check = 1;
niter = neval = 0; niter = neval = 0;
// style-specific initialization
init_style();
} }
/* ---------------------------------------------------------------------- /* ----------------------------------------------------------------------
@ -250,7 +253,8 @@ void Min::setup()
force_clear(); force_clear();
modify->setup_pre_force(vflag); modify->setup_pre_force(vflag);
if (force->pair) force->pair->compute(eflag,vflag); if (pair_compute_flag) force->pair->compute(eflag,vflag);
else if (force->pair) force->pair->compute_dummy(eflag,vflag);
if (atom->molecular) { if (atom->molecular) {
if (force->bond) force->bond->compute(eflag,vflag); if (force->bond) force->bond->compute(eflag,vflag);
@ -261,7 +265,8 @@ void Min::setup()
if (force->kspace) { if (force->kspace) {
force->kspace->setup(); force->kspace->setup();
force->kspace->compute(eflag,vflag); if (kspace_compute_flag) force->kspace->compute(eflag,vflag);
else force->kspace->compute_dummy(eflag,vflag);
} }
if (force->newton) comm->reverse_comm(); if (force->newton) comm->reverse_comm();
@ -321,7 +326,8 @@ void Min::setup_minimal(int flag)
force_clear(); force_clear();
modify->setup_pre_force(vflag); modify->setup_pre_force(vflag);
if (force->pair) force->pair->compute(eflag,vflag); if (pair_compute_flag) force->pair->compute(eflag,vflag);
else if (force->pair) force->pair->compute_dummy(eflag,vflag);
if (atom->molecular) { if (atom->molecular) {
if (force->bond) force->bond->compute(eflag,vflag); if (force->bond) force->bond->compute(eflag,vflag);
@ -332,7 +338,8 @@ void Min::setup_minimal(int flag)
if (force->kspace) { if (force->kspace) {
force->kspace->setup(); force->kspace->setup();
force->kspace->compute(eflag,vflag); if (kspace_compute_flag) force->kspace->compute(eflag,vflag);
else force->kspace->compute_dummy(eflag,vflag);
} }
if (force->newton) comm->reverse_comm(); if (force->newton) comm->reverse_comm();
@ -458,7 +465,7 @@ double Min::energy_force(int resetflag)
timer->stamp(); timer->stamp();
if (force->pair) { if (pair_compute_flag) {
force->pair->compute(eflag,vflag); force->pair->compute(eflag,vflag);
timer->stamp(TIME_PAIR); timer->stamp(TIME_PAIR);
} }
@ -471,7 +478,7 @@ double Min::energy_force(int resetflag)
timer->stamp(TIME_BOND); timer->stamp(TIME_BOND);
} }
if (force->kspace) { if (kspace_compute_flag) {
force->kspace->compute(eflag,vflag); force->kspace->compute(eflag,vflag);
timer->stamp(TIME_KSPACE); timer->stamp(TIME_KSPACE);
} }

View File

@ -30,7 +30,7 @@ class Min : protected Pointers {
Min(class LAMMPS *); Min(class LAMMPS *);
virtual ~Min(); virtual ~Min();
void init(); virtual void init();
void setup(); void setup();
void setup_minimal(int); void setup_minimal(int);
void run(int); void run(int);
@ -66,6 +66,9 @@ class Min : protected Pointers {
int torqueflag,erforceflag; int torqueflag,erforceflag;
int e_flag,rho_flag; int e_flag,rho_flag;
int pair_compute_flag; // 0 if pair->compute is skipped
int kspace_compute_flag; // 0 if kspace->compute is skipped
int narray; // # of arrays stored by fix_minimize int narray; // # of arrays stored by fix_minimize
class FixMinimize *fix_minimize; // fix that stores auxiliary data class FixMinimize *fix_minimize; // fix that stores auxiliary data

View File

@ -44,8 +44,10 @@ MinFire::MinFire(LAMMPS *lmp) : Min(lmp) {}
/* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */
void MinFire::init_style() void MinFire::init()
{ {
Min::init();
dt = update->dt; dt = update->dt;
} }

View File

@ -28,7 +28,7 @@ class MinFire : public Min {
public: public:
MinFire(class LAMMPS *); MinFire(class LAMMPS *);
~MinFire() {} ~MinFire() {}
void init_style(); void init();
void setup_style(); void setup_style();
void reset_vectors(); void reset_vectors();
int iterate(int); int iterate(int);

View File

@ -104,11 +104,13 @@ MinHFTN::~MinHFTN (void)
} }
/* ---------------------------------------------------------------------- /* ----------------------------------------------------------------------
Public method init_style Public method init
------------------------------------------------------------------------- */ ------------------------------------------------------------------------- */
void MinHFTN::init_style() void MinHFTN::init()
{ {
Min::init();
for (int i = 1; i < NUM_HFTN_ATOM_BASED_VECTORS; i++) { for (int i = 1; i < NUM_HFTN_ATOM_BASED_VECTORS; i++) {
if (_daExtraGlobal[i] != NULL) if (_daExtraGlobal[i] != NULL)
delete [] _daExtraGlobal[i]; delete [] _daExtraGlobal[i];

View File

@ -42,8 +42,7 @@ class MinHFTN : public Min
MinHFTN (LAMMPS *); MinHFTN (LAMMPS *);
~MinHFTN (void); ~MinHFTN (void);
void init();
void init_style();
void setup_style(); void setup_style();
void reset_vectors(); void reset_vectors();
int iterate (int); int iterate (int);

View File

@ -77,8 +77,10 @@ MinLineSearch::~MinLineSearch()
/* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */
void MinLineSearch::init_style() void MinLineSearch::init()
{ {
Min::init();
if (linestyle == 0) linemin = &MinLineSearch::linemin_backtrack; if (linestyle == 0) linemin = &MinLineSearch::linemin_backtrack;
else if (linestyle == 1) linemin = &MinLineSearch::linemin_quadratic; else if (linestyle == 1) linemin = &MinLineSearch::linemin_quadratic;
else if (linestyle == 2) linemin = &MinLineSearch::linemin_forcezero; else if (linestyle == 2) linemin = &MinLineSearch::linemin_forcezero;

View File

@ -22,7 +22,7 @@ class MinLineSearch : public Min {
public: public:
MinLineSearch(class LAMMPS *); MinLineSearch(class LAMMPS *);
~MinLineSearch(); ~MinLineSearch();
void init_style(); void init();
void setup_style(); void setup_style();
void reset_vectors(); void reset_vectors();

View File

@ -41,8 +41,10 @@ MinQuickMin::MinQuickMin(LAMMPS *lmp) : Min(lmp) {}
/* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */
void MinQuickMin::init_style() void MinQuickMin::init()
{ {
Min::init();
dt = update->dt; dt = update->dt;
} }

View File

@ -28,7 +28,7 @@ class MinQuickMin : public Min {
public: public:
MinQuickMin(class LAMMPS *); MinQuickMin(class LAMMPS *);
~MinQuickMin() {} ~MinQuickMin() {}
void init_style(); void init();
void setup_style(); void setup_style();
void reset_vectors(); void reset_vectors();
int iterate(int); int iterate(int);

View File

@ -64,6 +64,7 @@ Pair::Pair(LAMMPS *lmp) : Pointers(lmp)
// pair_modify settings // pair_modify settings
compute_flag = 1;
offset_flag = 0; offset_flag = 0;
mix_flag = GEOMETRIC; mix_flag = GEOMETRIC;
tail_flag = 0; tail_flag = 0;
@ -127,6 +128,12 @@ void Pair::modify_params(int narg, char **arg)
else if (strcmp(arg[iarg+1],"no") == 0) tail_flag = 0; else if (strcmp(arg[iarg+1],"no") == 0) tail_flag = 0;
else error->all(FLERR,"Illegal pair_modify command"); else error->all(FLERR,"Illegal pair_modify command");
iarg += 2; iarg += 2;
} else if (strcmp(arg[iarg],"compute") == 0) {
if (iarg+2 > narg) error->all(FLERR,"Illegal pair_modify command");
if (strcmp(arg[iarg+1],"yes") == 0) compute_flag = 1;
else if (strcmp(arg[iarg+1],"no") == 0) compute_flag = 0;
else error->all(FLERR,"Illegal pair_modify command");
iarg += 2;
} else error->all(FLERR,"Illegal pair_modify command"); } else error->all(FLERR,"Illegal pair_modify command");
} }
} }
@ -262,6 +269,14 @@ double Pair::mix_distance(double sig1, double sig2)
return value; return value;
} }
/* ---------------------------------------------------------------------- */
void Pair::compute_dummy(int eflag, int vflag)
{
if (eflag || vflag) ev_setup(eflag,vflag);
else evflag = 0;
}
/* ---------------------------------------------------------------------- /* ----------------------------------------------------------------------
setup for energy, virial computation setup for energy, virial computation
see integrate::ev_set() for values of eflag (0-3) and vflag (0-6) see integrate::ev_set() for values of eflag (0-3) and vflag (0-6)

View File

@ -72,6 +72,8 @@ class Pair : protected Pointers {
class NeighList *listmiddle; class NeighList *listmiddle;
class NeighList *listouter; class NeighList *listouter;
int compute_flag; // 0 if skip compute()
Pair(class LAMMPS *); Pair(class LAMMPS *);
virtual ~Pair(); virtual ~Pair();
@ -84,6 +86,7 @@ class Pair : protected Pointers {
void write_file(int, char **); void write_file(int, char **);
void init_bitmap(double, double, int, int &, int &, int &, int &); void init_bitmap(double, double, int, int &, int &, int &, int &);
virtual void modify_params(int, char **); virtual void modify_params(int, char **);
void compute_dummy(int, int);
// need to be public, so can be called by pair_style reaxc // need to be public, so can be called by pair_style reaxc

View File

@ -244,6 +244,8 @@ Respa::~Respa()
void Respa::init() void Respa::init()
{ {
Integrate::init();
// warn if no fixes // warn if no fixes
if (modify->nfix == 0 && comm->me == 0) if (modify->nfix == 0 && comm->me == 0)
@ -359,17 +361,17 @@ void Respa::setup()
force->dihedral->compute(eflag,vflag); force->dihedral->compute(eflag,vflag);
if (level_improper == ilevel && force->improper) if (level_improper == ilevel && force->improper)
force->improper->compute(eflag,vflag); force->improper->compute(eflag,vflag);
if (level_pair == ilevel && force->pair) if (level_pair == ilevel && pair_compute_flag)
force->pair->compute(eflag,vflag); force->pair->compute(eflag,vflag);
if (level_inner == ilevel && force->pair) if (level_inner == ilevel && pair_compute_flag)
force->pair->compute_inner(); force->pair->compute_inner();
if (level_middle == ilevel && force->pair) if (level_middle == ilevel && pair_compute_flag)
force->pair->compute_middle(); force->pair->compute_middle();
if (level_outer == ilevel && force->pair) if (level_outer == ilevel && pair_compute_flag)
force->pair->compute_outer(eflag,vflag); force->pair->compute_outer(eflag,vflag);
if (level_kspace == ilevel && force->kspace) { if (level_kspace == ilevel && force->kspace) {
force->kspace->setup(); force->kspace->setup();
force->kspace->compute(eflag,vflag); if (kspace_compute_flag) force->kspace->compute(eflag,vflag);
} }
if (newton[ilevel]) comm->reverse_comm(); if (newton[ilevel]) comm->reverse_comm();
copy_f_flevel(ilevel); copy_f_flevel(ilevel);
@ -423,17 +425,17 @@ void Respa::setup_minimal(int flag)
force->dihedral->compute(eflag,vflag); force->dihedral->compute(eflag,vflag);
if (level_improper == ilevel && force->improper) if (level_improper == ilevel && force->improper)
force->improper->compute(eflag,vflag); force->improper->compute(eflag,vflag);
if (level_pair == ilevel && force->pair) if (level_pair == ilevel && pair_compute_flag)
force->pair->compute(eflag,vflag); force->pair->compute(eflag,vflag);
if (level_inner == ilevel && force->pair) if (level_inner == ilevel && pair_compute_flag)
force->pair->compute_inner(); force->pair->compute_inner();
if (level_middle == ilevel && force->pair) if (level_middle == ilevel && pair_compute_flag)
force->pair->compute_middle(); force->pair->compute_middle();
if (level_outer == ilevel && force->pair) if (level_outer == ilevel && pair_compute_flag)
force->pair->compute_outer(eflag,vflag); force->pair->compute_outer(eflag,vflag);
if (level_kspace == ilevel && force->kspace) { if (level_kspace == ilevel && force->kspace) {
force->kspace->setup(); force->kspace->setup();
force->kspace->compute(eflag,vflag); if (kspace_compute_flag) force->kspace->compute(eflag,vflag);
} }
if (newton[ilevel]) comm->reverse_comm(); if (newton[ilevel]) comm->reverse_comm();
copy_f_flevel(ilevel); copy_f_flevel(ilevel);
@ -557,23 +559,23 @@ void Respa::recurse(int ilevel)
force->improper->compute(eflag,vflag); force->improper->compute(eflag,vflag);
timer->stamp(TIME_BOND); timer->stamp(TIME_BOND);
} }
if (level_pair == ilevel && force->pair) { if (level_pair == ilevel && pair_compute_flag) {
force->pair->compute(eflag,vflag); force->pair->compute(eflag,vflag);
timer->stamp(TIME_PAIR); timer->stamp(TIME_PAIR);
} }
if (level_inner == ilevel && force->pair) { if (level_inner == ilevel && pair_compute_flag) {
force->pair->compute_inner(); force->pair->compute_inner();
timer->stamp(TIME_PAIR); timer->stamp(TIME_PAIR);
} }
if (level_middle == ilevel && force->pair) { if (level_middle == ilevel && pair_compute_flag) {
force->pair->compute_middle(); force->pair->compute_middle();
timer->stamp(TIME_PAIR); timer->stamp(TIME_PAIR);
} }
if (level_outer == ilevel && force->pair) { if (level_outer == ilevel && pair_compute_flag) {
force->pair->compute_outer(eflag,vflag); force->pair->compute_outer(eflag,vflag);
timer->stamp(TIME_PAIR); timer->stamp(TIME_PAIR);
} }
if (level_kspace == ilevel && force->kspace) { if (level_kspace == ilevel && kspace_compute_flag) {
force->kspace->compute(eflag,vflag); force->kspace->compute(eflag,vflag);
timer->stamp(TIME_KSPACE); timer->stamp(TIME_KSPACE);
} }

View File

@ -46,6 +46,8 @@ Verlet::Verlet(LAMMPS *lmp, int narg, char **arg) :
void Verlet::init() void Verlet::init()
{ {
Integrate::init();
// warn if no fixes // warn if no fixes
if (modify->nfix == 0 && comm->me == 0) if (modify->nfix == 0 && comm->me == 0)
@ -118,7 +120,8 @@ void Verlet::setup()
force_clear(); force_clear();
modify->setup_pre_force(vflag); modify->setup_pre_force(vflag);
if (force->pair) force->pair->compute(eflag,vflag); if (pair_compute_flag) force->pair->compute(eflag,vflag);
else if (force->pair) force->pair->compute_dummy(eflag,vflag);
if (atom->molecular) { if (atom->molecular) {
if (force->bond) force->bond->compute(eflag,vflag); if (force->bond) force->bond->compute(eflag,vflag);
@ -129,7 +132,8 @@ void Verlet::setup()
if (force->kspace) { if (force->kspace) {
force->kspace->setup(); force->kspace->setup();
force->kspace->compute(eflag,vflag); if (kspace_compute_flag) force->kspace->compute(eflag,vflag);
else force->kspace->compute_dummy(eflag,vflag);
} }
if (force->newton) comm->reverse_comm(); if (force->newton) comm->reverse_comm();
@ -172,7 +176,8 @@ void Verlet::setup_minimal(int flag)
force_clear(); force_clear();
modify->setup_pre_force(vflag); modify->setup_pre_force(vflag);
if (force->pair) force->pair->compute(eflag,vflag); if (pair_compute_flag) force->pair->compute(eflag,vflag);
else if (force->pair) force->pair->compute_dummy(eflag,vflag);
if (atom->molecular) { if (atom->molecular) {
if (force->bond) force->bond->compute(eflag,vflag); if (force->bond) force->bond->compute(eflag,vflag);
@ -183,7 +188,8 @@ void Verlet::setup_minimal(int flag)
if (force->kspace) { if (force->kspace) {
force->kspace->setup(); force->kspace->setup();
force->kspace->compute(eflag,vflag); if (kspace_compute_flag) force->kspace->compute(eflag,vflag);
else force->kspace->compute_dummy(eflag,vflag);
} }
if (force->newton) comm->reverse_comm(); if (force->newton) comm->reverse_comm();
@ -256,7 +262,7 @@ void Verlet::run(int n)
timer->stamp(); timer->stamp();
if (force->pair) { if (pair_compute_flag) {
force->pair->compute(eflag,vflag); force->pair->compute(eflag,vflag);
timer->stamp(TIME_PAIR); timer->stamp(TIME_PAIR);
} }
@ -269,7 +275,7 @@ void Verlet::run(int n)
timer->stamp(TIME_BOND); timer->stamp(TIME_BOND);
} }
if (force->kspace) { if (kspace_compute_flag) {
force->kspace->compute(eflag,vflag); force->kspace->compute(eflag,vflag);
timer->stamp(TIME_KSPACE); timer->stamp(TIME_KSPACE);
} }