Merge pull request #3455 from lammps/fix-pair-min-tweak

Adjust fix pair to work better with minimization
This commit is contained in:
Axel Kohlmeyer
2022-09-22 12:25:04 -04:00
committed by GitHub
2 changed files with 19 additions and 2 deletions

View File

@ -120,7 +120,8 @@ FixPair::FixPair(LAMMPS *lmp, int narg, char **arg) :
atom->add_callback(Atom::GROW); atom->add_callback(Atom::GROW);
// zero the vector/array since dump may access it on timestep 0 // zero the vector/array since dump may access it on timestep 0
// zero the vector/array since a variable may access it before first run // zero the vector/array since a variable may access it before first ru
// initialize lasttime so step 0 will trigger/extract
int nlocal = atom->nlocal; int nlocal = atom->nlocal;
@ -132,6 +133,8 @@ FixPair::FixPair(LAMMPS *lmp, int narg, char **arg) :
for (int m = 0; m < ncols; m++) for (int m = 0; m < ncols; m++)
array[i][m] = 0.0; array[i][m] = 0.0;
} }
lasttime = -1;
} }
/* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */
@ -188,6 +191,13 @@ void FixPair::setup(int vflag)
/* ---------------------------------------------------------------------- */ /* ---------------------------------------------------------------------- */
void FixPair::min_setup(int vflag)
{
setup(vflag);
}
/* ---------------------------------------------------------------------- */
void FixPair::setup_pre_force(int vflag) void FixPair::setup_pre_force(int vflag)
{ {
pre_force(vflag); pre_force(vflag);
@ -195,11 +205,13 @@ void FixPair::setup_pre_force(int vflag)
/* ---------------------------------------------------------------------- /* ----------------------------------------------------------------------
trigger pair style computation on steps which are multiples of Nevery trigger pair style computation on steps which are multiples of Nevery
lasttime prevents mulitiple triggers by min linesearch on same iteration
------------------------------------------------------------------------- */ ------------------------------------------------------------------------- */
void FixPair::pre_force(int /*vflag*/) void FixPair::pre_force(int /*vflag*/)
{ {
if (update->ntimestep % nevery) return; if (update->ntimestep % nevery) return;
if (update->ntimestep == lasttime) return;
// set pair style triggers // set pair style triggers
@ -215,12 +227,15 @@ void FixPair::min_pre_force(int vflag)
} }
/* ---------------------------------------------------------------------- /* ----------------------------------------------------------------------
extract results from pair style extract results from pair style on steps which are multiples of Nevery
lasttime prevents mulitiple extracts by min linesearch on same iteration
------------------------------------------------------------------------- */ ------------------------------------------------------------------------- */
void FixPair::post_force(int /*vflag*/) void FixPair::post_force(int /*vflag*/)
{ {
if (update->ntimestep % nevery) return; if (update->ntimestep % nevery) return;
if (update->ntimestep == lasttime) return;
lasttime = update->ntimestep;
// extract pair style fields one by one // extract pair style fields one by one
// store their values in this fix // store their values in this fix

View File

@ -31,6 +31,7 @@ class FixPair : public Fix {
int setmask() override; int setmask() override;
void init() override; void init() override;
void setup(int) override; void setup(int) override;
void min_setup(int) override;
void setup_pre_force(int) override; void setup_pre_force(int) override;
void pre_force(int) override; void pre_force(int) override;
void min_pre_force(int) override; void min_pre_force(int) override;
@ -46,6 +47,7 @@ class FixPair : public Fix {
private: private:
int nevery,nfield,ncols; int nevery,nfield,ncols;
bigint lasttime;
char *pairname; char *pairname;
char **fieldname,**triggername; char **fieldname,**triggername;
int *trigger; int *trigger;