modernize accessors and error handling in fixes box/relax and spring/chunk

This commit is contained in:
Axel Kohlmeyer
2022-09-02 05:42:35 -04:00
parent 874588c74f
commit ff10b2bc26
2 changed files with 100 additions and 119 deletions

View File

@ -38,7 +38,7 @@ FixSpringChunk::FixSpringChunk(LAMMPS *lmp, int narg, char **arg) :
Fix(lmp, narg, arg),
idchunk(nullptr), idcom(nullptr), com0(nullptr), fcom(nullptr)
{
if (narg != 6) error->all(FLERR,"Illegal fix spring/chunk command");
if (narg != 6) utils::missing_cmd_args(FLERR, "fix spring/chunk", error);
restart_global = 1;
scalar_flag = 1;
@ -66,15 +66,14 @@ FixSpringChunk::~FixSpringChunk()
// decrement lock counter in compute chunk/atom, it if still exists
int icompute = modify->find_compute(idchunk);
if (icompute >= 0) {
cchunk = dynamic_cast<ComputeChunkAtom *>( modify->compute[icompute]);
cchunk = dynamic_cast<ComputeChunkAtom *>(modify->get_compute_by_id(idchunk));
if (cchunk) {
cchunk->unlock(this);
cchunk->lockcount--;
}
delete [] idchunk;
delete [] idcom;
delete[] idchunk;
delete[] idcom;
}
/* ---------------------------------------------------------------------- */
@ -94,24 +93,19 @@ void FixSpringChunk::init()
{
// current indices for idchunk and idcom
int icompute = modify->find_compute(idchunk);
if (icompute < 0)
error->all(FLERR,"Chunk/atom compute does not exist for fix spring/chunk");
cchunk = dynamic_cast<ComputeChunkAtom *>( modify->compute[icompute]);
if (strcmp(cchunk->style,"chunk/atom") != 0)
error->all(FLERR,"Fix spring/chunk does not use chunk/atom compute");
cchunk = dynamic_cast<ComputeChunkAtom *>(modify->get_compute_by_id(idchunk));
if (!cchunk)
error->all(FLERR,"Chunk/atom compute {} does not exist or is not chunk/atom style", idchunk);
icompute = modify->find_compute(idcom);
if (icompute < 0)
error->all(FLERR,"Com/chunk compute does not exist for fix spring/chunk");
ccom = dynamic_cast<ComputeCOMChunk *>( modify->compute[icompute]);
if (strcmp(ccom->style,"com/chunk") != 0)
error->all(FLERR,"Fix spring/chunk does not use com/chunk compute");
ccom = dynamic_cast<ComputeCOMChunk *>(modify->get_compute_by_id(idcom));
if (!ccom)
error->all(FLERR,"Com/chunk compute {} does not exist or is not com/chunk style", idcom);
// check that idchunk is consistent with ccom->idchunk
if (strcmp(idchunk,ccom->idchunk) != 0)
error->all(FLERR,"Fix spring chunk chunkID not same as comID chunkID");
if (ccom && (strcmp(idchunk,ccom->idchunk) != 0))
error->all(FLERR,"Fix spring/chunk chunk ID {} not the same as compute com/chunk chunk ID {}",
idchunk, ccom->idchunk);
if (utils::strmatch(update->integrate_style,"^respa")) {
ilevel_respa = (dynamic_cast<Respa *>( update->integrate))->nlevels-1;
@ -268,21 +262,18 @@ void FixSpringChunk::restart(char *buf)
memory->destroy(com0);
memory->destroy(fcom);
int icompute = modify->find_compute(idchunk);
if (icompute < 0)
error->all(FLERR,"Chunk/atom compute does not exist for fix spring/chunk");
cchunk = dynamic_cast<ComputeChunkAtom *>( modify->compute[icompute]);
if (strcmp(cchunk->style,"chunk/atom") != 0)
error->all(FLERR,"Fix spring/chunk does not use chunk/atom compute");
cchunk = dynamic_cast<ComputeChunkAtom *>(modify->get_compute_by_id(idchunk));
if (!cchunk)
error->all(FLERR,"Chunk/atom compute {} does not exist or is not chunk/atom style", idchunk);
nchunk = cchunk->setup_chunks();
cchunk->compute_ichunk();
memory->create(com0,nchunk,3,"spring/chunk:com0");
memory->create(fcom,nchunk,3,"spring/chunk:fcom");
printf("restart chunks:%d computed chunks: %d\n",n,nchunk);
if (n != nchunk) {
if (comm->me == 0)
error->warning(FLERR,"Number of chunks has changed. Cannot use restart");
error->warning(FLERR,"Number of chunks changed from {} to {}. Cannot use restart", n, nchunk);
memory->destroy(com0);
memory->destroy(fcom);
nchunk = 1;