Enforce pre_exchange() order for (currently) unused update option

This commit is contained in:
Joel Thomas Clemmer
2022-03-25 15:56:59 -06:00
parent dad8fb8b06
commit d710d19aef
2 changed files with 23 additions and 5 deletions

View File

@ -50,6 +50,11 @@ FixBondHistory::FixBondHistory(LAMMPS *lmp, int narg, char **arg) :
restart_global = 1;
create_attribute = 1;
// Flag whether bond arrays are updated such that data may need to be
// copied to atom arrays before exchanging atoms
// Prevents sequential calls to pre_exchange() without post_neighbor()
updated_bond_flag = 0;
bondstore = nullptr;
maxbond = 0;
allocate();
@ -105,8 +110,15 @@ void FixBondHistory::update_atom_value(int i, int m, int idata, double value)
double FixBondHistory::get_atom_value(int i, int m, int idata)
{
if (idata >= ndata || m > nbond) error->all(FLERR, "Index exceeded in fix bond history");
return atom->darray[index][i][m*ndata+idata];
if (idata >= ndata || m > nbond) error->all(FLERR, "Index exceeded in fix bond history");
return atom->darray[index][i][m*ndata+idata];
}
/* ---------------------------------------------------------------------- */
void FixBondHistory::setup_pre_exchange()
{
pre_exchange();
}
/* ----------------------------------------------------------------------
@ -119,7 +131,7 @@ void FixBondHistory::pre_exchange()
{
if (!update_flag) return;
if (!stored_flag) return;
if (!bondstore) return;
if (!updated_bond_flag) return;
int i1, i2, n, m, idata;
int **bondlist = neighbor->bondlist;
@ -160,6 +172,8 @@ void FixBondHistory::pre_exchange()
}
}
}
updated_bond_flag = 0;
}
/* ---------------------------------------------------------------------- */
@ -181,7 +195,7 @@ void FixBondHistory::setup_post_neighbor()
maxbond += DELTA;
memory->grow(bondstore,maxbond,ndata,"fix_bond_store:bondstore");
}
pre_exchange();
post_neighbor();
}
@ -238,6 +252,8 @@ void FixBondHistory::post_neighbor()
}
}
}
updated_bond_flag = 1;
}
/* ---------------------------------------------------------------------- */

View File

@ -36,6 +36,7 @@ class FixBondHistory : public Fix {
int setmask() override;
void post_constructor() override;
void setup_post_neighbor() override;
void setup_pre_exchange() override;
void post_neighbor() override;
void pre_exchange() override;
double memory_usage() override;
@ -65,7 +66,8 @@ class FixBondHistory : public Fix {
void allocate();
int update_flag;
int update_flag; //Flag whether history values can evolve
int updated_bond_flag;
int nbond, maxbond, ndata;
int index;
char *id_fix;