add lasttime check to fix pair
This commit is contained in:
@ -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,14 +205,18 @@ 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
|
||||||
|
|
||||||
|
printf("FPAIR preforce: set trigger %ld\n",update->ntimestep);
|
||||||
|
|
||||||
for (int ifield = 0; ifield < nfield; ifield++)
|
for (int ifield = 0; ifield < nfield; ifield++)
|
||||||
if (trigger[ifield]) *(triggerptr[ifield]) = 1;
|
if (trigger[ifield]) *(triggerptr[ifield]) = 1;
|
||||||
}
|
}
|
||||||
@ -215,12 +229,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
|
||||||
@ -230,6 +247,8 @@ void FixPair::post_force(int /*vflag*/)
|
|||||||
int icol = 0;
|
int icol = 0;
|
||||||
int columns;
|
int columns;
|
||||||
|
|
||||||
|
printf("FPAIR postforce: extract %ld\n",update->ntimestep);
|
||||||
|
|
||||||
for (int ifield = 0; ifield < nfield; ifield++) {
|
for (int ifield = 0; ifield < nfield; ifield++) {
|
||||||
void *pvoid = pstyle->extract_peratom(fieldname[ifield],columns);
|
void *pvoid = pstyle->extract_peratom(fieldname[ifield],columns);
|
||||||
if (pvoid == nullptr)
|
if (pvoid == nullptr)
|
||||||
|
|||||||
@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user