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);
// 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;
@ -132,6 +133,8 @@ FixPair::FixPair(LAMMPS *lmp, int narg, char **arg) :
for (int m = 0; m < ncols; m++)
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)
{
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
lasttime prevents mulitiple triggers by min linesearch on same iteration
------------------------------------------------------------------------- */
void FixPair::pre_force(int /*vflag*/)
{
if (update->ntimestep % nevery) return;
if (update->ntimestep == lasttime) return;
// 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*/)
{
if (update->ntimestep % nevery) return;
if (update->ntimestep == lasttime) return;
lasttime = update->ntimestep;
// extract pair style fields one by one
// store their values in this fix

View File

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