update a bunch more error messages
This commit is contained in:
@ -387,7 +387,17 @@ the potential energy has stabilized.
|
|||||||
|
|
||||||
.. _err007:
|
.. _err007:
|
||||||
|
|
||||||
.. currently unused
|
Fix used in ... not computed at compatible time
|
||||||
|
-----------------------------------------------
|
||||||
|
|
||||||
|
Many fix styles are invoked only every *nevery* timesteps, which means
|
||||||
|
their data is only valid on those steps. When data from a fix is used
|
||||||
|
as input for a compute, a dump, another fix, or thermo output, it must
|
||||||
|
read that data at timesteps when the fix in question was invoked, i.e.
|
||||||
|
on timesteps that are multiples of its *nevery* setting. If this is
|
||||||
|
not the case, LAMMPS will stop with an error. To remedy this, it may
|
||||||
|
be required to change the output frequency or the *nevery* setting of
|
||||||
|
the fix.
|
||||||
|
|
||||||
.. _err0008:
|
.. _err0008:
|
||||||
|
|
||||||
|
|||||||
@ -37,6 +37,7 @@
|
|||||||
#include <cmath>
|
#include <cmath>
|
||||||
|
|
||||||
using namespace LAMMPS_NS;
|
using namespace LAMMPS_NS;
|
||||||
|
using utils::errorurl;
|
||||||
|
|
||||||
namespace ReaxFF {
|
namespace ReaxFF {
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
@ -182,8 +183,8 @@ namespace ReaxFF {
|
|||||||
|
|
||||||
if (End_Index(i, bonds) > comp)
|
if (End_Index(i, bonds) > comp)
|
||||||
system->error_ptr->one(FLERR, fmt::format("step {}: bondchk failed: "
|
system->error_ptr->one(FLERR, fmt::format("step {}: bondchk failed: "
|
||||||
"i={} end(i)={} str(i+1)={}\n",
|
"i={} end(i)={} str(i+1)={}{}",
|
||||||
step,i,End_Index(i,bonds),comp));
|
step,i,End_Index(i,bonds),comp,errorurl(18)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -207,8 +208,9 @@ namespace ReaxFF {
|
|||||||
|
|
||||||
if (End_Index(Hindex, hbonds) > comp)
|
if (End_Index(Hindex, hbonds) > comp)
|
||||||
system->error_ptr->one(FLERR, fmt::format("step {}: hbondchk failed: "
|
system->error_ptr->one(FLERR, fmt::format("step {}: hbondchk failed: "
|
||||||
"H={} end(H)={} str(H+1)={}\n",
|
"H={} end(H)={} str(H+1)={}{}",
|
||||||
step, Hindex,End_Index(Hindex,hbonds),comp));
|
step, Hindex,End_Index(Hindex,hbonds),comp,
|
||||||
|
errorurl(18)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -56,7 +56,7 @@ ComputeChunkAtom::ComputeChunkAtom(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
fchunk(nullptr), varatom(nullptr), id_fix(nullptr), fixstore(nullptr), lockfix(nullptr),
|
fchunk(nullptr), varatom(nullptr), id_fix(nullptr), fixstore(nullptr), lockfix(nullptr),
|
||||||
chunk(nullptr), exclude(nullptr), hash(nullptr)
|
chunk(nullptr), exclude(nullptr), hash(nullptr)
|
||||||
{
|
{
|
||||||
if (narg < 4) error->all(FLERR, "Illegal compute chunk/atom command");
|
if (narg < 4) utils::missing_cmd_args(FLERR, "compute chunk/atom", error);
|
||||||
|
|
||||||
peratom_flag = 1;
|
peratom_flag = 1;
|
||||||
scalar_flag = 1;
|
scalar_flag = 1;
|
||||||
@ -101,7 +101,7 @@ ComputeChunkAtom::ComputeChunkAtom(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
which = ArgInfo::BINSPHERE;
|
which = ArgInfo::BINSPHERE;
|
||||||
ncoord = 1;
|
ncoord = 1;
|
||||||
iarg = 4;
|
iarg = 4;
|
||||||
if (iarg + 6 > narg) error->all(FLERR, "Illegal compute chunk/atom command");
|
if (iarg + 6 > narg) utils::missing_cmd_args(FLERR, "compute chunk/atom bin/sphere", error);
|
||||||
sorigin_user[0] = utils::numeric(FLERR, arg[iarg], false, lmp);
|
sorigin_user[0] = utils::numeric(FLERR, arg[iarg], false, lmp);
|
||||||
sorigin_user[1] = utils::numeric(FLERR, arg[iarg + 1], false, lmp);
|
sorigin_user[1] = utils::numeric(FLERR, arg[iarg + 1], false, lmp);
|
||||||
sorigin_user[2] = utils::numeric(FLERR, arg[iarg + 2], false, lmp);
|
sorigin_user[2] = utils::numeric(FLERR, arg[iarg + 2], false, lmp);
|
||||||
@ -126,7 +126,7 @@ ComputeChunkAtom::ComputeChunkAtom(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
cdim1 = 0;
|
cdim1 = 0;
|
||||||
cdim2 = 1;
|
cdim2 = 1;
|
||||||
}
|
}
|
||||||
if (iarg + 5 > narg) error->all(FLERR, "Illegal compute chunk/atom command");
|
if (iarg + 5 > narg) utils::missing_cmd_args(FLERR, "compute chunk/atom bin/cylinder", error);
|
||||||
corigin_user[dim[0]] = 0.0;
|
corigin_user[dim[0]] = 0.0;
|
||||||
corigin_user[cdim1] = utils::numeric(FLERR, arg[iarg], false, lmp);
|
corigin_user[cdim1] = utils::numeric(FLERR, arg[iarg], false, lmp);
|
||||||
corigin_user[cdim2] = utils::numeric(FLERR, arg[iarg + 1], false, lmp);
|
corigin_user[cdim2] = utils::numeric(FLERR, arg[iarg + 1], false, lmp);
|
||||||
@ -151,7 +151,7 @@ ComputeChunkAtom::ComputeChunkAtom(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
cfvid = argi.copy_name();
|
cfvid = argi.copy_name();
|
||||||
|
|
||||||
if ((which == ArgInfo::UNKNOWN) || (which == ArgInfo::NONE) || (argi.get_dim() > 1))
|
if ((which == ArgInfo::UNKNOWN) || (which == ArgInfo::NONE) || (argi.get_dim() > 1))
|
||||||
error->all(FLERR, "Illegal compute chunk/atom command");
|
error->all(FLERR, 3, "Invalid compute chunk/atom argument {}", arg[3]);
|
||||||
iarg = 4;
|
iarg = 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -178,40 +178,42 @@ ComputeChunkAtom::ComputeChunkAtom(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
|
|
||||||
while (iarg < narg) {
|
while (iarg < narg) {
|
||||||
if (strcmp(arg[iarg], "region") == 0) {
|
if (strcmp(arg[iarg], "region") == 0) {
|
||||||
if (iarg + 2 > narg) error->all(FLERR, "Illegal compute chunk/atom command");
|
if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "compute chunk/atom region", error);
|
||||||
if (!domain->get_region_by_id(arg[iarg + 1]))
|
if (!domain->get_region_by_id(arg[iarg + 1]))
|
||||||
error->all(FLERR, "Region {} for compute chunk/atom does not exist", arg[iarg + 1]);
|
error->all(FLERR, iarg + 1, "Region {} for compute chunk/atom does not exist",
|
||||||
|
arg[iarg + 1]);
|
||||||
idregion = utils::strdup(arg[iarg + 1]);
|
idregion = utils::strdup(arg[iarg + 1]);
|
||||||
regionflag = 1;
|
regionflag = 1;
|
||||||
iarg += 2;
|
iarg += 2;
|
||||||
} else if (strcmp(arg[iarg], "nchunk") == 0) {
|
} else if (strcmp(arg[iarg], "nchunk") == 0) {
|
||||||
if (iarg + 2 > narg) error->all(FLERR, "Illegal compute chunk/atom command");
|
if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "compute chunk/atom nchunk", error);
|
||||||
if (strcmp(arg[iarg + 1], "once") == 0)
|
if (strcmp(arg[iarg + 1], "once") == 0)
|
||||||
nchunkflag = ONCE;
|
nchunkflag = ONCE;
|
||||||
else if (strcmp(arg[iarg + 1], "every") == 0)
|
else if (strcmp(arg[iarg + 1], "every") == 0)
|
||||||
nchunkflag = EVERY;
|
nchunkflag = EVERY;
|
||||||
else
|
else
|
||||||
error->all(FLERR, "Illegal compute chunk/atom command");
|
error->all(FLERR, iarg + 1, "Unknown compute chunk/atom nchunk argument {}", arg[iarg + 1]);
|
||||||
nchunksetflag = 1;
|
nchunksetflag = 1;
|
||||||
iarg += 2;
|
iarg += 2;
|
||||||
} else if (strcmp(arg[iarg], "limit") == 0) {
|
} else if (strcmp(arg[iarg], "limit") == 0) {
|
||||||
if (iarg + 2 > narg) error->all(FLERR, "Illegal compute chunk/atom command");
|
if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "compute chunk/atom limit", error);
|
||||||
limit = utils::inumeric(FLERR, arg[iarg + 1], false, lmp);
|
limit = utils::inumeric(FLERR, arg[iarg + 1], false, lmp);
|
||||||
if (limit < 0) error->all(FLERR, "Illegal compute chunk/atom command");
|
if (limit < 0)
|
||||||
|
error->all(FLERR, iarg + 1, "Illegal compute chunk/atom limit value {}", limit);
|
||||||
if (limit && !compress) limitfirst = 1;
|
if (limit && !compress) limitfirst = 1;
|
||||||
iarg += 2;
|
iarg += 2;
|
||||||
if (limit) {
|
if (limit) {
|
||||||
if (iarg > narg) error->all(FLERR, "Illegal compute chunk/atom command");
|
if (iarg > narg) utils::missing_cmd_args(FLERR, "compute chunk/atom limit", error);
|
||||||
if (strcmp(arg[iarg], "max") == 0)
|
if (strcmp(arg[iarg], "max") == 0)
|
||||||
limitstyle = LIMITMAX;
|
limitstyle = LIMITMAX;
|
||||||
else if (strcmp(arg[iarg], "exact") == 0)
|
else if (strcmp(arg[iarg], "exact") == 0)
|
||||||
limitstyle = LIMITEXACT;
|
limitstyle = LIMITEXACT;
|
||||||
else
|
else
|
||||||
error->all(FLERR, "Illegal compute chunk/atom command");
|
error->all(FLERR, iarg, "Unknown compute chunk/atom limit keyword {}", arg[iarg]);
|
||||||
iarg++;
|
iarg++;
|
||||||
}
|
}
|
||||||
} else if (strcmp(arg[iarg], "ids") == 0) {
|
} else if (strcmp(arg[iarg], "ids") == 0) {
|
||||||
if (iarg + 2 > narg) error->all(FLERR, "Illegal compute chunk/atom command");
|
if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "compute chunk/atom ids", error);
|
||||||
if (strcmp(arg[iarg + 1], "once") == 0)
|
if (strcmp(arg[iarg + 1], "once") == 0)
|
||||||
idsflag = ONCE;
|
idsflag = ONCE;
|
||||||
else if (strcmp(arg[iarg + 1], "nfreq") == 0)
|
else if (strcmp(arg[iarg + 1], "nfreq") == 0)
|
||||||
@ -219,14 +221,14 @@ ComputeChunkAtom::ComputeChunkAtom(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
else if (strcmp(arg[iarg + 1], "every") == 0)
|
else if (strcmp(arg[iarg + 1], "every") == 0)
|
||||||
idsflag = EVERY;
|
idsflag = EVERY;
|
||||||
else
|
else
|
||||||
error->all(FLERR, "Illegal compute chunk/atom command");
|
error->all(FLERR, iarg + 1, "Unknown compute chunk/atom ids argument {}", arg[iarg + 1]);
|
||||||
iarg += 2;
|
iarg += 2;
|
||||||
} else if (strcmp(arg[iarg], "compress") == 0) {
|
} else if (strcmp(arg[iarg], "compress") == 0) {
|
||||||
if (iarg + 2 > narg) error->all(FLERR, "Illegal compute chunk/atom command");
|
if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "compute chunk/atom compress", error);
|
||||||
compress = utils::logical(FLERR, arg[iarg + 1], false, lmp);
|
compress = utils::logical(FLERR, arg[iarg + 1], false, lmp);
|
||||||
iarg += 2;
|
iarg += 2;
|
||||||
} else if (strcmp(arg[iarg], "discard") == 0) {
|
} else if (strcmp(arg[iarg], "discard") == 0) {
|
||||||
if (iarg + 2 > narg) error->all(FLERR, "Illegal compute chunk/atom command");
|
if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "compute chunk/atom discard", error);
|
||||||
if (strcmp(arg[iarg + 1], "mixed") == 0)
|
if (strcmp(arg[iarg + 1], "mixed") == 0)
|
||||||
discard = MIXED;
|
discard = MIXED;
|
||||||
else if (strcmp(arg[iarg + 1], "no") == 0)
|
else if (strcmp(arg[iarg + 1], "no") == 0)
|
||||||
@ -234,11 +236,12 @@ ComputeChunkAtom::ComputeChunkAtom(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
else if (strcmp(arg[iarg + 1], "yes") == 0)
|
else if (strcmp(arg[iarg + 1], "yes") == 0)
|
||||||
discard = YESDISCARD;
|
discard = YESDISCARD;
|
||||||
else
|
else
|
||||||
error->all(FLERR, "Illegal compute chunk/atom command");
|
error->all(FLERR, iarg + 1, "Unknown compute chunk/atom discard argument {}",
|
||||||
|
arg[iarg + 1]);
|
||||||
discardsetflag = 1;
|
discardsetflag = 1;
|
||||||
iarg += 2;
|
iarg += 2;
|
||||||
} else if (strcmp(arg[iarg], "bound") == 0) {
|
} else if (strcmp(arg[iarg], "bound") == 0) {
|
||||||
if (iarg + 4 > narg) error->all(FLERR, "Illegal compute chunk/atom command");
|
if (iarg + 4 > narg) utils::missing_cmd_args(FLERR, "compute chunk/atom bound", error);
|
||||||
int idim = 0;
|
int idim = 0;
|
||||||
if (strcmp(arg[iarg + 1], "x") == 0)
|
if (strcmp(arg[iarg + 1], "x") == 0)
|
||||||
idim = 0;
|
idim = 0;
|
||||||
@ -247,7 +250,7 @@ ComputeChunkAtom::ComputeChunkAtom(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
else if (strcmp(arg[iarg + 1], "z") == 0)
|
else if (strcmp(arg[iarg + 1], "z") == 0)
|
||||||
idim = 2;
|
idim = 2;
|
||||||
else
|
else
|
||||||
error->all(FLERR, "Illegal compute chunk/atom command");
|
error->all(FLERR, iarg + 1, "Unknown compute chunk/atom bound argument {}", arg[iarg + 1]);
|
||||||
minflag[idim] = COORD;
|
minflag[idim] = COORD;
|
||||||
if (strcmp(arg[iarg + 2], "lower") == 0)
|
if (strcmp(arg[iarg + 2], "lower") == 0)
|
||||||
minflag[idim] = LOWER;
|
minflag[idim] = LOWER;
|
||||||
@ -260,7 +263,7 @@ ComputeChunkAtom::ComputeChunkAtom(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
maxvalue[idim] = utils::numeric(FLERR, arg[iarg + 3], false, lmp);
|
maxvalue[idim] = utils::numeric(FLERR, arg[iarg + 3], false, lmp);
|
||||||
iarg += 4;
|
iarg += 4;
|
||||||
} else if (strcmp(arg[iarg], "units") == 0) {
|
} else if (strcmp(arg[iarg], "units") == 0) {
|
||||||
if (iarg + 2 > narg) error->all(FLERR, "Illegal compute chunk/atom command");
|
if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "compute chunk/atom units", error);
|
||||||
if (strcmp(arg[iarg + 1], "box") == 0)
|
if (strcmp(arg[iarg + 1], "box") == 0)
|
||||||
scaleflag = BOX;
|
scaleflag = BOX;
|
||||||
else if (strcmp(arg[iarg + 1], "lattice") == 0)
|
else if (strcmp(arg[iarg + 1], "lattice") == 0)
|
||||||
@ -268,14 +271,14 @@ ComputeChunkAtom::ComputeChunkAtom(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
else if (strcmp(arg[iarg + 1], "reduced") == 0)
|
else if (strcmp(arg[iarg + 1], "reduced") == 0)
|
||||||
scaleflag = REDUCED;
|
scaleflag = REDUCED;
|
||||||
else
|
else
|
||||||
error->all(FLERR, "Illegal compute chunk/atom command");
|
error->all(FLERR, iarg + 1, "Unknown compute chunk/atom units argument {}", arg[iarg + 1]);
|
||||||
iarg += 2;
|
iarg += 2;
|
||||||
} else if (strcmp(arg[iarg], "pbc") == 0) {
|
} else if (strcmp(arg[iarg], "pbc") == 0) {
|
||||||
if (iarg + 2 > narg) error->all(FLERR, "Illegal compute chunk/atom command");
|
if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, "compute chunk/atom pbc", error);
|
||||||
pbcflag = utils::logical(FLERR, arg[iarg + 1], false, lmp);
|
pbcflag = utils::logical(FLERR, arg[iarg + 1], false, lmp);
|
||||||
iarg += 2;
|
iarg += 2;
|
||||||
} else
|
} else
|
||||||
error->all(FLERR, "Illegal compute chunk/atom command");
|
error->all(FLERR, iarg, "Unknown compute chunk/atom keyword {}", arg[iarg]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// set nchunkflag and discard to default values if not explicitly set
|
// set nchunkflag and discard to default values if not explicitly set
|
||||||
@ -309,74 +312,82 @@ ComputeChunkAtom::ComputeChunkAtom(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
// error checks
|
// error checks
|
||||||
|
|
||||||
if (which == ArgInfo::MOLECULE && !atom->molecule_flag)
|
if (which == ArgInfo::MOLECULE && !atom->molecule_flag)
|
||||||
error->all(FLERR, "Compute chunk/atom molecule for non-molecular system");
|
error->all(FLERR, Error::NOLASTLINE, "Compute chunk/atom molecule for non-molecular system");
|
||||||
|
|
||||||
if (!binflag && discard == MIXED)
|
if (!binflag && discard == MIXED)
|
||||||
error->all(FLERR,
|
error->all(FLERR, Error::NOLASTLINE,
|
||||||
"Compute chunk/atom without bins "
|
"Compute chunk/atom without bins cannot use discard mixed");
|
||||||
"cannot use discard mixed");
|
|
||||||
if (which == ArgInfo::BIN1D && delta[0] <= 0.0)
|
if (which == ArgInfo::BIN1D && delta[0] <= 0.0)
|
||||||
error->all(FLERR, "Illegal compute chunk/atom command");
|
error->all(FLERR, Error::NOLASTLINE, "Illegal compute chunk/atom bin/1d command");
|
||||||
if (which == ArgInfo::BIN2D && (delta[0] <= 0.0 || delta[1] <= 0.0))
|
if (which == ArgInfo::BIN2D && (delta[0] <= 0.0 || delta[1] <= 0.0))
|
||||||
error->all(FLERR, "Illegal compute chunk/atom command");
|
error->all(FLERR, Error::NOLASTLINE, "Illegal compute chunk/atom bin/2d command");
|
||||||
if (which == ArgInfo::BIN2D && (dim[0] == dim[1]))
|
if (which == ArgInfo::BIN2D && (dim[0] == dim[1]))
|
||||||
error->all(FLERR, "Illegal compute chunk/atom command");
|
error->all(FLERR, Error::NOLASTLINE, "Illegal compute chunk/atom bin/2d command");
|
||||||
if (which == ArgInfo::BIN3D && (delta[0] <= 0.0 || delta[1] <= 0.0 || delta[2] <= 0.0))
|
if (which == ArgInfo::BIN3D && (delta[0] <= 0.0 || delta[1] <= 0.0 || delta[2] <= 0.0))
|
||||||
error->all(FLERR, "Illegal compute chunk/atom command");
|
error->all(FLERR, Error::NOLASTLINE, "Illegal compute chunk/atom bin/3d command");
|
||||||
if (which == ArgInfo::BIN3D && (dim[0] == dim[1] || dim[1] == dim[2] || dim[0] == dim[2]))
|
if (which == ArgInfo::BIN3D && (dim[0] == dim[1] || dim[1] == dim[2] || dim[0] == dim[2]))
|
||||||
error->all(FLERR, "Illegal compute chunk/atom command");
|
error->all(FLERR, Error::NOLASTLINE, "Illegal compute chunk/atom bin/3d command");
|
||||||
if (which == ArgInfo::BINSPHERE) {
|
if (which == ArgInfo::BINSPHERE) {
|
||||||
if (domain->dimension == 2 && sorigin_user[2] != 0.0)
|
if (domain->dimension == 2 && sorigin_user[2] != 0.0)
|
||||||
error->all(FLERR, "Compute chunk/atom sphere z origin must be 0.0 for 2d");
|
error->all(FLERR, Error::NOLASTLINE, "Compute chunk/atom sphere z origin must be 0.0 for 2d");
|
||||||
if (sradmin_user < 0.0 || sradmin_user >= sradmax_user || nsbin < 1)
|
if (sradmin_user < 0.0 || sradmin_user >= sradmax_user || nsbin < 1)
|
||||||
error->all(FLERR, "Illegal compute chunk/atom command");
|
error->all(FLERR, Error::NOLASTLINE, "Illegal compute chunk/atom bin/sphere command");
|
||||||
}
|
}
|
||||||
if (which == ArgInfo::BINCYLINDER) {
|
if (which == ArgInfo::BINCYLINDER) {
|
||||||
if (delta[0] <= 0.0) error->all(FLERR, "Illegal compute chunk/atom command");
|
if (delta[0] <= 0.0)
|
||||||
|
error->all(FLERR, Error::NOLASTLINE, "Illegal compute chunk/atom bin/cylinder command");
|
||||||
if (domain->dimension == 2 && dim[0] != 2)
|
if (domain->dimension == 2 && dim[0] != 2)
|
||||||
error->all(FLERR, "Compute chunk/atom cylinder axis must be z for 2d");
|
error->all(FLERR, Error::NOLASTLINE, "Compute chunk/atom cylinder axis must be z for 2d");
|
||||||
if (cradmin_user < 0.0 || cradmin_user >= cradmax_user || ncbin < 1)
|
if (cradmin_user < 0.0 || cradmin_user >= cradmax_user || ncbin < 1)
|
||||||
error->all(FLERR, "Illegal compute chunk/atom command");
|
error->all(FLERR, Error::NOLASTLINE, "Illegal compute chunk/atom bin/cylinder command");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (which == ArgInfo::COMPUTE) {
|
if (which == ArgInfo::COMPUTE) {
|
||||||
cchunk = modify->get_compute_by_id(cfvid);
|
cchunk = modify->get_compute_by_id(cfvid);
|
||||||
if (!cchunk) error->all(FLERR, "Compute ID {} for compute chunk /atom does not exist", cfvid);
|
if (!cchunk)
|
||||||
|
error->all(FLERR, 3, "Compute ID {} for compute chunk /atom does not exist", cfvid);
|
||||||
if (cchunk->peratom_flag == 0)
|
if (cchunk->peratom_flag == 0)
|
||||||
error->all(FLERR, "Compute chunk/atom compute does not calculate per-atom values");
|
error->all(FLERR, 3, "Compute chunk/atom compute {} does not calculate per-atom values",
|
||||||
|
cfvid);
|
||||||
if ((argindex == 0) && (cchunk->size_peratom_cols != 0))
|
if ((argindex == 0) && (cchunk->size_peratom_cols != 0))
|
||||||
error->all(FLERR, "Compute chunk/atom compute does not calculate a per-atom vector");
|
error->all(FLERR, 3, "Compute chunk/atom compute {} does not calculate a per-atom vector",
|
||||||
|
cfvid);
|
||||||
if (argindex && (cchunk->size_peratom_cols == 0))
|
if (argindex && (cchunk->size_peratom_cols == 0))
|
||||||
error->all(FLERR, "Compute chunk/atom compute does not calculate a per-atom array");
|
error->all(FLERR, 3, "Compute chunk/atom compute {} does not calculate a per-atom array",
|
||||||
|
cfvid);
|
||||||
if (argindex && argindex > cchunk->size_peratom_cols)
|
if (argindex && argindex > cchunk->size_peratom_cols)
|
||||||
error->all(FLERR, "Compute chunk/atom compute array is accessed out-of-range");
|
error->all(FLERR, 3, "Compute chunk/atom compute {} array is accessed out-of-range{}", cfvid,
|
||||||
|
utils::errorurl(20));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (which == ArgInfo::FIX) {
|
if (which == ArgInfo::FIX) {
|
||||||
fchunk = modify->get_fix_by_id(cfvid);
|
fchunk = modify->get_fix_by_id(cfvid);
|
||||||
if (!fchunk) error->all(FLERR, "Fix ID {} for compute chunk/atom does not exist", cfvid);
|
if (!fchunk) error->all(FLERR, 3, "Fix ID {} for compute chunk/atom does not exist", cfvid);
|
||||||
if (fchunk->peratom_flag == 0)
|
if (fchunk->peratom_flag == 0)
|
||||||
error->all(FLERR, "Compute chunk/atom fix does not calculate per-atom values");
|
error->all(FLERR, 3, "Compute chunk/atom fix {} does not calculate per-atom values", cfvid);
|
||||||
if (argindex == 0 && fchunk->size_peratom_cols != 0)
|
if (argindex == 0 && fchunk->size_peratom_cols != 0)
|
||||||
error->all(FLERR, "Compute chunk/atom fix does not calculate a per-atom vector");
|
error->all(FLERR, 3, "Compute chunk/atom fix {} does not calculate a per-atom vector", cfvid);
|
||||||
if (argindex && fchunk->size_peratom_cols == 0)
|
if (argindex && fchunk->size_peratom_cols == 0)
|
||||||
error->all(FLERR, "Compute chunk/atom fix does not calculate a per-atom array");
|
error->all(FLERR, 3, "Compute chunk/atom fix {} does not calculate a per-atom array", cfvid);
|
||||||
if (argindex && argindex > fchunk->size_peratom_cols)
|
if (argindex && argindex > fchunk->size_peratom_cols)
|
||||||
error->all(FLERR, "Compute chunk/atom fix array is accessed out-of-range");
|
error->all(FLERR, 3, "Compute chunk/atom fix {} array is accessed out-of-range{}", cfvid,
|
||||||
|
utils::errorurl(20));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (which == ArgInfo::VARIABLE) {
|
if (which == ArgInfo::VARIABLE) {
|
||||||
int ivariable = input->variable->find(cfvid);
|
int ivariable = input->variable->find(cfvid);
|
||||||
if (ivariable < 0) error->all(FLERR, "Variable name for compute chunk/atom does not exist");
|
if (ivariable < 0)
|
||||||
|
error->all(FLERR, 3, "Variable name {} for compute chunk/atom does not exist", cfvid);
|
||||||
if (input->variable->atomstyle(ivariable) == 0)
|
if (input->variable->atomstyle(ivariable) == 0)
|
||||||
error->all(FLERR, "Compute chunk/atom variable is not atom-style variable");
|
error->all(FLERR, 3, "Compute chunk/atom variable {} is not atom-style variable", cfvid);
|
||||||
}
|
}
|
||||||
|
|
||||||
// setup scaling
|
// setup scaling
|
||||||
|
|
||||||
if (binflag) {
|
if (binflag) {
|
||||||
if (domain->triclinic == 1 && scaleflag != REDUCED)
|
if (domain->triclinic == 1 && scaleflag != REDUCED)
|
||||||
error->all(FLERR, "Compute chunk/atom for triclinic boxes requires units reduced");
|
error->all(FLERR, Error::NOLASTLINE,
|
||||||
|
"Compute chunk/atom for triclinic boxes requires units reduced");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (scaleflag == LATTICE) {
|
if (scaleflag == LATTICE) {
|
||||||
@ -512,20 +523,27 @@ void ComputeChunkAtom::init()
|
|||||||
|
|
||||||
if (regionflag) {
|
if (regionflag) {
|
||||||
region = domain->get_region_by_id(idregion);
|
region = domain->get_region_by_id(idregion);
|
||||||
if (!region) error->all(FLERR, "Region {} for compute chunk/atom does not exist", idregion);
|
if (!region)
|
||||||
|
error->all(FLERR, Error::NOLASTLINE, "Region {} for compute chunk/atom does not exist",
|
||||||
|
idregion);
|
||||||
}
|
}
|
||||||
|
|
||||||
// set compute,fix,variable
|
// set compute,fix,variable
|
||||||
|
|
||||||
if (which == ArgInfo::COMPUTE) {
|
if (which == ArgInfo::COMPUTE) {
|
||||||
cchunk = modify->get_compute_by_id(cfvid);
|
cchunk = modify->get_compute_by_id(cfvid);
|
||||||
if (!cchunk) error->all(FLERR, "Compute ID {} for compute chunk/atom does not exist", cfvid);
|
if (!cchunk)
|
||||||
|
error->all(FLERR, Error::NOLASTLINE, "Compute ID {} for compute chunk/atom does not exist",
|
||||||
|
cfvid);
|
||||||
} else if (which == ArgInfo::FIX) {
|
} else if (which == ArgInfo::FIX) {
|
||||||
fchunk = modify->get_fix_by_id(cfvid);
|
fchunk = modify->get_fix_by_id(cfvid);
|
||||||
if (!fchunk) error->all(FLERR, "Fix ID {} for compute chunk/atom does not exist", cfvid);
|
if (!fchunk)
|
||||||
|
error->all(FLERR, Error::NOLASTLINE, "Fix ID {} for compute chunk/atom does not exist",
|
||||||
|
cfvid);
|
||||||
} else if (which == ArgInfo::VARIABLE) {
|
} else if (which == ArgInfo::VARIABLE) {
|
||||||
int ivariable = input->variable->find(cfvid);
|
int ivariable = input->variable->find(cfvid);
|
||||||
if (ivariable < 0) error->all(FLERR, "Variable name for compute chunk/atom does not exist");
|
if (ivariable < 0)
|
||||||
|
error->all(FLERR, Error::NOLASTLINE, "Variable name for compute chunk/atom does not exist");
|
||||||
vchunk = ivariable;
|
vchunk = ivariable;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -540,7 +558,8 @@ void ComputeChunkAtom::init()
|
|||||||
if (molecule[i] > maxone) maxone = molecule[i];
|
if (molecule[i] > maxone) maxone = molecule[i];
|
||||||
tagint maxall;
|
tagint maxall;
|
||||||
MPI_Allreduce(&maxone, &maxall, 1, MPI_LMP_TAGINT, MPI_MAX, world);
|
MPI_Allreduce(&maxone, &maxall, 1, MPI_LMP_TAGINT, MPI_MAX, world);
|
||||||
if (maxall > MAXSMALLINT) error->all(FLERR, "Molecule IDs too large for compute chunk/atom");
|
if (maxall > MAXSMALLINT)
|
||||||
|
error->all(FLERR, Error::NOLASTLINE, "Molecule IDs too large for compute chunk/atom");
|
||||||
}
|
}
|
||||||
|
|
||||||
// for binning, if nchunkflag not already set, set it to ONCE or EVERY
|
// for binning, if nchunkflag not already set, set it to ONCE or EVERY
|
||||||
@ -560,7 +579,7 @@ void ComputeChunkAtom::init()
|
|||||||
// can't check until now since nchunkflag may have been adjusted in init()
|
// can't check until now since nchunkflag may have been adjusted in init()
|
||||||
|
|
||||||
if (idsflag == ONCE && nchunkflag != ONCE)
|
if (idsflag == ONCE && nchunkflag != ONCE)
|
||||||
error->all(FLERR, "Compute chunk/atom ids once but nchunk is not once");
|
error->all(FLERR, Error::NOLASTLINE, "Compute chunk/atom ids once but nchunk is not once");
|
||||||
|
|
||||||
// create/destroy fix STORE for persistent chunk IDs as needed
|
// create/destroy fix STORE for persistent chunk IDs as needed
|
||||||
// need to do this if idsflag = ONCE or locks will be used by other commands
|
// need to do this if idsflag = ONCE or locks will be used by other commands
|
||||||
@ -658,9 +677,8 @@ void ComputeChunkAtom::lock(Fix *fixptr, bigint startstep, bigint stopstep)
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (startstep != lockstart || stopstep != lockstop)
|
if (startstep != lockstart || stopstep != lockstop)
|
||||||
error->all(FLERR,
|
error->all(FLERR, Error::NOLASTLINE,
|
||||||
"Two fix commands using "
|
"Two fix commands using same compute chunk/atom command in incompatible ways");
|
||||||
"same compute chunk/atom command in incompatible ways");
|
|
||||||
|
|
||||||
// set lock to last calling Fix, since it will be last to unlock()
|
// set lock to last calling Fix, since it will be last to unlock()
|
||||||
|
|
||||||
@ -910,7 +928,9 @@ void ComputeChunkAtom::assign_chunk_ids()
|
|||||||
|
|
||||||
if (regionflag) {
|
if (regionflag) {
|
||||||
region = domain->get_region_by_id(idregion);
|
region = domain->get_region_by_id(idregion);
|
||||||
if (!region) error->all(FLERR, "Region {} for compute chunk/atom does not exist", idregion);
|
if (!region)
|
||||||
|
error->all(FLERR, Error::NOLASTLINE, "Region {} for compute chunk/atom does not exist",
|
||||||
|
idregion);
|
||||||
region->prematch();
|
region->prematch();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -989,9 +1009,9 @@ void ComputeChunkAtom::assign_chunk_ids()
|
|||||||
|
|
||||||
} else if (which == ArgInfo::FIX) {
|
} else if (which == ArgInfo::FIX) {
|
||||||
if (update->ntimestep % fchunk->peratom_freq)
|
if (update->ntimestep % fchunk->peratom_freq)
|
||||||
error->all(FLERR,
|
error->all(FLERR, Error::NOLASTLINE,
|
||||||
"Fix used in compute chunk/atom not "
|
"Fix used in compute chunk/atom not computed at compatible time" +
|
||||||
"computed at compatible time");
|
utils::errorurl(7));
|
||||||
|
|
||||||
if (argindex == 0) {
|
if (argindex == 0) {
|
||||||
double *vec = fchunk->vector_atom;
|
double *vec = fchunk->vector_atom;
|
||||||
@ -1245,7 +1265,7 @@ int ComputeChunkAtom::setup_xyz_bins()
|
|||||||
hi = origin[m] - n * delta[m];
|
hi = origin[m] - n * delta[m];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lo > hi) error->all(FLERR, "Invalid bin bounds in compute chunk/atom");
|
if (lo > hi) error->all(FLERR, Error::NOLASTLINE, "Invalid bin bounds in compute chunk/atom");
|
||||||
|
|
||||||
offset[m] = lo;
|
offset[m] = lo;
|
||||||
nlayers[m] = static_cast<int>((hi - lo) * invdelta[m] + 0.5);
|
nlayers[m] = static_cast<int>((hi - lo) * invdelta[m] + 0.5);
|
||||||
@ -1324,9 +1344,8 @@ int ComputeChunkAtom::setup_sphere_bins()
|
|||||||
if (periodicity[1] && sradmax > prd_half[1]) flag = 1;
|
if (periodicity[1] && sradmax > prd_half[1]) flag = 1;
|
||||||
if (domain->dimension == 3 && periodicity[2] && sradmax > prd_half[2]) flag = 1;
|
if (domain->dimension == 3 && periodicity[2] && sradmax > prd_half[2]) flag = 1;
|
||||||
if (flag)
|
if (flag)
|
||||||
error->all(FLERR,
|
error->all(FLERR, Error::NOLASTLINE,
|
||||||
"Compute chunk/atom bin/sphere radius "
|
"Compute chunk/atom bin/sphere radius is too large for periodic box");
|
||||||
"is too large for periodic box");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
sinvrad = nsbin / (sradmax - sradmin);
|
sinvrad = nsbin / (sradmax - sradmin);
|
||||||
@ -1388,9 +1407,8 @@ int ComputeChunkAtom::setup_cylinder_bins()
|
|||||||
if (periodicity[cdim1] && sradmax > prd_half[cdim1]) flag = 1;
|
if (periodicity[cdim1] && sradmax > prd_half[cdim1]) flag = 1;
|
||||||
if (periodicity[cdim2] && sradmax > prd_half[cdim2]) flag = 1;
|
if (periodicity[cdim2] && sradmax > prd_half[cdim2]) flag = 1;
|
||||||
if (flag)
|
if (flag)
|
||||||
error->all(FLERR,
|
error->all(FLERR, Error::NOLASTLINE,
|
||||||
"Compute chunk/atom bin/cylinder radius "
|
"Compute chunk/atom bin/cylinder radius is too large for periodic box");
|
||||||
"is too large for periodic box");
|
|
||||||
}
|
}
|
||||||
|
|
||||||
cinvrad = ncbin / (cradmax - cradmin);
|
cinvrad = ncbin / (cradmax - cradmin);
|
||||||
@ -2002,7 +2020,7 @@ void ComputeChunkAtom::atom2bincylinder()
|
|||||||
|
|
||||||
void ComputeChunkAtom::readdim(int narg, char **arg, int iarg, int idim)
|
void ComputeChunkAtom::readdim(int narg, char **arg, int iarg, int idim)
|
||||||
{
|
{
|
||||||
if (narg < iarg + 3) error->all(FLERR, "Illegal compute chunk/atom command");
|
if (narg < iarg + 3) utils::missing_cmd_args(FLERR, "compute chunk/atom", error);
|
||||||
if (strcmp(arg[iarg], "x") == 0)
|
if (strcmp(arg[iarg], "x") == 0)
|
||||||
dim[idim] = 0;
|
dim[idim] = 0;
|
||||||
else if (strcmp(arg[iarg], "y") == 0)
|
else if (strcmp(arg[iarg], "y") == 0)
|
||||||
@ -2010,10 +2028,10 @@ void ComputeChunkAtom::readdim(int narg, char **arg, int iarg, int idim)
|
|||||||
else if (strcmp(arg[iarg], "z") == 0)
|
else if (strcmp(arg[iarg], "z") == 0)
|
||||||
dim[idim] = 2;
|
dim[idim] = 2;
|
||||||
else
|
else
|
||||||
error->all(FLERR, "Illegal compute chunk/atom command");
|
error->all(FLERR, iarg, "Illegal compute chunk/atom dimension {}", arg[iarg]);
|
||||||
|
|
||||||
if (dim[idim] == 2 && domain->dimension == 2)
|
if (dim[idim] == 2 && domain->dimension == 2)
|
||||||
error->all(FLERR, "Cannot use compute chunk/atom bin z for 2d model");
|
error->all(FLERR, iarg, "Cannot use compute chunk/atom bin z for 2d model");
|
||||||
|
|
||||||
if (strcmp(arg[iarg + 1], "lower") == 0)
|
if (strcmp(arg[iarg + 1], "lower") == 0)
|
||||||
originflag[idim] = LOWER;
|
originflag[idim] = LOWER;
|
||||||
|
|||||||
@ -34,7 +34,7 @@ ComputeChunkSpreadAtom::
|
|||||||
ComputeChunkSpreadAtom(LAMMPS *lmp, int narg, char **arg) :
|
ComputeChunkSpreadAtom(LAMMPS *lmp, int narg, char **arg) :
|
||||||
Compute(lmp, narg, arg), idchunk(nullptr)
|
Compute(lmp, narg, arg), idchunk(nullptr)
|
||||||
{
|
{
|
||||||
if (narg < 5) error->all(FLERR,"Illegal compute chunk/spread/atom command");
|
if (narg < 5) utils::missing_cmd_args(FLERR,"compute chunk/spread/atom", error);
|
||||||
|
|
||||||
// ID of compute chunk/atom
|
// ID of compute chunk/atom
|
||||||
|
|
||||||
@ -43,10 +43,12 @@ ComputeChunkSpreadAtom(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
|
|
||||||
// expand args if any have wildcard character "*"
|
// expand args if any have wildcard character "*"
|
||||||
|
|
||||||
int iarg = 4;
|
const int ioffset = 4;
|
||||||
|
int iarg = ioffset;
|
||||||
int expand = 0;
|
int expand = 0;
|
||||||
char **earg;
|
char **earg;
|
||||||
int nargnew = utils::expand_args(FLERR,narg-iarg,&arg[iarg],1,earg,lmp);
|
int *amap = nullptr;
|
||||||
|
int nargnew = utils::expand_args(FLERR,narg-iarg,&arg[iarg],1,earg,lmp,&amap);
|
||||||
|
|
||||||
if (earg != &arg[iarg]) expand = 1;
|
if (earg != &arg[iarg]) expand = 1;
|
||||||
arg = earg;
|
arg = earg;
|
||||||
@ -60,11 +62,13 @@ ComputeChunkSpreadAtom(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
value_t val;
|
value_t val;
|
||||||
val.which = argi.get_type();
|
val.which = argi.get_type();
|
||||||
val.argindex = argi.get_index1();
|
val.argindex = argi.get_index1();
|
||||||
|
if (expand) val.iarg = amap[iarg] + ioffset;
|
||||||
|
else val.iarg = iarg + ioffset;
|
||||||
val.id = argi.get_name();
|
val.id = argi.get_name();
|
||||||
val.val.c = nullptr;
|
val.val.c = nullptr;
|
||||||
|
|
||||||
if ((val.which == ArgInfo::UNKNOWN) || (val.which == ArgInfo::NONE) || (argi.get_dim() > 1))
|
if ((val.which == ArgInfo::UNKNOWN) || (val.which == ArgInfo::NONE) || (argi.get_dim() > 1))
|
||||||
error->all(FLERR,"Illegal compute chunk/spread/atom argument: {}", arg[iarg]);
|
error->all(FLERR, val.iarg, "Illegal compute chunk/spread/atom argument: {}", arg[iarg]);
|
||||||
|
|
||||||
values.push_back(val);
|
values.push_back(val);
|
||||||
}
|
}
|
||||||
@ -84,41 +88,48 @@ ComputeChunkSpreadAtom(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
if (val.which == ArgInfo::COMPUTE) {
|
if (val.which == ArgInfo::COMPUTE) {
|
||||||
auto icompute = modify->get_compute_by_id(val.id);
|
auto icompute = modify->get_compute_by_id(val.id);
|
||||||
if (!icompute)
|
if (!icompute)
|
||||||
error->all(FLERR,"Compute ID {} for compute chunk/spread/atom does not exist", val.id);
|
error->all(FLERR, val.iarg, "Compute ID {} for compute chunk/spread/atom does not exist",
|
||||||
|
val.id);
|
||||||
|
|
||||||
if (!utils::strmatch(icompute->style,"/chunk$"))
|
if (!utils::strmatch(icompute->style,"/chunk$"))
|
||||||
error->all(FLERR,"Compute chunk/spread/atom compute {} does not calculate per-chunk values",
|
error->all(FLERR, val.iarg,
|
||||||
|
"Compute chunk/spread/atom compute {} does not calculate per-chunk values",
|
||||||
val.id);
|
val.id);
|
||||||
|
|
||||||
if (val.argindex == 0) {
|
if (val.argindex == 0) {
|
||||||
if (!icompute->vector_flag)
|
if (!icompute->vector_flag)
|
||||||
error->all(FLERR,"Compute chunk/spread/atom compute {} does not calculate global vector",
|
error->all(FLERR, val.iarg,
|
||||||
|
"Compute chunk/spread/atom compute {} does not calculate global vector",
|
||||||
val.id);
|
val.id);
|
||||||
} else {
|
} else {
|
||||||
if (!icompute->array_flag)
|
if (!icompute->array_flag)
|
||||||
error->all(FLERR,"Compute chunk/spread/atom compute {} does not calculate global array",
|
error->all(FLERR, val.iarg,
|
||||||
|
"Compute chunk/spread/atom compute {} does not calculate global array",
|
||||||
val.id);
|
val.id);
|
||||||
if (val.argindex > icompute->size_array_cols)
|
if (val.argindex > icompute->size_array_cols)
|
||||||
error->all(FLERR,"Compute chunk/spread/atom compute {} array is accessed out-of-range",
|
error->all(FLERR, val.iarg,
|
||||||
val.id);
|
"Compute chunk/spread/atom compute {} array is accessed out-of-range{}",
|
||||||
|
val.id, utils::errorurl(20));
|
||||||
}
|
}
|
||||||
val.val.c = icompute;
|
val.val.c = icompute;
|
||||||
|
|
||||||
} else if (val.which == ArgInfo::FIX) {
|
} else if (val.which == ArgInfo::FIX) {
|
||||||
auto ifix = modify->get_fix_by_id(val.id);
|
auto ifix = modify->get_fix_by_id(val.id);
|
||||||
if (!ifix)
|
if (!ifix)
|
||||||
error->all(FLERR,"Fix ID {} for compute chunk/spread/atom does not exist", val.id);
|
error->all(FLERR, val.iarg,
|
||||||
|
"Fix ID {} for compute chunk/spread/atom does not exist", val.id);
|
||||||
if (val.argindex == 0) {
|
if (val.argindex == 0) {
|
||||||
if (!ifix->vector_flag)
|
if (!ifix->vector_flag)
|
||||||
error->all(FLERR,"Compute chunk/spread/atom {} fix does not calculate global vector",
|
error->all(FLERR, val.iarg,
|
||||||
val.id);
|
"Compute chunk/spread/atom {} fix does not calculate global vector", val.id);
|
||||||
} else {
|
} else {
|
||||||
if (!ifix->array_flag)
|
if (!ifix->array_flag)
|
||||||
error->all(FLERR,"Compute chunk/spread/atom {} fix does not calculate global array",
|
error->all(FLERR, val.iarg,
|
||||||
val.id);
|
"Compute chunk/spread/atom {} fix does not calculate global array", val.id);
|
||||||
if (val.argindex > ifix->size_array_cols)
|
if (val.argindex > ifix->size_array_cols)
|
||||||
error->all(FLERR,"Compute chunk/spread/atom fix {} array is accessed out-of-range",
|
error->all(FLERR, val.iarg,
|
||||||
val.id);
|
"Compute chunk/spread/atom fix {} array is accessed out-of-range{}",
|
||||||
|
val.id, utils::errorurl(20));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -158,12 +169,14 @@ void ComputeChunkSpreadAtom::init()
|
|||||||
if (val.which == ArgInfo::COMPUTE) {
|
if (val.which == ArgInfo::COMPUTE) {
|
||||||
val.val.c = modify->get_compute_by_id(val.id);
|
val.val.c = modify->get_compute_by_id(val.id);
|
||||||
if (!val.val.c)
|
if (!val.val.c)
|
||||||
error->all(FLERR,"Compute ID {} for compute chunk/spread/atom does not exist", val.id);
|
error->all(FLERR, Error::NOLASTLINE,
|
||||||
|
"Compute ID {} for compute chunk/spread/atom does not exist", val.id);
|
||||||
|
|
||||||
} else if (val.which == ArgInfo::FIX) {
|
} else if (val.which == ArgInfo::FIX) {
|
||||||
val.val.f = modify->get_fix_by_id(val.id);
|
val.val.f = modify->get_fix_by_id(val.id);
|
||||||
if (!val.val.f)
|
if (!val.val.f)
|
||||||
error->all(FLERR,"Fix ID {} for compute chunk/spread/atom does not exist", val.id);
|
error->all(FLERR, Error::NOLASTLINE,
|
||||||
|
"Fix ID {} for compute chunk/spread/atom does not exist", val.id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -174,10 +187,12 @@ void ComputeChunkSpreadAtom::init_chunk()
|
|||||||
{
|
{
|
||||||
cchunk = dynamic_cast<ComputeChunkAtom *>(modify->get_compute_by_id(idchunk));
|
cchunk = dynamic_cast<ComputeChunkAtom *>(modify->get_compute_by_id(idchunk));
|
||||||
if (!cchunk)
|
if (!cchunk)
|
||||||
error->all(FLERR,"Chunk/atom compute {} does not exist for compute chunk/spread/atom "
|
error->all(FLERR, Error::NOLASTLINE,
|
||||||
|
"Chunk/atom compute {} does not exist for compute chunk/spread/atom "
|
||||||
"or is of invalid style", idchunk);
|
"or is of invalid style", idchunk);
|
||||||
if (strcmp(cchunk->style,"chunk/atom") != 0)
|
if (strcmp(cchunk->style,"chunk/atom") != 0)
|
||||||
error->all(FLERR,"Compute chunk/spread/atom {} does not use chunk/atom compute", idchunk);
|
error->all(FLERR, Error::NOLASTLINE,
|
||||||
|
"Compute chunk/spread/atom {} does not use chunk/atom compute", idchunk);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ---------------------------------------------------------------------- */
|
/* ---------------------------------------------------------------------- */
|
||||||
@ -273,8 +288,9 @@ void ComputeChunkSpreadAtom::compute_peratom()
|
|||||||
} else if (val.which == ArgInfo::FIX) {
|
} else if (val.which == ArgInfo::FIX) {
|
||||||
Fix *fix = val.val.f;
|
Fix *fix = val.val.f;
|
||||||
if (update->ntimestep % fix->global_freq)
|
if (update->ntimestep % fix->global_freq)
|
||||||
error->all(FLERR,"Fix {} used in compute chunk/spread/atom not computed at compatible time",
|
error->all(FLERR, Error::NOLASTLINE,
|
||||||
val.id);
|
"Fix {} used in compute chunk/spread/atom not computed at compatible time{}",
|
||||||
|
val.id, utils::errorurl(7));
|
||||||
|
|
||||||
if (val.argindex == 0) {
|
if (val.argindex == 0) {
|
||||||
int nfix = fix->size_vector;
|
int nfix = fix->size_vector;
|
||||||
|
|||||||
@ -36,6 +36,7 @@ class ComputeChunkSpreadAtom : public Compute {
|
|||||||
struct value_t {
|
struct value_t {
|
||||||
int which;
|
int which;
|
||||||
int argindex;
|
int argindex;
|
||||||
|
int iarg;
|
||||||
std::string id;
|
std::string id;
|
||||||
union {
|
union {
|
||||||
class Compute *c;
|
class Compute *c;
|
||||||
|
|||||||
@ -37,16 +37,18 @@ ComputeGlobalAtom::ComputeGlobalAtom(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
|
|
||||||
// process index arg
|
// process index arg
|
||||||
|
|
||||||
int iarg = 3;
|
const int ioffset = 3;
|
||||||
|
int iarg = ioffset;
|
||||||
ArgInfo argi(arg[iarg]);
|
ArgInfo argi(arg[iarg]);
|
||||||
|
|
||||||
reference.which = argi.get_type();
|
reference.which = argi.get_type();
|
||||||
reference.argindex = argi.get_index1();
|
reference.argindex = argi.get_index1();
|
||||||
reference.id = argi.get_name();
|
reference.id = argi.get_name();
|
||||||
|
reference.iarg = iarg;
|
||||||
|
|
||||||
if ((reference.which == ArgInfo::UNKNOWN) || (reference.which == ArgInfo::NONE)
|
if ((reference.which == ArgInfo::UNKNOWN) || (reference.which == ArgInfo::NONE)
|
||||||
|| (argi.get_dim() > 1))
|
|| (argi.get_dim() > 1))
|
||||||
error->all(FLERR,"Illegal compute global/atom index property: {}", arg[iarg]);
|
error->all(FLERR, iarg, "Illegal compute global/atom index property: {}", arg[iarg]);
|
||||||
|
|
||||||
iarg++;
|
iarg++;
|
||||||
|
|
||||||
@ -54,7 +56,8 @@ ComputeGlobalAtom::ComputeGlobalAtom(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
|
|
||||||
int expand = 0;
|
int expand = 0;
|
||||||
char **earg;
|
char **earg;
|
||||||
int nargnew = utils::expand_args(FLERR,narg-iarg,&arg[iarg],1,earg,lmp);
|
int *amap = nullptr;
|
||||||
|
int nargnew = utils::expand_args(FLERR,narg-iarg,&arg[iarg],1,earg,lmp,&amap);
|
||||||
|
|
||||||
if (earg != &arg[iarg]) expand = 1;
|
if (earg != &arg[iarg]) expand = 1;
|
||||||
arg = earg;
|
arg = earg;
|
||||||
@ -69,12 +72,14 @@ ComputeGlobalAtom::ComputeGlobalAtom(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
value_t val;
|
value_t val;
|
||||||
val.which = argi2.get_type();
|
val.which = argi2.get_type();
|
||||||
val.argindex = argi2.get_index1();
|
val.argindex = argi2.get_index1();
|
||||||
|
if (expand) val.iarg = amap[iarg] + ioffset;
|
||||||
|
else val.iarg = iarg + ioffset;
|
||||||
val.id = argi2.get_name();
|
val.id = argi2.get_name();
|
||||||
val.val.c = nullptr;
|
val.val.c = nullptr;
|
||||||
|
|
||||||
if ((val.which == ArgInfo::UNKNOWN) || (val.which == ArgInfo::NONE)
|
if ((val.which == ArgInfo::UNKNOWN) || (val.which == ArgInfo::NONE)
|
||||||
|| (argi2.get_dim() > 1))
|
|| (argi2.get_dim() > 1))
|
||||||
error->all(FLERR,"Illegal compute global/atom global property: {}", arg[iarg]);
|
error->all(FLERR, val.iarg, "Illegal compute global/atom global property: {}", arg[iarg]);
|
||||||
|
|
||||||
values.push_back(val);
|
values.push_back(val);
|
||||||
}
|
}
|
||||||
@ -91,85 +96,92 @@ ComputeGlobalAtom::ComputeGlobalAtom(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
if (reference.which == ArgInfo::COMPUTE) {
|
if (reference.which == ArgInfo::COMPUTE) {
|
||||||
reference.val.c = modify->get_compute_by_id(reference.id);
|
reference.val.c = modify->get_compute_by_id(reference.id);
|
||||||
if (!reference.val.c)
|
if (!reference.val.c)
|
||||||
error->all(FLERR,"Compute ID {} for compute global/atom index", reference.id);
|
error->all(FLERR,reference.iarg,"Compute ID {} for compute global/atom index",reference.id);
|
||||||
|
|
||||||
if (!reference.val.c->peratom_flag)
|
if (!reference.val.c->peratom_flag)
|
||||||
error->all(FLERR,"Compute global/atom compute {} does not calculate a per-atom "
|
error->all(FLERR, reference.iarg, "Compute global/atom compute {} does not calculate a "
|
||||||
"vector or array", reference.id);
|
"per-atom vector or array", reference.id);
|
||||||
if ((reference.argindex == 0) && (reference.val.c->size_peratom_cols != 0))
|
if ((reference.argindex == 0) && (reference.val.c->size_peratom_cols != 0))
|
||||||
error->all(FLERR,"Compute global/atom compute {} does not calculate a per-atom "
|
error->all(FLERR, reference.iarg, "Compute global/atom compute {} does not calculate a "
|
||||||
"vector", reference.id);
|
"per-atom vector", reference.id);
|
||||||
if (reference.argindex && (reference.val.c->size_peratom_cols == 0))
|
if (reference.argindex && (reference.val.c->size_peratom_cols == 0))
|
||||||
error->all(FLERR,"Compute global/atom compute does not calculate a per-atom "
|
error->all(FLERR, reference.iarg, "Compute global/atom compute does not calculate a per-atom "
|
||||||
"array", reference.id);
|
"array", reference.id);
|
||||||
if (reference.argindex && (reference.argindex > reference.val.c->size_peratom_cols))
|
if (reference.argindex && (reference.argindex > reference.val.c->size_peratom_cols))
|
||||||
error->all(FLERR, "Compute global/atom compute array {} is accessed out-of-range",
|
error->all(FLERR, reference.iarg, "Compute global/atom compute array {} is accessed "
|
||||||
reference.id);
|
"out-of-range{}", reference.id, utils::errorurl(20));
|
||||||
|
|
||||||
} else if (reference.which == ArgInfo::FIX) {
|
} else if (reference.which == ArgInfo::FIX) {
|
||||||
reference.val.f =modify->get_fix_by_id(reference.id);
|
reference.val.f =modify->get_fix_by_id(reference.id);
|
||||||
if (!reference.val.f)
|
if (!reference.val.f)
|
||||||
error->all(FLERR,"Fix ID {} for compute global/atom does not exist", reference.id);
|
error->all(FLERR, reference.iarg, "Fix ID {} for compute global/atom does not exist",
|
||||||
|
reference.id);
|
||||||
if (!reference.val.f->peratom_flag)
|
if (!reference.val.f->peratom_flag)
|
||||||
error->all(FLERR,"Compute global/atom fix {} does not calculate a per-atom vector "
|
error->all(FLERR, reference.iarg, "Compute global/atom fix {} does not calculate a per-atom "
|
||||||
"or array", reference.id);
|
"vector or array", reference.id);
|
||||||
if (reference.argindex == 0 && (reference.val.f->size_peratom_cols != 0))
|
if (reference.argindex == 0 && (reference.val.f->size_peratom_cols != 0))
|
||||||
error->all(FLERR,"Compute global/atom fix {} does not calculate a per-atom vector",
|
error->all(FLERR, reference.iarg, "Compute global/atom fix {} does not calculate a per-atom "
|
||||||
reference.id);
|
"vector", reference.id);
|
||||||
if (reference.argindex && (reference.val.f->size_peratom_cols == 0))
|
if (reference.argindex && (reference.val.f->size_peratom_cols == 0))
|
||||||
error->all(FLERR,"Compute global/atom fix {} does not calculate a per-atom array",
|
error->all(FLERR, reference.iarg, "Compute global/atom fix {} does not calculate a per-atom "
|
||||||
reference.id);
|
"array", reference.id);
|
||||||
if (reference.argindex && (reference.argindex > reference.val.f->size_peratom_cols))
|
if (reference.argindex && (reference.argindex > reference.val.f->size_peratom_cols))
|
||||||
error->all(FLERR, "Compute global/atom fix {} array is accessed out-of-range", reference.id);
|
error->all(FLERR, reference.iarg, "Compute global/atom fix {} array is accessed "
|
||||||
|
"out-of-range{}", reference.id, utils::errorurl(20));
|
||||||
|
|
||||||
} else if (reference.which == ArgInfo::VARIABLE) {
|
} else if (reference.which == ArgInfo::VARIABLE) {
|
||||||
reference.val.v = input->variable->find(reference.id.c_str());
|
reference.val.v = input->variable->find(reference.id.c_str());
|
||||||
if (reference.val.v < 0)
|
if (reference.val.v < 0)
|
||||||
error->all(FLERR,"Variable name {} for compute global/atom index does not exist",
|
error->all(FLERR, reference.iarg, "Variable name {} for compute global/atom index does "
|
||||||
reference.id);
|
"not exist", reference.id);
|
||||||
if (input->variable->atomstyle(reference.val.v) == 0)
|
if (input->variable->atomstyle(reference.val.v) == 0)
|
||||||
error->all(FLERR,"Compute global/atom index variable {} is not atom-style variable",
|
error->all(FLERR, reference.iarg, "Compute global/atom index variable {} is not atom-style "
|
||||||
reference.id);
|
"variable", reference.id);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (auto &val : values) {
|
for (auto &val : values) {
|
||||||
if (val.which == ArgInfo::COMPUTE) {
|
if (val.which == ArgInfo::COMPUTE) {
|
||||||
val.val.c = modify->get_compute_by_id(val.id);
|
val.val.c = modify->get_compute_by_id(val.id);
|
||||||
if (!val.val.c)
|
if (!val.val.c)
|
||||||
error->all(FLERR,"Compute ID {} for compute global/atom does not exist", val.id);
|
error->all(FLERR, val.iarg, "Compute ID {} for compute global/atom does not exist", val.id);
|
||||||
if (val.argindex == 0) {
|
if (val.argindex == 0) {
|
||||||
if (!val.val.c->vector_flag)
|
if (!val.val.c->vector_flag)
|
||||||
error->all(FLERR,"Compute ID {} for global/atom compute does not calculate "
|
error->all(FLERR, val.iarg, "Compute ID {} for global/atom compute does not calculate "
|
||||||
"a global vector", val.id);
|
"a global vector", val.id);
|
||||||
} else {
|
} else {
|
||||||
if (!val.val.c->array_flag)
|
if (!val.val.c->array_flag)
|
||||||
error->all(FLERR,"Compute ID {} for global/atom compute does not calculate "
|
error->all(FLERR, val.iarg, "Compute ID {} for global/atom compute does not calculate "
|
||||||
"a global array", val.id);
|
"a global array", val.id);
|
||||||
if (val.argindex > val.val.c->size_array_cols)
|
if (val.argindex > val.val.c->size_array_cols)
|
||||||
error->all(FLERR,"Compute global/atom compute {} array is accessed out-of-range", val.id);
|
error->all(FLERR, val.iarg, "Compute global/atom compute {} array is accessed "
|
||||||
|
"out-of-range{}", val.id, utils::errorurl(20));
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if (val.which == ArgInfo::FIX) {
|
} else if (val.which == ArgInfo::FIX) {
|
||||||
val.val.f = modify->get_fix_by_id(val.id);
|
val.val.f = modify->get_fix_by_id(val.id);
|
||||||
if (!val.val.f) error->all(FLERR,"Fix ID {} for compute global/atom does not exist", val.id);
|
if (!val.val.f)
|
||||||
|
error->all(FLERR, val.iarg, "Fix ID {} for compute global/atom does not exist", val.id);
|
||||||
if (val.argindex == 0) {
|
if (val.argindex == 0) {
|
||||||
if (!val.val.f->vector_flag)
|
if (!val.val.f->vector_flag)
|
||||||
error->all(FLERR,"Fix ID {} for compute global/atom compute does not calculate "
|
error->all(FLERR, val.iarg, "Fix ID {} for compute global/atom compute does not "
|
||||||
"a global vector", val.id);
|
"calculate a global vector", val.id);
|
||||||
} else {
|
} else {
|
||||||
if (!val.val.f->array_flag)
|
if (!val.val.f->array_flag)
|
||||||
error->all(FLERR,"Fix ID {} for compute global/atom compute does not calculate "
|
error->all(FLERR, val.iarg, "Fix ID {} for compute global/atom compute does not "
|
||||||
"a global array", val.id);
|
"calculate a global array", val.id);
|
||||||
if (val.argindex > val.val.f->size_array_cols)
|
if (val.argindex > val.val.f->size_array_cols)
|
||||||
error->all(FLERR,"Compute global/atom fix {} array is accessed out-of-range", val.id);
|
error->all(FLERR, val.iarg, "Compute global/atom fix {} array is accessed out-of-range{}",
|
||||||
|
val.id, utils::errorurl(20));
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if (val.which == ArgInfo::VARIABLE) {
|
} else if (val.which == ArgInfo::VARIABLE) {
|
||||||
val.val.v = input->variable->find(val.id.c_str());
|
val.val.v = input->variable->find(val.id.c_str());
|
||||||
if (val.val.v < 0)
|
if (val.val.v < 0)
|
||||||
error->all(FLERR,"Variable name {} for compute global/atom does not exist", val.id);
|
error->all(FLERR, val.iarg, "Variable name {} for compute global/atom does not exist",
|
||||||
|
val.id);
|
||||||
if (input->variable->vectorstyle(val.val.v) == 0)
|
if (input->variable->vectorstyle(val.val.v) == 0)
|
||||||
error->all(FLERR,"Compute global/atom variable {} is not vector-style variable", val.id);
|
error->all(FLERR, val.iarg, "Compute global/atom variable {} is not vector-style variable",
|
||||||
|
val.id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -203,33 +215,38 @@ void ComputeGlobalAtom::init()
|
|||||||
if (reference.which == ArgInfo::COMPUTE) {
|
if (reference.which == ArgInfo::COMPUTE) {
|
||||||
reference.val.c = modify->get_compute_by_id(reference.id);
|
reference.val.c = modify->get_compute_by_id(reference.id);
|
||||||
if (!reference.val.c)
|
if (!reference.val.c)
|
||||||
error->all(FLERR,"Compute ID {} for compute global/atom index does not exist", reference.id);
|
error->all(FLERR, Error::NOLASTLINE, "Compute ID {} for compute global/atom index does not "
|
||||||
|
"exist", reference.id);
|
||||||
} else if (reference.which == ArgInfo::FIX) {
|
} else if (reference.which == ArgInfo::FIX) {
|
||||||
reference.val.f = modify->get_fix_by_id(reference.id);
|
reference.val.f = modify->get_fix_by_id(reference.id);
|
||||||
if (reference.val.f)
|
if (reference.val.f)
|
||||||
error->all(FLERR,"Fix ID {} for compute global/atom index does not exist", reference.id);
|
error->all(FLERR, Error::NOLASTLINE, "Fix ID {} for compute global/atom index does not exist",
|
||||||
|
reference.id);
|
||||||
} else if (reference.which == ArgInfo::VARIABLE) {
|
} else if (reference.which == ArgInfo::VARIABLE) {
|
||||||
reference.val.v = input->variable->find(reference.id.c_str());
|
reference.val.v = input->variable->find(reference.id.c_str());
|
||||||
if (reference.val.v < 0)
|
if (reference.val.v < 0)
|
||||||
error->all(FLERR,"Variable name {} for compute global/atom index does not exist",
|
error->all(FLERR, Error::NOLASTLINE, "Variable name {} for compute global/atom index does "
|
||||||
reference.id);
|
"not exist", reference.id);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (auto &val : values) {
|
for (auto &val : values) {
|
||||||
if (val.which == ArgInfo::COMPUTE) {
|
if (val.which == ArgInfo::COMPUTE) {
|
||||||
val.val.c = modify->get_compute_by_id(val.id);
|
val.val.c = modify->get_compute_by_id(val.id);
|
||||||
if (!val.val.c)
|
if (!val.val.c)
|
||||||
error->all(FLERR,"Compute ID {} for compute global/atom does not exist", val.id);
|
error->all(FLERR, Error::NOLASTLINE, "Compute ID {} for compute global/atom does not exist",
|
||||||
|
val.id);
|
||||||
|
|
||||||
} else if (val.which == ArgInfo::FIX) {
|
} else if (val.which == ArgInfo::FIX) {
|
||||||
val.val.f = modify->get_fix_by_id(val.id);
|
val.val.f = modify->get_fix_by_id(val.id);
|
||||||
if (!val.val.f)
|
if (!val.val.f)
|
||||||
error->all(FLERR,"Fix ID {} for compute global/atom does not exist", val.id);
|
error->all(FLERR, Error::NOLASTLINE, "Fix ID {} for compute global/atom does not exist",
|
||||||
|
val.id);
|
||||||
|
|
||||||
} else if (val.which == ArgInfo::VARIABLE) {
|
} else if (val.which == ArgInfo::VARIABLE) {
|
||||||
val.val.v = input->variable->find(val.id.c_str());
|
val.val.v = input->variable->find(val.id.c_str());
|
||||||
if (val.val.v < 0)
|
if (val.val.v < 0)
|
||||||
error->all(FLERR,"Variable name {} for compute global/atom does not exist", val.id);
|
error->all(FLERR, Error::NOLASTLINE, "Variable name {} for compute global/atom does not "
|
||||||
|
"exist", val.id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -288,8 +305,8 @@ void ComputeGlobalAtom::compute_peratom()
|
|||||||
|
|
||||||
} else if (reference.which == ArgInfo::FIX) {
|
} else if (reference.which == ArgInfo::FIX) {
|
||||||
if (update->ntimestep % reference.val.f->peratom_freq)
|
if (update->ntimestep % reference.val.f->peratom_freq)
|
||||||
error->all(FLERR,"Fix {} used in compute global/atom not computed at compatible time",
|
error->all(FLERR, Error::NOLASTLINE, "Fix {} used in compute global/atom not computed at "
|
||||||
reference.id);
|
"compatible time{}", reference.id, utils::errorurl(7));
|
||||||
|
|
||||||
if (reference.argindex == 0) {
|
if (reference.argindex == 0) {
|
||||||
double *fix_vector = reference.val.f->vector_atom;
|
double *fix_vector = reference.val.f->vector_atom;
|
||||||
@ -334,8 +351,8 @@ void ComputeGlobalAtom::compute_peratom()
|
|||||||
|
|
||||||
} else if (val.which == ArgInfo::FIX) {
|
} else if (val.which == ArgInfo::FIX) {
|
||||||
if (update->ntimestep % val.val.f->peratom_freq)
|
if (update->ntimestep % val.val.f->peratom_freq)
|
||||||
error->all(FLERR,"Fix {} used in compute global/atom not computed at compatible time",
|
error->all(FLERR, Error::NOLASTLINE, "Fix {} used in compute global/atom not computed "
|
||||||
val.id);
|
"at compatible time{}", val.id, utils::errorurl(7));
|
||||||
vmax = reference.val.f->size_vector;
|
vmax = reference.val.f->size_vector;
|
||||||
|
|
||||||
if (vmax > maxvector) {
|
if (vmax > maxvector) {
|
||||||
@ -401,8 +418,8 @@ void ComputeGlobalAtom::compute_peratom()
|
|||||||
|
|
||||||
} else if (val.which == ArgInfo::FIX) {
|
} else if (val.which == ArgInfo::FIX) {
|
||||||
if (update->ntimestep % val.val.f->peratom_freq)
|
if (update->ntimestep % val.val.f->peratom_freq)
|
||||||
error->all(FLERR,"Fix {} used in compute global/atom not computed at compatible time",
|
error->all(FLERR, Error::NOLASTLINE, "Fix {} used in compute global/atom not computed "
|
||||||
val.id);
|
"at compatible time{}", val.id, utils::errorurl(7));
|
||||||
vmax = val.val.f->size_array_rows;
|
vmax = val.val.f->size_array_rows;
|
||||||
|
|
||||||
if (vmax > maxvector) {
|
if (vmax > maxvector) {
|
||||||
|
|||||||
@ -36,6 +36,7 @@ class ComputeGlobalAtom : public Compute {
|
|||||||
struct value_t {
|
struct value_t {
|
||||||
int which;
|
int which;
|
||||||
int argindex;
|
int argindex;
|
||||||
|
int iarg;
|
||||||
std::string id;
|
std::string id;
|
||||||
union {
|
union {
|
||||||
class Compute *c;
|
class Compute *c;
|
||||||
|
|||||||
@ -79,7 +79,7 @@ ComputeReduce::ComputeReduce(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
} else if (strcmp(style, "reduce/region") == 0) {
|
} else if (strcmp(style, "reduce/region") == 0) {
|
||||||
if (narg < 6) utils::missing_cmd_args(FLERR, "compute reduce/region", error);
|
if (narg < 6) utils::missing_cmd_args(FLERR, "compute reduce/region", error);
|
||||||
if (!domain->get_region_by_id(arg[3]))
|
if (!domain->get_region_by_id(arg[3]))
|
||||||
error->all(FLERR, "Region {} for compute reduce/region does not exist", arg[3]);
|
error->all(FLERR, 3, "Region {} for compute reduce/region does not exist", arg[3]);
|
||||||
idregion = utils::strdup(arg[3]);
|
idregion = utils::strdup(arg[3]);
|
||||||
iarg = 4;
|
iarg = 4;
|
||||||
}
|
}
|
||||||
@ -105,7 +105,7 @@ ComputeReduce::ComputeReduce(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
else if (strcmp(arg[iarg], "minabs") == 0)
|
else if (strcmp(arg[iarg], "minabs") == 0)
|
||||||
mode = MINABS;
|
mode = MINABS;
|
||||||
else
|
else
|
||||||
error->all(FLERR, "Unknown compute {} mode: {}", style, arg[iarg]);
|
error->all(FLERR, iarg, "Unknown compute {} mode: {}", style, arg[iarg]);
|
||||||
iarg++;
|
iarg++;
|
||||||
|
|
||||||
if (mode == SUM || mode == SUMSQ || mode == SUMABS) {
|
if (mode == SUM || mode == SUMSQ || mode == SUMABS) {
|
||||||
@ -124,9 +124,12 @@ ComputeReduce::ComputeReduce(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
|
|
||||||
// expand args if any have wildcard character "*"
|
// expand args if any have wildcard character "*"
|
||||||
|
|
||||||
|
int ioffset = iarg;
|
||||||
int expand = 0;
|
int expand = 0;
|
||||||
char **earg;
|
char **earg;
|
||||||
int nargnew = utils::expand_args(FLERR, narg - iarg, &arg[iarg], 1, earg, lmp);
|
char **oarg = arg;
|
||||||
|
int *amap = nullptr;
|
||||||
|
int nargnew = utils::expand_args(FLERR, narg - iarg, &arg[iarg], 1, earg, lmp, &amap);
|
||||||
|
|
||||||
if (earg != &arg[iarg]) expand = 1;
|
if (earg != &arg[iarg]) expand = 1;
|
||||||
arg = earg;
|
arg = earg;
|
||||||
@ -140,6 +143,8 @@ ComputeReduce::ComputeReduce(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
|
|
||||||
val.id = "";
|
val.id = "";
|
||||||
val.val.c = nullptr;
|
val.val.c = nullptr;
|
||||||
|
if (expand) val.iarg = amap[iarg] + ioffset;
|
||||||
|
else val.iarg = iarg + ioffset;
|
||||||
|
|
||||||
if (strcmp(arg[iarg], "x") == 0) {
|
if (strcmp(arg[iarg], "x") == 0) {
|
||||||
val.which = ArgInfo::X;
|
val.which = ArgInfo::X;
|
||||||
@ -180,7 +185,7 @@ ComputeReduce::ComputeReduce(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
val.id = argi.get_name();
|
val.id = argi.get_name();
|
||||||
|
|
||||||
if ((val.which == ArgInfo::UNKNOWN) || (argi.get_dim() > 1))
|
if ((val.which == ArgInfo::UNKNOWN) || (argi.get_dim() > 1))
|
||||||
error->all(FLERR, "Illegal compute {} argument: {}", style, arg[iarg]);
|
error->all(FLERR, val.iarg, "Illegal compute {} argument: {}", style, arg[iarg]);
|
||||||
|
|
||||||
if (val.which == ArgInfo::NONE) break;
|
if (val.which == ArgInfo::NONE) break;
|
||||||
}
|
}
|
||||||
@ -196,31 +201,42 @@ ComputeReduce::ComputeReduce(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
std::string mycmd = "compute ";
|
std::string mycmd = "compute ";
|
||||||
mycmd += style;
|
mycmd += style;
|
||||||
|
|
||||||
|
for (int i = 0; i < narg; ++i) {
|
||||||
|
if (strcmp(oarg[i],arg[nvalues]) == 0)
|
||||||
|
ioffset = i - nvalues;
|
||||||
|
}
|
||||||
for (int iarg = nvalues; iarg < nargnew; iarg++) {
|
for (int iarg = nvalues; iarg < nargnew; iarg++) {
|
||||||
|
int errptr = iarg + ioffset;
|
||||||
if (strcmp(arg[iarg], "replace") == 0) {
|
if (strcmp(arg[iarg], "replace") == 0) {
|
||||||
if (iarg + 3 > narg) utils::missing_cmd_args(FLERR, mycmd + " replace", error);
|
if (iarg + 3 > nargnew) utils::missing_cmd_args(FLERR, mycmd + " replace", error);
|
||||||
if (mode != MINN && mode != MAXX)
|
if (mode != MINN && mode != MAXX)
|
||||||
error->all(FLERR, "Compute {} replace requires min or max mode", style);
|
error->all(FLERR, errptr, "Compute {} replace requires min or max mode", style);
|
||||||
int col1 = utils::inumeric(FLERR, arg[iarg + 1], false, lmp) - 1;
|
int col1 = utils::inumeric(FLERR, arg[iarg + 1], false, lmp) - 1;
|
||||||
int col2 = utils::inumeric(FLERR, arg[iarg + 2], false, lmp) - 1;
|
int col2 = utils::inumeric(FLERR, arg[iarg + 2], false, lmp) - 1;
|
||||||
if ((col1 < 0) || (col1 >= nvalues))
|
if ((col1 < 0) || (col1 >= nvalues))
|
||||||
error->all(FLERR, "Invalid compute {} replace first column index {}", style, col1);
|
error->all(FLERR, errptr + 1, "Invalid compute {} replace first column index {}",
|
||||||
|
style, col1);
|
||||||
if ((col2 < 0) || (col2 >= nvalues))
|
if ((col2 < 0) || (col2 >= nvalues))
|
||||||
error->all(FLERR, "Invalid compute {} replace second column index {}", style, col2);
|
error->all(FLERR, errptr + 2, "Invalid compute {} replace second column index {}",
|
||||||
if (col1 == col2) error->all(FLERR, "Compute {} replace columns must be different");
|
style, col2);
|
||||||
|
if (col1 == col2) error->all(FLERR, errptr, "Compute {} replace columns must be different");
|
||||||
if ((replace[col1] >= 0) || (replace[col2] >= 0))
|
if ((replace[col1] >= 0) || (replace[col2] >= 0))
|
||||||
error->all(FLERR, "Compute {} replace column already used for another replacement");
|
error->all(FLERR, errptr,
|
||||||
|
"Compute {} replace column already used for another replacement");
|
||||||
replace[col1] = col2;
|
replace[col1] = col2;
|
||||||
iarg += 2;
|
iarg += 2;
|
||||||
} else if (strcmp(arg[iarg], "inputs") == 0) {
|
} else if (strcmp(arg[iarg], "inputs") == 0) {
|
||||||
if (iarg + 2 > narg) utils::missing_cmd_args(FLERR, mycmd + " inputs", error);
|
if (iarg + 2 > nargnew) utils::missing_cmd_args(FLERR, mycmd + " inputs", error);
|
||||||
if (strcmp(arg[iarg + 1], "peratom") == 0)
|
if (strcmp(arg[iarg + 1], "peratom") == 0)
|
||||||
input_mode = PERATOM;
|
input_mode = PERATOM;
|
||||||
else if (strcmp(arg[iarg + 1], "local") == 0)
|
else if (strcmp(arg[iarg + 1], "local") == 0)
|
||||||
input_mode = LOCAL;
|
input_mode = LOCAL;
|
||||||
|
else
|
||||||
|
error->all(FLERR, errptr + 1, "Unknown compute {} inputs argument: {}", style,
|
||||||
|
arg[iarg + 1]);
|
||||||
iarg += 1;
|
iarg += 1;
|
||||||
} else
|
} else
|
||||||
error->all(FLERR, "Unknown compute {} keyword: {}", style, arg[iarg]);
|
error->all(FLERR, errptr, "Unknown compute {} keyword: {}", style, arg[iarg]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// delete replace list if not set
|
// delete replace list if not set
|
||||||
@ -244,72 +260,87 @@ ComputeReduce::ComputeReduce(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
|
|
||||||
for (auto &val : values) {
|
for (auto &val : values) {
|
||||||
if (val.which == ArgInfo::X || val.which == ArgInfo::V || val.which == ArgInfo::F) {
|
if (val.which == ArgInfo::X || val.which == ArgInfo::V || val.which == ArgInfo::F) {
|
||||||
if (input_mode == LOCAL) error->all(FLERR, "Compute {} inputs must be all local");
|
if (input_mode == LOCAL)
|
||||||
|
error->all(FLERR, Error::NOPOINTER, "Compute {} inputs must be all local");
|
||||||
|
|
||||||
} else if (val.which == ArgInfo::COMPUTE) {
|
} else if (val.which == ArgInfo::COMPUTE) {
|
||||||
val.val.c = modify->get_compute_by_id(val.id);
|
val.val.c = modify->get_compute_by_id(val.id);
|
||||||
if (!val.val.c)
|
if (!val.val.c)
|
||||||
error->all(FLERR, "Compute ID {} for compute {} does not exist", val.id, style);
|
error->all(FLERR, val.iarg, "Compute ID {} for compute {} does not exist", val.id, style);
|
||||||
|
|
||||||
if (input_mode == PERATOM) {
|
if (input_mode == PERATOM) {
|
||||||
if (!val.val.c->peratom_flag)
|
if (!val.val.c->peratom_flag)
|
||||||
error->all(FLERR, "Compute {} compute {} does not calculate per-atom values", style,
|
error->all(FLERR, val.iarg, "Compute {} compute {} does not calculate per-atom values",
|
||||||
val.id);
|
style, val.id);
|
||||||
if (val.argindex == 0 && val.val.c->size_peratom_cols != 0)
|
if (val.argindex == 0 && val.val.c->size_peratom_cols != 0)
|
||||||
error->all(FLERR, "Compute {} compute {} does not calculate a per-atom vector", style,
|
error->all(FLERR, val.iarg, "Compute {} compute {} does not calculate a per-atom vector",
|
||||||
val.id);
|
style, val.id);
|
||||||
if (val.argindex && val.val.c->size_peratom_cols == 0)
|
if (val.argindex && val.val.c->size_peratom_cols == 0)
|
||||||
error->all(FLERR, "Compute {} compute {} does not calculate a per-atom array", style,
|
error->all(FLERR, val.iarg, "Compute {} compute {} does not calculate a per-atom array",
|
||||||
val.id);
|
style, val.id);
|
||||||
if (val.argindex && val.argindex > val.val.c->size_peratom_cols)
|
if (val.argindex && val.argindex > val.val.c->size_peratom_cols)
|
||||||
error->all(FLERR, "Compute {} compute {} array is accessed out-of-range", style, val.id);
|
error->all(FLERR, val.iarg, "Compute {} compute {} array is accessed out-of-range{}",
|
||||||
|
style, val.id, utils::errorurl(20));
|
||||||
|
|
||||||
} else if (input_mode == LOCAL) {
|
} else if (input_mode == LOCAL) {
|
||||||
if (!val.val.c->local_flag)
|
if (!val.val.c->local_flag)
|
||||||
error->all(FLERR, "Compute {} compute {} does not calculate local values", style, val.id);
|
error->all(FLERR, val.iarg, "Compute {} compute {} does not calculate local values",
|
||||||
|
style, val.id);
|
||||||
if (val.argindex == 0 && val.val.c->size_local_cols != 0)
|
if (val.argindex == 0 && val.val.c->size_local_cols != 0)
|
||||||
error->all(FLERR, "Compute {} compute {} does not calculate a local vector", style,
|
error->all(FLERR, val.iarg, "Compute {} compute {} does not calculate a local vector",
|
||||||
val.id);
|
style, val.id);
|
||||||
if (val.argindex && val.val.c->size_local_cols == 0)
|
if (val.argindex && val.val.c->size_local_cols == 0)
|
||||||
error->all(FLERR, "Compute {} compute {} does not calculate a local array", style,
|
error->all(FLERR, val.iarg, "Compute {} compute {} does not calculate a local array",
|
||||||
val.id);
|
style, val.id);
|
||||||
if (val.argindex && val.argindex > val.val.c->size_local_cols)
|
if (val.argindex && val.argindex > val.val.c->size_local_cols)
|
||||||
error->all(FLERR, "Compute {} compute {} array is accessed out-of-range", style, val.id);
|
error->all(FLERR, val.iarg, "Compute {} compute {} array is accessed out-of-range{}",
|
||||||
|
style, val.id, utils::errorurl(20));
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if (val.which == ArgInfo::FIX) {
|
} else if (val.which == ArgInfo::FIX) {
|
||||||
val.val.f = modify->get_fix_by_id(val.id);
|
val.val.f = modify->get_fix_by_id(val.id);
|
||||||
if (!val.val.f) error->all(FLERR, "Fix ID {} for compute {} does not exist", val.id, style);
|
if (!val.val.f)
|
||||||
|
error->all(FLERR, val.iarg, "Fix ID {} for compute {} does not exist", val.id, style);
|
||||||
|
|
||||||
if (input_mode == PERATOM) {
|
if (input_mode == PERATOM) {
|
||||||
if (!val.val.f->peratom_flag)
|
if (!val.val.f->peratom_flag)
|
||||||
error->all(FLERR, "Compute {} fix {} does not calculate per-atom values", style, val.id);
|
error->all(FLERR, val.iarg, "Compute {} fix {} does not calculate per-atom values",
|
||||||
|
style, val.id);
|
||||||
if (val.argindex == 0 && (val.val.f->size_peratom_cols != 0))
|
if (val.argindex == 0 && (val.val.f->size_peratom_cols != 0))
|
||||||
error->all(FLERR, "Compute {} fix {} does not calculate a per-atom vector", style,
|
error->all(FLERR, val.iarg, "Compute {} fix {} does not calculate a per-atom vector",
|
||||||
val.id);
|
style, val.id);
|
||||||
if (val.argindex && (val.val.f->size_peratom_cols == 0))
|
if (val.argindex && (val.val.f->size_peratom_cols == 0))
|
||||||
error->all(FLERR, "Compute {} fix {} does not calculate a per-atom array", style, val.id);
|
error->all(FLERR, val.iarg, "Compute {} fix {} does not calculate a per-atom array",
|
||||||
|
style, val.id);
|
||||||
if (val.argindex && (val.argindex > val.val.f->size_peratom_cols))
|
if (val.argindex && (val.argindex > val.val.f->size_peratom_cols))
|
||||||
error->all(FLERR, "Compute {} fix {} array is accessed out-of-range", style, val.id);
|
error->all(FLERR, val.iarg, "Compute {} fix {} array is accessed out-of-range{}",
|
||||||
|
style, val.id, utils::errorurl(20));
|
||||||
|
|
||||||
} else if (input_mode == LOCAL) {
|
} else if (input_mode == LOCAL) {
|
||||||
if (!val.val.f->local_flag)
|
if (!val.val.f->local_flag)
|
||||||
error->all(FLERR, "Compute {} fix {} does not calculate local values", style, val.id);
|
error->all(FLERR, val.iarg, "Compute {} fix {} does not calculate local values",
|
||||||
|
style, val.id);
|
||||||
if (val.argindex == 0 && (val.val.f->size_local_cols != 0))
|
if (val.argindex == 0 && (val.val.f->size_local_cols != 0))
|
||||||
error->all(FLERR, "Compute {} fix {} does not calculate a local vector", style, val.id);
|
error->all(FLERR, val.iarg, "Compute {} fix {} does not calculate a local vector",
|
||||||
|
style, val.id);
|
||||||
if (val.argindex && (val.val.f->size_local_cols == 0))
|
if (val.argindex && (val.val.f->size_local_cols == 0))
|
||||||
error->all(FLERR, "Compute {} fix {} does not calculate a local array", style, val.id);
|
error->all(FLERR, val.iarg, "Compute {} fix {} does not calculate a local array",
|
||||||
|
style, val.id);
|
||||||
if (val.argindex && (val.argindex > val.val.f->size_local_cols))
|
if (val.argindex && (val.argindex > val.val.f->size_local_cols))
|
||||||
error->all(FLERR, "Compute {} fix {} array is accessed out-of-range", style, val.id);
|
error->all(FLERR, val.iarg, "Compute {} fix {} array is accessed out-of-range{}",
|
||||||
|
style, val.id, utils::errorurl(20));
|
||||||
}
|
}
|
||||||
|
|
||||||
} else if (val.which == ArgInfo::VARIABLE) {
|
} else if (val.which == ArgInfo::VARIABLE) {
|
||||||
if (input_mode == LOCAL) error->all(FLERR, "Compute {} inputs must be all local");
|
if (input_mode == LOCAL)
|
||||||
|
error->all(FLERR, Error::NOPOINTER, "Compute {} inputs must be all local");
|
||||||
val.val.v = input->variable->find(val.id.c_str());
|
val.val.v = input->variable->find(val.id.c_str());
|
||||||
if (val.val.v < 0)
|
if (val.val.v < 0)
|
||||||
error->all(FLERR, "Variable name {} for compute {} does not exist", val.id, style);
|
error->all(FLERR, val.iarg, "Variable name {} for compute {} does not exist", val.id,
|
||||||
|
style);
|
||||||
if (input->variable->atomstyle(val.val.v) == 0)
|
if (input->variable->atomstyle(val.val.v) == 0)
|
||||||
error->all(FLERR, "Compute {} variable {} is not atom-style variable", style, val.id);
|
error->all(FLERR, val.iarg, "Compute {} variable {} is not atom-style variable", style,
|
||||||
|
val.id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -365,16 +396,20 @@ void ComputeReduce::init()
|
|||||||
if (val.which == ArgInfo::COMPUTE) {
|
if (val.which == ArgInfo::COMPUTE) {
|
||||||
val.val.c = modify->get_compute_by_id(val.id);
|
val.val.c = modify->get_compute_by_id(val.id);
|
||||||
if (!val.val.c)
|
if (!val.val.c)
|
||||||
error->all(FLERR, "Compute ID {} for compute {} does not exist", val.id, style);
|
error->all(FLERR, Error::NOLASTLINE, "Compute ID {} for compute {} does not exist",
|
||||||
|
val.id, style);
|
||||||
|
|
||||||
} else if (val.which == ArgInfo::FIX) {
|
} else if (val.which == ArgInfo::FIX) {
|
||||||
val.val.f = modify->get_fix_by_id(val.id);
|
val.val.f = modify->get_fix_by_id(val.id);
|
||||||
if (!val.val.f) error->all(FLERR, "Fix ID {} for compute {} does not exist", val.id, style);
|
if (!val.val.f)
|
||||||
|
error->all(FLERR, Error::NOLASTLINE, "Fix ID {} for compute {} does not exist",
|
||||||
|
val.id, style);
|
||||||
|
|
||||||
} else if (val.which == ArgInfo::VARIABLE) {
|
} else if (val.which == ArgInfo::VARIABLE) {
|
||||||
val.val.v = input->variable->find(val.id.c_str());
|
val.val.v = input->variable->find(val.id.c_str());
|
||||||
if (val.val.v < 0)
|
if (val.val.v < 0)
|
||||||
error->all(FLERR, "Variable name {} for compute {} does not exist", val.id, style);
|
error->all(FLERR, Error::NOLASTLINE, "Variable name {} for compute {} does not exist",
|
||||||
|
val.id, style);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -382,7 +417,9 @@ void ComputeReduce::init()
|
|||||||
|
|
||||||
if (idregion) {
|
if (idregion) {
|
||||||
region = domain->get_region_by_id(idregion);
|
region = domain->get_region_by_id(idregion);
|
||||||
if (!region) error->all(FLERR, "Region {} for compute reduce/region does not exist", idregion);
|
if (!region)
|
||||||
|
error->all(FLERR, Error::NOLASTLINE, "Region {} for compute reduce/region does not exist",
|
||||||
|
idregion);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -586,7 +623,8 @@ double ComputeReduce::compute_one(int m, int flag)
|
|||||||
|
|
||||||
} else if (val.which == ArgInfo::FIX) {
|
} else if (val.which == ArgInfo::FIX) {
|
||||||
if (update->ntimestep % val.val.f->peratom_freq)
|
if (update->ntimestep % val.val.f->peratom_freq)
|
||||||
error->all(FLERR, "Fix {} used in compute {} not computed at compatible time", val.id, style);
|
error->all(FLERR, Error::NOLASTLINE, "Fix {} used in compute {} not computed at "
|
||||||
|
"compatible time{}", val.id, style, utils::errorurl(7));
|
||||||
|
|
||||||
if (input_mode == PERATOM) {
|
if (input_mode == PERATOM) {
|
||||||
if (aidx == 0) {
|
if (aidx == 0) {
|
||||||
|
|||||||
@ -41,6 +41,7 @@ class ComputeReduce : public Compute {
|
|||||||
struct value_t {
|
struct value_t {
|
||||||
int which;
|
int which;
|
||||||
int argindex;
|
int argindex;
|
||||||
|
int iarg;
|
||||||
std::string id;
|
std::string id;
|
||||||
union {
|
union {
|
||||||
class Compute *c;
|
class Compute *c;
|
||||||
|
|||||||
@ -52,15 +52,17 @@ ComputeReduceChunk::ComputeReduceChunk(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
else if (strcmp(arg[4], "max") == 0)
|
else if (strcmp(arg[4], "max") == 0)
|
||||||
mode = MAXX;
|
mode = MAXX;
|
||||||
else
|
else
|
||||||
error->all(FLERR, "Unknown compute reduce/chunk mode: {}", arg[4]);
|
error->all(FLERR, 4, "Unknown compute reduce/chunk mode: {}", arg[4]);
|
||||||
|
|
||||||
int iarg = 5;
|
const int ioffset = 5;
|
||||||
|
int iarg = ioffset;
|
||||||
|
|
||||||
// expand args if any have wildcard character "*"
|
// expand args if any have wildcard character "*"
|
||||||
|
|
||||||
int expand = 0;
|
int expand = 0;
|
||||||
char **earg;
|
char **earg;
|
||||||
int nargnew = utils::expand_args(FLERR, narg - iarg, &arg[iarg], 1, earg, lmp);
|
int *amap = nullptr;
|
||||||
|
int nargnew = utils::expand_args(FLERR, narg - iarg, &arg[iarg], 1, earg, lmp, &amap);
|
||||||
|
|
||||||
if (earg != &arg[iarg]) expand = 1;
|
if (earg != &arg[iarg]) expand = 1;
|
||||||
arg = earg;
|
arg = earg;
|
||||||
@ -74,11 +76,13 @@ ComputeReduceChunk::ComputeReduceChunk(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
value_t val;
|
value_t val;
|
||||||
val.which = argi.get_type();
|
val.which = argi.get_type();
|
||||||
val.argindex = argi.get_index1();
|
val.argindex = argi.get_index1();
|
||||||
|
if (expand) val.iarg = amap[iarg] + ioffset;
|
||||||
|
else val.iarg = iarg + ioffset;
|
||||||
val.id = argi.get_name();
|
val.id = argi.get_name();
|
||||||
val.val.c = nullptr;
|
val.val.c = nullptr;
|
||||||
|
|
||||||
if ((val.which == ArgInfo::UNKNOWN) || (val.which == ArgInfo::NONE) || (argi.get_dim() > 1))
|
if ((val.which == ArgInfo::UNKNOWN) || (val.which == ArgInfo::NONE) || (argi.get_dim() > 1))
|
||||||
error->all(FLERR, "Illegal compute reduce/chunk argument: {}", arg[iarg]);
|
error->all(FLERR, val.iarg, "Illegal compute reduce/chunk argument: {}", arg[iarg]);
|
||||||
|
|
||||||
values.push_back(val);
|
values.push_back(val);
|
||||||
}
|
}
|
||||||
@ -96,40 +100,46 @@ ComputeReduceChunk::ComputeReduceChunk(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
if (val.which == ArgInfo::COMPUTE) {
|
if (val.which == ArgInfo::COMPUTE) {
|
||||||
val.val.c = modify->get_compute_by_id(val.id);
|
val.val.c = modify->get_compute_by_id(val.id);
|
||||||
if (!val.val.c)
|
if (!val.val.c)
|
||||||
error->all(FLERR, "Compute ID {} for compute reduce/chunk does not exist", val.id);
|
error->all(FLERR, val.iarg, "Compute ID {} for compute reduce/chunk does not exist",
|
||||||
|
val.id);
|
||||||
if (!val.val.c->peratom_flag)
|
if (!val.val.c->peratom_flag)
|
||||||
error->all(FLERR, "Compute reduce/chunk compute {} does not calculate per-atom values",
|
error->all(FLERR, val.iarg, "Compute reduce/chunk compute {} does not calculate per-atom "
|
||||||
val.id);
|
"values", val.id);
|
||||||
if ((val.argindex == 0) && (val.val.c->size_peratom_cols != 0))
|
if ((val.argindex == 0) && (val.val.c->size_peratom_cols != 0))
|
||||||
error->all(FLERR, "Compute reduce/chunk compute {} does not calculate a per-atom vector",
|
error->all(FLERR, val.iarg, "Compute reduce/chunk compute {} does not calculate a "
|
||||||
val.id);
|
"per-atom vector", val.id);
|
||||||
if (val.argindex && (val.val.c->size_peratom_cols == 0))
|
if (val.argindex && (val.val.c->size_peratom_cols == 0))
|
||||||
error->all(FLERR, "Compute reduce/chunk compute {} does not calculate a per-atom array",
|
error->all(FLERR, val.iarg, "Compute reduce/chunk compute {} does not calculate a "
|
||||||
val.id);
|
"per-atom array", val.id);
|
||||||
if (val.argindex && (val.argindex > val.val.c->size_peratom_cols))
|
if (val.argindex && (val.argindex > val.val.c->size_peratom_cols))
|
||||||
error->all(FLERR, "Compute reduce/chunk compute array {} is accessed out-of-range", val.id);
|
error->all(FLERR, val.iarg, "Compute reduce/chunk compute array {} is accessed "
|
||||||
|
"out-of-range{}", val.id, utils::errorurl(20));
|
||||||
|
|
||||||
} else if (val.which == ArgInfo::FIX) {
|
} else if (val.which == ArgInfo::FIX) {
|
||||||
val.val.f = modify->get_fix_by_id(val.id);
|
val.val.f = modify->get_fix_by_id(val.id);
|
||||||
if (!val.val.f)
|
if (!val.val.f)
|
||||||
error->all(FLERR, "Fix ID {} for compute reduce/chunk does not exist", val.id);
|
error->all(FLERR, val.iarg, "Fix ID {} for compute reduce/chunk does not exist", val.id);
|
||||||
if (!val.val.f->peratom_flag)
|
if (!val.val.f->peratom_flag)
|
||||||
error->all(FLERR, "Compute reduce/chunk fix {} does not calculate per-atom values", val.id);
|
error->all(FLERR, val.iarg, "Compute reduce/chunk fix {} does not calculate per-atom "
|
||||||
|
"values", val.id);
|
||||||
if ((val.argindex == 0) && (val.val.f->size_peratom_cols != 0))
|
if ((val.argindex == 0) && (val.val.f->size_peratom_cols != 0))
|
||||||
error->all(FLERR, "Compute reduce/chunk fix {} does not calculate a per-atom vector",
|
error->all(FLERR, val.iarg, "Compute reduce/chunk fix {} does not calculate a per-atom "
|
||||||
val.id);
|
"vector", val.id);
|
||||||
if (val.argindex && (val.val.f->size_peratom_cols == 0))
|
if (val.argindex && (val.val.f->size_peratom_cols == 0))
|
||||||
error->all(FLERR, "Compute reduce/chunk fix {} does not calculate a per-atom array",
|
error->all(FLERR, val.iarg, "Compute reduce/chunk fix {} does not calculate a per-atom "
|
||||||
val.id);
|
"array", val.id);
|
||||||
if (val.argindex && (val.argindex > val.val.f->size_peratom_cols))
|
if (val.argindex && (val.argindex > val.val.f->size_peratom_cols))
|
||||||
error->all(FLERR, "Compute reduce/chunk fix {} array is accessed out-of-range", val.id);
|
error->all(FLERR, val.iarg, "Compute reduce/chunk fix {} array is accessed out-of-range{}",
|
||||||
|
val.id, utils::errorurl(20));
|
||||||
|
|
||||||
} else if (val.which == ArgInfo::VARIABLE) {
|
} else if (val.which == ArgInfo::VARIABLE) {
|
||||||
val.val.v = input->variable->find(val.id.c_str());
|
val.val.v = input->variable->find(val.id.c_str());
|
||||||
if (val.val.v < 0)
|
if (val.val.v < 0)
|
||||||
error->all(FLERR, "Variable name {} for compute reduce/chunk does not exist", val.id);
|
error->all(FLERR, val.iarg, "Variable name {} for compute reduce/chunk does not exist",
|
||||||
|
val.id);
|
||||||
if (input->variable->atomstyle(val.val.v) == 0)
|
if (input->variable->atomstyle(val.val.v) == 0)
|
||||||
error->all(FLERR, "Compute reduce/chunk variable is not atom-style variable");
|
error->all(FLERR, val.iarg, "Compute reduce/chunk variable {} is not atom-style variable",
|
||||||
|
val.id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -186,17 +196,20 @@ void ComputeReduceChunk::init()
|
|||||||
if (val.which == ArgInfo::COMPUTE) {
|
if (val.which == ArgInfo::COMPUTE) {
|
||||||
val.val.c = modify->get_compute_by_id(val.id);
|
val.val.c = modify->get_compute_by_id(val.id);
|
||||||
if (!val.val.c)
|
if (!val.val.c)
|
||||||
error->all(FLERR, "Compute ID {} for compute reduce/chunk does not exist", val.id);
|
error->all(FLERR, Error::NOLASTLINE,
|
||||||
|
"Compute ID {} for compute reduce/chunk does not exist", val.id);
|
||||||
|
|
||||||
} else if (val.which == ArgInfo::FIX) {
|
} else if (val.which == ArgInfo::FIX) {
|
||||||
val.val.f = modify->get_fix_by_id(val.id);
|
val.val.f = modify->get_fix_by_id(val.id);
|
||||||
if (!val.val.f)
|
if (!val.val.f)
|
||||||
error->all(FLERR, "Fix ID {} for compute reduce/chunk does not exist", val.id);
|
error->all(FLERR, Error::NOLASTLINE, "Fix ID {} for compute reduce/chunk does not exist",
|
||||||
|
val.id);
|
||||||
|
|
||||||
} else if (val.which == ArgInfo::VARIABLE) {
|
} else if (val.which == ArgInfo::VARIABLE) {
|
||||||
val.val.v = input->variable->find(val.id.c_str());
|
val.val.v = input->variable->find(val.id.c_str());
|
||||||
if (val.val.v < 0)
|
if (val.val.v < 0)
|
||||||
error->all(FLERR, "Variable name {} for compute reduce/chunk does not exist", val.id);
|
error->all(FLERR, Error::NOLASTLINE, "Variable name {} for compute reduce/chunk does not "
|
||||||
|
"exist", val.id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -317,7 +330,8 @@ void ComputeReduceChunk::compute_one(int m, double *vchunk, int nstride)
|
|||||||
|
|
||||||
} else if (val.which == ArgInfo::FIX) {
|
} else if (val.which == ArgInfo::FIX) {
|
||||||
if (update->ntimestep % val.val.f->peratom_freq)
|
if (update->ntimestep % val.val.f->peratom_freq)
|
||||||
error->all(FLERR, "Fix used in compute reduce/chunk not computed at compatible time");
|
error->all(FLERR, Error::NOLASTLINE, "Fix used in compute reduce/chunk not computed at "
|
||||||
|
"compatible time{}", utils::errorurl(7));
|
||||||
|
|
||||||
if (val.argindex == 0) {
|
if (val.argindex == 0) {
|
||||||
double *vfix = val.val.f->vector_atom;
|
double *vfix = val.val.f->vector_atom;
|
||||||
|
|||||||
@ -38,6 +38,7 @@ class ComputeReduceChunk : public ComputeChunk {
|
|||||||
struct value_t {
|
struct value_t {
|
||||||
int which;
|
int which;
|
||||||
int argindex;
|
int argindex;
|
||||||
|
int iarg;
|
||||||
std::string id;
|
std::string id;
|
||||||
union {
|
union {
|
||||||
class Compute *c;
|
class Compute *c;
|
||||||
|
|||||||
@ -34,9 +34,10 @@ ComputeSlice::ComputeSlice(LAMMPS *lmp, int narg, char **arg) : Compute(lmp, nar
|
|||||||
nstop = utils::inumeric(FLERR, arg[4], false, lmp);
|
nstop = utils::inumeric(FLERR, arg[4], false, lmp);
|
||||||
nskip = utils::inumeric(FLERR, arg[5], false, lmp);
|
nskip = utils::inumeric(FLERR, arg[5], false, lmp);
|
||||||
|
|
||||||
if (nstart < 1) error->all(FLERR, "Invalid compute slice nstart value {} < 1", nstart);
|
if (nstart < 1) error->all(FLERR, 3, "Invalid compute slice nstart value {} < 1", nstart);
|
||||||
if (nstop < nstart) error->all(FLERR, "Invalid compute slice nstop value {} < {}", nstop, nstart);
|
if (nstop < nstart)
|
||||||
if (nskip < 1) error->all(FLERR, "Invalid compute slice nskip value < 1: {}", nskip);
|
error->all(FLERR, 4, "Invalid compute slice nstop value {} < {}", nstop, nstart);
|
||||||
|
if (nskip < 1) error->all(FLERR, 5, "Invalid compute slice nskip value < 1: {}", nskip);
|
||||||
|
|
||||||
// parse values
|
// parse values
|
||||||
|
|
||||||
@ -47,11 +48,12 @@ ComputeSlice::ComputeSlice(LAMMPS *lmp, int narg, char **arg) : Compute(lmp, nar
|
|||||||
value_t val;
|
value_t val;
|
||||||
val.which = argi.get_type();
|
val.which = argi.get_type();
|
||||||
val.argindex = argi.get_index1();
|
val.argindex = argi.get_index1();
|
||||||
|
val.iarg = iarg;
|
||||||
val.id = argi.get_name();
|
val.id = argi.get_name();
|
||||||
val.val.c = nullptr;
|
val.val.c = nullptr;
|
||||||
|
|
||||||
if ((val.which == ArgInfo::UNKNOWN) || (val.which == ArgInfo::NONE) || (argi.get_dim() > 1))
|
if ((val.which == ArgInfo::UNKNOWN) || (val.which == ArgInfo::NONE) || (argi.get_dim() > 1))
|
||||||
error->all(FLERR, "Illegal compute slice argument: {}", arg[iarg]);
|
error->all(FLERR, iarg, "Illegal compute slice argument: {}", arg[iarg]);
|
||||||
|
|
||||||
values.push_back(val);
|
values.push_back(val);
|
||||||
}
|
}
|
||||||
@ -61,49 +63,63 @@ ComputeSlice::ComputeSlice(LAMMPS *lmp, int narg, char **arg) : Compute(lmp, nar
|
|||||||
for (auto &val : values) {
|
for (auto &val : values) {
|
||||||
if (val.which == ArgInfo::COMPUTE) {
|
if (val.which == ArgInfo::COMPUTE) {
|
||||||
val.val.c = modify->get_compute_by_id(val.id);
|
val.val.c = modify->get_compute_by_id(val.id);
|
||||||
if (!val.val.c) error->all(FLERR, "Compute ID {} for compute slice does not exist", val.id);
|
if (!val.val.c)
|
||||||
|
error->all(FLERR, val.iarg, "Compute ID {} for compute slice does not exist", val.id);
|
||||||
if (val.val.c->vector_flag) {
|
if (val.val.c->vector_flag) {
|
||||||
if (val.argindex)
|
if (val.argindex)
|
||||||
error->all(FLERR, "Compute slice compute {} does not calculate a global array", val.id);
|
error->all(FLERR, val.iarg, "Compute slice compute {} does not calculate a global array",
|
||||||
|
val.id);
|
||||||
if (nstop > val.val.c->size_vector)
|
if (nstop > val.val.c->size_vector)
|
||||||
error->all(FLERR, "Compute slice compute {} vector is accessed out-of-range", val.id);
|
error->all(FLERR, val.iarg, "Compute slice compute {} vector is accessed out-of-range{}",
|
||||||
|
val.id, utils::errorurl(20));
|
||||||
} else if (val.val.c->array_flag) {
|
} else if (val.val.c->array_flag) {
|
||||||
if (val.argindex == 0)
|
if (val.argindex == 0)
|
||||||
error->all(FLERR, "Compute slice compute {} does not calculate a global vector", val.id);
|
error->all(FLERR, val.iarg, "Compute slice compute {} does not calculate a global vector",
|
||||||
if (val.argindex > val.val.c->size_array_cols)
|
|
||||||
error->all(FLERR, "Compute slice compute {} array is accessed out-of-range", val.id);
|
|
||||||
if (nstop > val.val.c->size_array_rows)
|
|
||||||
error->all(FLERR, "Compute slice compute {} array is accessed out-of-range", val.id);
|
|
||||||
} else {
|
|
||||||
error->all(FLERR, "Compute slice compute {} does not calculate global vector or array",
|
|
||||||
val.id);
|
val.id);
|
||||||
|
if (val.argindex > val.val.c->size_array_cols)
|
||||||
|
error->all(FLERR, val.iarg, "Compute slice compute {} array is accessed out-of-range{}",
|
||||||
|
val.id, utils::errorurl(20));
|
||||||
|
if (nstop > val.val.c->size_array_rows)
|
||||||
|
error->all(FLERR, val.iarg, "Compute slice compute {} array is accessed out-of-range{}",
|
||||||
|
val.id, utils::errorurl(20));
|
||||||
|
} else {
|
||||||
|
error->all(FLERR, val.iarg, "Compute slice compute {} does not calculate global vector or "
|
||||||
|
"array", val.id);
|
||||||
}
|
}
|
||||||
} else if (val.which == ArgInfo::FIX) {
|
} else if (val.which == ArgInfo::FIX) {
|
||||||
val.val.f = modify->get_fix_by_id(val.id);
|
val.val.f = modify->get_fix_by_id(val.id);
|
||||||
if (!val.val.f) error->all(FLERR, "Fix ID {} for compute slice does not exist", val.id);
|
if (!val.val.f)
|
||||||
|
error->all(FLERR, val.iarg, "Fix ID {} for compute slice does not exist", val.id);
|
||||||
if (val.val.f->vector_flag) {
|
if (val.val.f->vector_flag) {
|
||||||
if (val.argindex)
|
if (val.argindex)
|
||||||
error->all(FLERR, "Compute slice fix {} does not calculate a global array", val.id);
|
error->all(FLERR, val.iarg, "Compute slice fix {} does not calculate a global array",
|
||||||
|
val.id);
|
||||||
if (nstop > val.val.f->size_vector)
|
if (nstop > val.val.f->size_vector)
|
||||||
error->all(FLERR, "Compute slice fix {} vector is accessed out-of-range", val.id);
|
error->all(FLERR, val.iarg, "Compute slice fix {} vector is accessed out-of-range{}",
|
||||||
|
val.id, utils::errorurl(20));
|
||||||
} else if (val.val.f->array_flag) {
|
} else if (val.val.f->array_flag) {
|
||||||
if (val.argindex == 0)
|
if (val.argindex == 0)
|
||||||
error->all(FLERR, "Compute slice fix {} does not calculate a global vector", val.id);
|
error->all(FLERR, val.iarg, "Compute slice fix {} does not calculate a global vector",
|
||||||
|
val.id);
|
||||||
if (val.argindex > val.val.f->size_array_cols)
|
if (val.argindex > val.val.f->size_array_cols)
|
||||||
error->all(FLERR, "Compute slice fix {} array is accessed out-of-range", val.id);
|
error->all(FLERR, val.iarg, "Compute slice fix {} array is accessed out-of-range{}",
|
||||||
|
val.id, utils::errorurl(20));
|
||||||
if (nstop > val.val.f->size_array_rows)
|
if (nstop > val.val.f->size_array_rows)
|
||||||
error->all(FLERR, "Compute slice fix {} array is accessed out-of-range", val.id);
|
error->all(FLERR, val.iarg, "Compute slice fix {} array is accessed out-of-range{}",
|
||||||
|
val.id, utils::errorurl(20));
|
||||||
} else {
|
} else {
|
||||||
error->all(FLERR, "Compute slice fix {} does not calculate global vector or array", val.id);
|
error->all(FLERR, val.iarg, "Compute slice fix {} does not calculate global vector or "
|
||||||
|
"array", val.id);
|
||||||
}
|
}
|
||||||
} else if (val.which == ArgInfo::VARIABLE) {
|
} else if (val.which == ArgInfo::VARIABLE) {
|
||||||
val.val.v = input->variable->find(val.id.c_str());
|
val.val.v = input->variable->find(val.id.c_str());
|
||||||
if (val.val.v < 0)
|
if (val.val.v < 0)
|
||||||
error->all(FLERR, "Variable name {} for compute slice does not exist", val.id);
|
error->all(FLERR, val.iarg, "Variable name {} for compute slice does not exist", val.id);
|
||||||
if (val.argindex == 0 && input->variable->vectorstyle(val.val.v) == 0)
|
if (val.argindex == 0 && input->variable->vectorstyle(val.val.v) == 0)
|
||||||
error->all(FLERR, "Compute slice variable {} is not vector-style variable", val.id);
|
error->all(FLERR, val.iarg, "Compute slice variable {} is not vector-style variable",
|
||||||
|
val.id);
|
||||||
if (val.argindex)
|
if (val.argindex)
|
||||||
error->all(FLERR, "Compute slice vector variable {} cannot be indexed", val.id);
|
error->all(FLERR, val.iarg, "Compute slice vector variable {} cannot be indexed", val.id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -195,14 +211,18 @@ void ComputeSlice::init()
|
|||||||
for (auto &val : values) {
|
for (auto &val : values) {
|
||||||
if (val.which == ArgInfo::COMPUTE) {
|
if (val.which == ArgInfo::COMPUTE) {
|
||||||
val.val.c = modify->get_compute_by_id(val.id);
|
val.val.c = modify->get_compute_by_id(val.id);
|
||||||
if (!val.val.c) error->all(FLERR, "Compute ID {} for compute slice does not exist", val.id);
|
if (!val.val.c)
|
||||||
|
error->all(FLERR, Error::NOLASTLINE, "Compute ID {} for compute slice does not exist",
|
||||||
|
val.id);
|
||||||
} else if (val.which == ArgInfo::FIX) {
|
} else if (val.which == ArgInfo::FIX) {
|
||||||
val.val.f = modify->get_fix_by_id(val.id);
|
val.val.f = modify->get_fix_by_id(val.id);
|
||||||
if (!val.val.f) error->all(FLERR, "Fix ID {} for compute slice does not exist", val.id);
|
if (!val.val.f)
|
||||||
|
error->all(FLERR, Error::NOLASTLINE, "Fix ID {} for compute slice does not exist", val.id);
|
||||||
} else if (val.which == ArgInfo::VARIABLE) {
|
} else if (val.which == ArgInfo::VARIABLE) {
|
||||||
val.val.v = input->variable->find(val.id.c_str());
|
val.val.v = input->variable->find(val.id.c_str());
|
||||||
if (val.val.v < 0)
|
if (val.val.v < 0)
|
||||||
error->all(FLERR, "Variable name {} for compute slice does not exist", val.id);
|
error->all(FLERR, Error::NOLASTLINE, "Variable name {} for compute slice does not exist",
|
||||||
|
val.id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -267,7 +287,8 @@ void ComputeSlice::extract_one(int m, double *vec, int stride)
|
|||||||
|
|
||||||
} else if (val.which == ArgInfo::FIX) {
|
} else if (val.which == ArgInfo::FIX) {
|
||||||
if (update->ntimestep % val.val.f->global_freq)
|
if (update->ntimestep % val.val.f->global_freq)
|
||||||
error->all(FLERR, "Fix {} used in compute slice not computed at compatible time", val.id);
|
error->all(FLERR, Error::NOLASTLINE, "Fix {} used in compute slice not computed at "
|
||||||
|
"compatible time{}", val.id, utils::errorurl(7));
|
||||||
|
|
||||||
if (val.argindex == 0) {
|
if (val.argindex == 0) {
|
||||||
int j = 0;
|
int j = 0;
|
||||||
@ -289,7 +310,8 @@ void ComputeSlice::extract_one(int m, double *vec, int stride)
|
|||||||
} else if (val.which == ArgInfo::VARIABLE) {
|
} else if (val.which == ArgInfo::VARIABLE) {
|
||||||
double *varvec;
|
double *varvec;
|
||||||
int nvec = input->variable->compute_vector(val.val.v, &varvec);
|
int nvec = input->variable->compute_vector(val.val.v, &varvec);
|
||||||
if (nvec < nstop) error->all(FLERR, "Compute slice variable {} is not long enough", val.id);
|
if (nvec < nstop)
|
||||||
|
error->all(FLERR, Error::NOLASTLINE, "Compute slice variable {} is not long enough", val.id);
|
||||||
int j = 0;
|
int j = 0;
|
||||||
for (int i = nstart; i < nstop; i += nskip) {
|
for (int i = nstart; i < nstop; i += nskip) {
|
||||||
vec[j] = varvec[i - 1];
|
vec[j] = varvec[i - 1];
|
||||||
|
|||||||
@ -36,6 +36,7 @@ class ComputeSlice : public Compute {
|
|||||||
struct value_t {
|
struct value_t {
|
||||||
int which;
|
int which;
|
||||||
int argindex;
|
int argindex;
|
||||||
|
int iarg;
|
||||||
std::string id;
|
std::string id;
|
||||||
union {
|
union {
|
||||||
class Compute *c;
|
class Compute *c;
|
||||||
|
|||||||
@ -68,13 +68,15 @@ DumpCustom::DumpCustom(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
clearstep = 1;
|
clearstep = 1;
|
||||||
|
|
||||||
nevery = utils::inumeric(FLERR,arg[3],false,lmp);
|
nevery = utils::inumeric(FLERR,arg[3],false,lmp);
|
||||||
if (nevery <= 0) error->all(FLERR,"Illegal dump {} command: output frequency must be > 0", style);
|
if (nevery <= 0)
|
||||||
|
error->all(FLERR, 3, "Illegal dump {} command: output frequency must be > 0", style);
|
||||||
|
|
||||||
// expand args if any have wildcard character "*"
|
// expand args if any have wildcard character "*"
|
||||||
// ok to include trailing optional args,
|
// ok to include trailing optional args,
|
||||||
// so long as they do not have "*" between square brackets
|
// so long as they do not have "*" between square brackets
|
||||||
// nfield may be shrunk below if extra optional args exist
|
// nfield may be shrunk below if extra optional args exist
|
||||||
|
|
||||||
|
int ioffset = 5;
|
||||||
expand = 0;
|
expand = 0;
|
||||||
nfield = nargnew = utils::expand_args(FLERR,narg-5,&arg[5],1,earg,lmp);
|
nfield = nargnew = utils::expand_args(FLERR,narg-5,&arg[5],1,earg,lmp);
|
||||||
if (earg != &arg[5]) expand = 1;
|
if (earg != &arg[5]) expand = 1;
|
||||||
@ -446,7 +448,8 @@ void DumpCustom::init_style()
|
|||||||
fix[i] = modify->get_fix_by_id(id_fix[i]);
|
fix[i] = modify->get_fix_by_id(id_fix[i]);
|
||||||
if (!fix[i]) error->all(FLERR,"Could not find dump {} fix ID {}", style, id_fix[i]);
|
if (!fix[i]) error->all(FLERR,"Could not find dump {} fix ID {}", style, id_fix[i]);
|
||||||
if (nevery % fix[i]->peratom_freq)
|
if (nevery % fix[i]->peratom_freq)
|
||||||
error->all(FLERR,"Dump {} and fix not computed at compatible times", style);
|
error->all(FLERR,"Dump {} and fix not computed at compatible times{}", style,
|
||||||
|
utils::errorurl(7));
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < nvariable; i++) {
|
for (i = 0; i < nvariable; i++) {
|
||||||
@ -460,7 +463,7 @@ void DumpCustom::init_style()
|
|||||||
for (int i = 0; i < ncustom; i++) {
|
for (int i = 0; i < ncustom; i++) {
|
||||||
icustom = atom->find_custom(id_custom[i],flag,cols);
|
icustom = atom->find_custom(id_custom[i],flag,cols);
|
||||||
if (icustom < 0)
|
if (icustom < 0)
|
||||||
error->all(FLERR,"Could not find dump {} atom property name", style);
|
error->all(FLERR, "Could not find dump {} atom property name", style);
|
||||||
custom[i] = icustom;
|
custom[i] = icustom;
|
||||||
if (!flag && !cols) custom_flag[i] = IVEC;
|
if (!flag && !cols) custom_flag[i] = IVEC;
|
||||||
else if (flag && !cols) custom_flag[i] = DVEC;
|
else if (flag && !cols) custom_flag[i] = DVEC;
|
||||||
@ -482,7 +485,8 @@ void DumpCustom::init_style()
|
|||||||
|
|
||||||
void DumpCustom::write_header(bigint ndump)
|
void DumpCustom::write_header(bigint ndump)
|
||||||
{
|
{
|
||||||
if (!header_choice) error->all(FLERR, "Must not use 'run pre no' after creating a new dump");
|
if (!header_choice)
|
||||||
|
error->all(FLERR, Error::NOLASTLINE, "Must not use 'run pre no' after creating a new dump");
|
||||||
|
|
||||||
if (multiproc) (this->*header_choice)(ndump);
|
if (multiproc) (this->*header_choice)(ndump);
|
||||||
else if (me == 0) (this->*header_choice)(ndump);
|
else if (me == 0) (this->*header_choice)(ndump);
|
||||||
@ -742,7 +746,8 @@ int DumpCustom::count()
|
|||||||
if (ncompute) {
|
if (ncompute) {
|
||||||
for (i = 0; i < ncompute; i++) {
|
for (i = 0; i < ncompute; i++) {
|
||||||
if (!compute[i]->is_initialized())
|
if (!compute[i]->is_initialized())
|
||||||
error->all(FLERR,"Dump compute ID {} cannot be invoked before initialization by a run",
|
error->all(FLERR, Error::NOLASTLINE,
|
||||||
|
"Dump compute ID {} cannot be invoked before initialization by a run",
|
||||||
compute[i]->id);
|
compute[i]->id);
|
||||||
if (!(compute[i]->invoked_flag & Compute::INVOKED_PERATOM)) {
|
if (!(compute[i]->invoked_flag & Compute::INVOKED_PERATOM)) {
|
||||||
compute[i]->compute_peratom();
|
compute[i]->compute_peratom();
|
||||||
@ -800,7 +805,7 @@ int DumpCustom::count()
|
|||||||
nstride = 1;
|
nstride = 1;
|
||||||
} else if (thresh_array[ithresh] == MOL) {
|
} else if (thresh_array[ithresh] == MOL) {
|
||||||
if (!atom->molecule_flag)
|
if (!atom->molecule_flag)
|
||||||
error->all(FLERR,
|
error->all(FLERR, Error::NOLASTLINE,
|
||||||
"Threshold for an atom property that isn't allocated");
|
"Threshold for an atom property that isn't allocated");
|
||||||
tagint *molecule = atom->molecule;
|
tagint *molecule = atom->molecule;
|
||||||
for (i = 0; i < nlocal; i++) dchoose[i] = molecule[i];
|
for (i = 0; i < nlocal; i++) dchoose[i] = molecule[i];
|
||||||
@ -1074,39 +1079,44 @@ int DumpCustom::count()
|
|||||||
|
|
||||||
} else if (thresh_array[ithresh] == Q) {
|
} else if (thresh_array[ithresh] == Q) {
|
||||||
if (!atom->q_flag)
|
if (!atom->q_flag)
|
||||||
error->all(FLERR,"Threshold for an atom property that isn't allocated");
|
error->all(FLERR, Error::NOLASTLINE,
|
||||||
|
"Threshold for an atom property that isn't allocated");
|
||||||
ptr = atom->q;
|
ptr = atom->q;
|
||||||
nstride = 1;
|
nstride = 1;
|
||||||
} else if (thresh_array[ithresh] == MUX) {
|
} else if (thresh_array[ithresh] == MUX) {
|
||||||
if (!atom->mu_flag)
|
if (!atom->mu_flag)
|
||||||
error->all(FLERR,"Threshold for an atom property that isn't allocated");
|
error->all(FLERR, Error::NOLASTLINE,
|
||||||
|
"Threshold for an atom property that isn't allocated");
|
||||||
ptr = &atom->mu[0][0];
|
ptr = &atom->mu[0][0];
|
||||||
nstride = 4;
|
nstride = 4;
|
||||||
} else if (thresh_array[ithresh] == MUY) {
|
} else if (thresh_array[ithresh] == MUY) {
|
||||||
if (!atom->mu_flag)
|
if (!atom->mu_flag)
|
||||||
error->all(FLERR,"Threshold for an atom property that isn't allocated");
|
error->all(FLERR, Error::NOLASTLINE,
|
||||||
|
"Threshold for an atom property that isn't allocated");
|
||||||
ptr = &atom->mu[0][1];
|
ptr = &atom->mu[0][1];
|
||||||
nstride = 4;
|
nstride = 4;
|
||||||
} else if (thresh_array[ithresh] == MUZ) {
|
} else if (thresh_array[ithresh] == MUZ) {
|
||||||
if (!atom->mu_flag)
|
if (!atom->mu_flag)
|
||||||
error->all(FLERR,"Threshold for an atom property that isn't allocated");
|
error->all(FLERR, Error::NOLASTLINE,
|
||||||
|
"Threshold for an atom property that isn't allocated");
|
||||||
ptr = &atom->mu[0][2];
|
ptr = &atom->mu[0][2];
|
||||||
nstride = 4;
|
nstride = 4;
|
||||||
} else if (thresh_array[ithresh] == MU) {
|
} else if (thresh_array[ithresh] == MU) {
|
||||||
if (!atom->mu_flag)
|
if (!atom->mu_flag)
|
||||||
error->all(FLERR,"Threshold for an atom property that isn't allocated");
|
error->all(FLERR, Error::NOLASTLINE,
|
||||||
|
"Threshold for an atom property that isn't allocated");
|
||||||
ptr = &atom->mu[0][3];
|
ptr = &atom->mu[0][3];
|
||||||
nstride = 4;
|
nstride = 4;
|
||||||
|
|
||||||
} else if (thresh_array[ithresh] == RADIUS) {
|
} else if (thresh_array[ithresh] == RADIUS) {
|
||||||
if (!atom->radius_flag)
|
if (!atom->radius_flag)
|
||||||
error->all(FLERR,
|
error->all(FLERR, Error::NOLASTLINE,
|
||||||
"Threshold for an atom property that isn't allocated");
|
"Threshold for an atom property that isn't allocated");
|
||||||
ptr = atom->radius;
|
ptr = atom->radius;
|
||||||
nstride = 1;
|
nstride = 1;
|
||||||
} else if (thresh_array[ithresh] == DIAMETER) {
|
} else if (thresh_array[ithresh] == DIAMETER) {
|
||||||
if (!atom->radius_flag)
|
if (!atom->radius_flag)
|
||||||
error->all(FLERR,
|
error->all(FLERR, Error::NOLASTLINE,
|
||||||
"Threshold for an atom property that isn't allocated");
|
"Threshold for an atom property that isn't allocated");
|
||||||
double *radius = atom->radius;
|
double *radius = atom->radius;
|
||||||
for (i = 0; i < nlocal; i++) dchoose[i] = 2.0*radius[i];
|
for (i = 0; i < nlocal; i++) dchoose[i] = 2.0*radius[i];
|
||||||
@ -1114,55 +1124,55 @@ int DumpCustom::count()
|
|||||||
nstride = 1;
|
nstride = 1;
|
||||||
} else if (thresh_array[ithresh] == OMEGAX) {
|
} else if (thresh_array[ithresh] == OMEGAX) {
|
||||||
if (!atom->omega_flag)
|
if (!atom->omega_flag)
|
||||||
error->all(FLERR,
|
error->all(FLERR, Error::NOLASTLINE,
|
||||||
"Threshold for an atom property that isn't allocated");
|
"Threshold for an atom property that isn't allocated");
|
||||||
ptr = &atom->omega[0][0];
|
ptr = &atom->omega[0][0];
|
||||||
nstride = 3;
|
nstride = 3;
|
||||||
} else if (thresh_array[ithresh] == OMEGAY) {
|
} else if (thresh_array[ithresh] == OMEGAY) {
|
||||||
if (!atom->omega_flag)
|
if (!atom->omega_flag)
|
||||||
error->all(FLERR,
|
error->all(FLERR, Error::NOLASTLINE,
|
||||||
"Threshold for an atom property that isn't allocated");
|
"Threshold for an atom property that isn't allocated");
|
||||||
ptr = &atom->omega[0][1];
|
ptr = &atom->omega[0][1];
|
||||||
nstride = 3;
|
nstride = 3;
|
||||||
} else if (thresh_array[ithresh] == OMEGAZ) {
|
} else if (thresh_array[ithresh] == OMEGAZ) {
|
||||||
if (!atom->omega_flag)
|
if (!atom->omega_flag)
|
||||||
error->all(FLERR,
|
error->all(FLERR, Error::NOLASTLINE,
|
||||||
"Threshold for an atom property that isn't allocated");
|
"Threshold for an atom property that isn't allocated");
|
||||||
ptr = &atom->omega[0][2];
|
ptr = &atom->omega[0][2];
|
||||||
nstride = 3;
|
nstride = 3;
|
||||||
} else if (thresh_array[ithresh] == ANGMOMX) {
|
} else if (thresh_array[ithresh] == ANGMOMX) {
|
||||||
if (!atom->angmom_flag)
|
if (!atom->angmom_flag)
|
||||||
error->all(FLERR,
|
error->all(FLERR, Error::NOLASTLINE,
|
||||||
"Threshold for an atom property that isn't allocated");
|
"Threshold for an atom property that isn't allocated");
|
||||||
ptr = &atom->angmom[0][0];
|
ptr = &atom->angmom[0][0];
|
||||||
nstride = 3;
|
nstride = 3;
|
||||||
} else if (thresh_array[ithresh] == ANGMOMY) {
|
} else if (thresh_array[ithresh] == ANGMOMY) {
|
||||||
if (!atom->angmom_flag)
|
if (!atom->angmom_flag)
|
||||||
error->all(FLERR,
|
error->all(FLERR, Error::NOLASTLINE,
|
||||||
"Threshold for an atom property that isn't allocated");
|
"Threshold for an atom property that isn't allocated");
|
||||||
ptr = &atom->angmom[0][1];
|
ptr = &atom->angmom[0][1];
|
||||||
nstride = 3;
|
nstride = 3;
|
||||||
} else if (thresh_array[ithresh] == ANGMOMZ) {
|
} else if (thresh_array[ithresh] == ANGMOMZ) {
|
||||||
if (!atom->angmom_flag)
|
if (!atom->angmom_flag)
|
||||||
error->all(FLERR,
|
error->all(FLERR, Error::NOLASTLINE,
|
||||||
"Threshold for an atom property that isn't allocated");
|
"Threshold for an atom property that isn't allocated");
|
||||||
ptr = &atom->angmom[0][2];
|
ptr = &atom->angmom[0][2];
|
||||||
nstride = 3;
|
nstride = 3;
|
||||||
} else if (thresh_array[ithresh] == TQX) {
|
} else if (thresh_array[ithresh] == TQX) {
|
||||||
if (!atom->torque_flag)
|
if (!atom->torque_flag)
|
||||||
error->all(FLERR,
|
error->all(FLERR, Error::NOLASTLINE,
|
||||||
"Threshold for an atom property that isn't allocated");
|
"Threshold for an atom property that isn't allocated");
|
||||||
ptr = &atom->torque[0][0];
|
ptr = &atom->torque[0][0];
|
||||||
nstride = 3;
|
nstride = 3;
|
||||||
} else if (thresh_array[ithresh] == TQY) {
|
} else if (thresh_array[ithresh] == TQY) {
|
||||||
if (!atom->torque_flag)
|
if (!atom->torque_flag)
|
||||||
error->all(FLERR,
|
error->all(FLERR, Error::NOLASTLINE,
|
||||||
"Threshold for an atom property that isn't allocated");
|
"Threshold for an atom property that isn't allocated");
|
||||||
ptr = &atom->torque[0][1];
|
ptr = &atom->torque[0][1];
|
||||||
nstride = 3;
|
nstride = 3;
|
||||||
} else if (thresh_array[ithresh] == TQZ) {
|
} else if (thresh_array[ithresh] == TQZ) {
|
||||||
if (!atom->torque_flag)
|
if (!atom->torque_flag)
|
||||||
error->all(FLERR,
|
error->all(FLERR, Error::NOLASTLINE,
|
||||||
"Threshold for an atom property that isn't allocated");
|
"Threshold for an atom property that isn't allocated");
|
||||||
ptr = &atom->torque[0][2];
|
ptr = &atom->torque[0][2];
|
||||||
nstride = 3;
|
nstride = 3;
|
||||||
|
|||||||
@ -19,6 +19,7 @@
|
|||||||
#include "domain.h"
|
#include "domain.h"
|
||||||
#include "error.h"
|
#include "error.h"
|
||||||
#include "fix.h"
|
#include "fix.h"
|
||||||
|
#include "input.h"
|
||||||
#include "memory.h"
|
#include "memory.h"
|
||||||
#include "modify.h"
|
#include "modify.h"
|
||||||
#include "update.h"
|
#include "update.h"
|
||||||
@ -43,10 +44,10 @@ DumpLocal::DumpLocal(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
clearstep = 1;
|
clearstep = 1;
|
||||||
|
|
||||||
nevery = utils::inumeric(FLERR,arg[3],false,lmp);
|
nevery = utils::inumeric(FLERR,arg[3],false,lmp);
|
||||||
if (nevery <= 0) error->all(FLERR,"Illegal dump local command");
|
if (nevery <= 0) error->all(FLERR, 3, "Dump local nevery value {} must be > 0", nevery);
|
||||||
|
|
||||||
if (binary)
|
if (binary)
|
||||||
error->all(FLERR,"Binary files are not supported with dump local");
|
error->all(FLERR, 2, "Binary files are not supported with dump local");
|
||||||
|
|
||||||
nfield = narg - 5;
|
nfield = narg - 5;
|
||||||
|
|
||||||
@ -170,7 +171,7 @@ void DumpLocal::init_style()
|
|||||||
columns = utils::strdup(combined);
|
columns = utils::strdup(combined);
|
||||||
|
|
||||||
if (sort_flag && sortcol == 0)
|
if (sort_flag && sortcol == 0)
|
||||||
error->all(FLERR,"Dump local cannot sort by atom ID");
|
error->all(FLERR, Error::NOLASTLINE, "Dump local cannot sort by atom ID");
|
||||||
|
|
||||||
// format = copy of default or user-specified line format
|
// format = copy of default or user-specified line format
|
||||||
|
|
||||||
@ -185,7 +186,7 @@ void DumpLocal::init_style()
|
|||||||
|
|
||||||
auto words = utils::split_words(format);
|
auto words = utils::split_words(format);
|
||||||
if ((int) words.size() < size_one)
|
if ((int) words.size() < size_one)
|
||||||
error->all(FLERR,"Dump_modify format line is too short: {}", format);
|
error->all(FLERR, Error::NOLASTLINE, "Dump_modify format line is too short: {}", format);
|
||||||
|
|
||||||
int i=0;
|
int i=0;
|
||||||
for (const auto &word : words) {
|
for (const auto &word : words) {
|
||||||
@ -218,14 +219,17 @@ void DumpLocal::init_style()
|
|||||||
|
|
||||||
for (i = 0; i < ncompute; i++) {
|
for (i = 0; i < ncompute; i++) {
|
||||||
compute[i] = modify->get_compute_by_id(id_compute[i]);
|
compute[i] = modify->get_compute_by_id(id_compute[i]);
|
||||||
if (!compute[i]) error->all(FLERR,"Could not find dump local compute ID {}",id_compute[i]);
|
if (!compute[i])
|
||||||
|
error->all(FLERR, Error::NOLASTLINE, "Could not find dump local compute ID {}",id_compute[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < nfix; i++) {
|
for (i = 0; i < nfix; i++) {
|
||||||
fix[i] = modify->get_fix_by_id(id_fix[i]);
|
fix[i] = modify->get_fix_by_id(id_fix[i]);
|
||||||
if (!fix[i]) error->all(FLERR,"Could not find dump local fix ID {}", id_fix[i]);
|
if (!fix[i])
|
||||||
|
error->all(FLERR, Error::NOLASTLINE, "Could not find dump local fix ID {}", id_fix[i]);
|
||||||
if (nevery % fix[i]->local_freq)
|
if (nevery % fix[i]->local_freq)
|
||||||
error->all(FLERR,"Dump local and fix {} not computed at compatible times", id_fix[i]);
|
error->all(FLERR, Error::NOLASTLINE, "Dump local and fix {} not computed at "
|
||||||
|
"compatible times{}", id_fix[i], utils::errorurl(7));
|
||||||
}
|
}
|
||||||
|
|
||||||
// open single file, one time only
|
// open single file, one time only
|
||||||
@ -237,13 +241,17 @@ void DumpLocal::init_style()
|
|||||||
|
|
||||||
int DumpLocal::modify_param(int narg, char **arg)
|
int DumpLocal::modify_param(int narg, char **arg)
|
||||||
{
|
{
|
||||||
|
// determine offset in list of arguments for error pointer. also handle the no match case.
|
||||||
|
int argoff = 0;
|
||||||
|
while (input && input->arg[argoff] && (strcmp(input->arg[argoff], arg[0]) != 0)) argoff++;
|
||||||
|
|
||||||
if (strcmp(arg[0],"label") == 0) {
|
if (strcmp(arg[0],"label") == 0) {
|
||||||
if (narg < 2) error->all(FLERR,"Illegal dump_modify command");
|
if (narg < 2) utils::missing_cmd_args(FLERR,"dump_modify label", error);
|
||||||
delete[] label;
|
delete[] label;
|
||||||
label = utils::strdup(arg[1]);
|
label = utils::strdup(arg[1]);
|
||||||
return 2;
|
return 2;
|
||||||
} else if (strcmp(arg[0],"format") == 0) {
|
} else if (strcmp(arg[0],"format") == 0) {
|
||||||
if (narg < 2) error->all(FLERR,"Illegal dump_modify command");
|
if (narg < 2) utils::missing_cmd_args(FLERR, "dump_modify format", error);
|
||||||
|
|
||||||
if (strcmp(arg[1],"none") == 0) {
|
if (strcmp(arg[1],"none") == 0) {
|
||||||
// just clear format_column_user allocated by this dump child class
|
// just clear format_column_user allocated by this dump child class
|
||||||
@ -262,7 +270,7 @@ int DumpLocal::modify_param(int narg, char **arg)
|
|||||||
// use of &str[1] removes leading '%' from BIGINT_FORMAT string
|
// use of &str[1] removes leading '%' from BIGINT_FORMAT string
|
||||||
char *ptr = strchr(format_int_user,'d');
|
char *ptr = strchr(format_int_user,'d');
|
||||||
if (ptr == nullptr)
|
if (ptr == nullptr)
|
||||||
error->all(FLERR, "Dump_modify int format does not contain d character");
|
error->all(FLERR, argoff + 2, "Dump_modify int format does not contain d character");
|
||||||
char str[8];
|
char str[8];
|
||||||
snprintf(str,8,"%s",BIGINT_FORMAT);
|
snprintf(str,8,"%s",BIGINT_FORMAT);
|
||||||
*ptr = '\0';
|
*ptr = '\0';
|
||||||
@ -276,7 +284,7 @@ int DumpLocal::modify_param(int narg, char **arg)
|
|||||||
} else {
|
} else {
|
||||||
int i = utils::inumeric(FLERR,arg[1],false,lmp) - 1;
|
int i = utils::inumeric(FLERR,arg[1],false,lmp) - 1;
|
||||||
if (i < 0 || i >= nfield)
|
if (i < 0 || i >= nfield)
|
||||||
error->all(FLERR,"Illegal dump_modify command");
|
error->all(FLERR, 1, "Illegal dump_modify format column number {}", i);
|
||||||
delete[] format_column_user[i];
|
delete[] format_column_user[i];
|
||||||
format_column_user[i] = utils::strdup(arg[2]);
|
format_column_user[i] = utils::strdup(arg[2]);
|
||||||
}
|
}
|
||||||
@ -330,7 +338,8 @@ int DumpLocal::count()
|
|||||||
if (ncompute) {
|
if (ncompute) {
|
||||||
for (i = 0; i < ncompute; i++) {
|
for (i = 0; i < ncompute; i++) {
|
||||||
if (!compute[i]->is_initialized())
|
if (!compute[i]->is_initialized())
|
||||||
error->all(FLERR,"Dump compute ID {} cannot be invoked before initialization by a run",
|
error->all(FLERR, Error::NOLASTLINE,
|
||||||
|
"Dump compute ID {} cannot be invoked before initialization by a run",
|
||||||
compute[i]->id);
|
compute[i]->id);
|
||||||
if (!(compute[i]->invoked_flag & Compute::INVOKED_LOCAL)) {
|
if (!(compute[i]->invoked_flag & Compute::INVOKED_LOCAL)) {
|
||||||
compute[i]->compute_local();
|
compute[i]->compute_local();
|
||||||
@ -347,14 +356,14 @@ int DumpLocal::count()
|
|||||||
for (i = 0; i < ncompute; i++) {
|
for (i = 0; i < ncompute; i++) {
|
||||||
if (nmine < 0) nmine = compute[i]->size_local_rows;
|
if (nmine < 0) nmine = compute[i]->size_local_rows;
|
||||||
else if (nmine != compute[i]->size_local_rows)
|
else if (nmine != compute[i]->size_local_rows)
|
||||||
error->one(FLERR,
|
error->one(FLERR, Error::NOLASTLINE,
|
||||||
"Dump local count is not consistent across input fields");
|
"Dump local count is not consistent across input fields");
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < nfix; i++) {
|
for (i = 0; i < nfix; i++) {
|
||||||
if (nmine < 0) nmine = fix[i]->size_local_rows;
|
if (nmine < 0) nmine = fix[i]->size_local_rows;
|
||||||
else if (nmine != fix[i]->size_local_rows)
|
else if (nmine != fix[i]->size_local_rows)
|
||||||
error->one(FLERR,
|
error->one(FLERR, Error::NOLASTLINE,
|
||||||
"Dump local count is not consistent across input fields");
|
"Dump local count is not consistent across input fields");
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -442,11 +451,16 @@ void DumpLocal::write_lines(int n, double *mybuf)
|
|||||||
|
|
||||||
void DumpLocal::parse_fields(int narg, char **arg)
|
void DumpLocal::parse_fields(int narg, char **arg)
|
||||||
{
|
{
|
||||||
|
// determine offset in list of arguments for error pointer.
|
||||||
|
int argoff = 0;
|
||||||
|
while (input && input->arg[argoff] && (strcmp(input->arg[argoff], arg[0]) != 0)) argoff++;
|
||||||
|
|
||||||
int computefixflag = 0;
|
int computefixflag = 0;
|
||||||
|
|
||||||
// customize by adding to if statement
|
// customize by adding to if statement
|
||||||
|
|
||||||
for (int iarg = 0; iarg < narg; iarg++) {
|
for (int iarg = 0; iarg < narg; iarg++) {
|
||||||
|
int errptr = iarg + argoff;
|
||||||
|
|
||||||
if (strcmp(arg[iarg],"index") == 0) {
|
if (strcmp(arg[iarg],"index") == 0) {
|
||||||
pack_choice[iarg] = &DumpLocal::pack_index;
|
pack_choice[iarg] = &DumpLocal::pack_index;
|
||||||
@ -470,15 +484,16 @@ void DumpLocal::parse_fields(int narg, char **arg)
|
|||||||
pack_choice[iarg] = &DumpLocal::pack_compute;
|
pack_choice[iarg] = &DumpLocal::pack_compute;
|
||||||
|
|
||||||
icompute = modify->get_compute_by_id(name);
|
icompute = modify->get_compute_by_id(name);
|
||||||
if (!icompute) error->all(FLERR,"Could not find dump local compute ID {}",name);
|
if (!icompute) error->all(FLERR, errptr, "Could not find dump local compute ID {}", name);
|
||||||
if (icompute->local_flag == 0)
|
if (icompute->local_flag == 0)
|
||||||
error->all(FLERR,"Dump local compute {} does not compute local info", name);
|
error->all(FLERR, errptr, "Dump local compute {} does not compute local info", name);
|
||||||
if (argi.get_dim() == 0 && icompute->size_local_cols > 0)
|
if (argi.get_dim() == 0 && icompute->size_local_cols > 0)
|
||||||
error->all(FLERR,"Dump local compute {} does not calculate local vector", name);
|
error->all(FLERR, errptr, "Dump local compute {} does not calculate local vector", name);
|
||||||
if (argi.get_index1() > 0 && icompute->size_local_cols == 0)
|
if (argi.get_index1() > 0 && icompute->size_local_cols == 0)
|
||||||
error->all(FLERR,"Dump local compute {} does not calculate local array", name);
|
error->all(FLERR, errptr, "Dump local compute {} does not calculate local array", name);
|
||||||
if (argi.get_index1() > 0 && argi.get_index1() > icompute->size_local_cols)
|
if (argi.get_index1() > 0 && argi.get_index1() > icompute->size_local_cols)
|
||||||
error->all(FLERR,"Dump local compute {} vector is accessed out-of-range", name);
|
error->all(FLERR, errptr, "Dump local compute {} vector is accessed out-of-range{}",
|
||||||
|
name, utils::errorurl(20));
|
||||||
|
|
||||||
field2index[iarg] = add_compute(name);
|
field2index[iarg] = add_compute(name);
|
||||||
break;
|
break;
|
||||||
@ -490,15 +505,16 @@ void DumpLocal::parse_fields(int narg, char **arg)
|
|||||||
pack_choice[iarg] = &DumpLocal::pack_fix;
|
pack_choice[iarg] = &DumpLocal::pack_fix;
|
||||||
|
|
||||||
ifix = modify->get_fix_by_id(name);
|
ifix = modify->get_fix_by_id(name);
|
||||||
if (!ifix) error->all(FLERR,"Could not find dump local fix ID {}", name);
|
if (!ifix) error->all(FLERR, errptr, "Could not find dump local fix ID {}", name);
|
||||||
if (ifix->local_flag == 0)
|
if (ifix->local_flag == 0)
|
||||||
error->all(FLERR,"Dump local fix {} does not compute local info", name);
|
error->all(FLERR, errptr, "Dump local fix {} does not compute local info", name);
|
||||||
if (argi.get_dim() == 0 && ifix->size_local_cols > 0)
|
if (argi.get_dim() == 0 && ifix->size_local_cols > 0)
|
||||||
error->all(FLERR,"Dump local fix {} does not compute local vector", name);
|
error->all(FLERR, errptr, "Dump local fix {} does not compute local vector", name);
|
||||||
if (argi.get_index1() > 0 && ifix->size_local_cols == 0)
|
if (argi.get_index1() > 0 && ifix->size_local_cols == 0)
|
||||||
error->all(FLERR,"Dump local fix {} does not compute local array", name);
|
error->all(FLERR, errptr, "Dump local fix {} does not compute local array", name);
|
||||||
if (argi.get_index1() > 0 && argi.get_index1() > ifix->size_local_cols)
|
if (argi.get_index1() > 0 && argi.get_index1() > ifix->size_local_cols)
|
||||||
error->all(FLERR,"Dump local fix {} vector is accessed out-of-range", name);
|
error->all(FLERR, errptr, "Dump local fix {} vector is accessed out-of-range{}", name,
|
||||||
|
utils::errorurl(20));
|
||||||
|
|
||||||
field2index[iarg] = add_fix(name);
|
field2index[iarg] = add_fix(name);
|
||||||
break;
|
break;
|
||||||
@ -506,14 +522,14 @@ void DumpLocal::parse_fields(int narg, char **arg)
|
|||||||
case ArgInfo::NONE: // fallthrough
|
case ArgInfo::NONE: // fallthrough
|
||||||
case ArgInfo::UNKNOWN: // fallthrough
|
case ArgInfo::UNKNOWN: // fallthrough
|
||||||
default:
|
default:
|
||||||
error->all(FLERR,"Invalid attribute {} in dump local command",arg[iarg]);
|
error->all(FLERR, errptr, "Invalid attribute {} in dump local command",arg[iarg]);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (computefixflag == 0)
|
if (computefixflag == 0)
|
||||||
error->all(FLERR,"Dump local attributes contain no compute or fix");
|
error->all(FLERR, Error::NOPOINTER, "Dump local attributes contain no compute or fix");
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ----------------------------------------------------------------------
|
/* ----------------------------------------------------------------------
|
||||||
|
|||||||
@ -127,29 +127,40 @@ FixAveAtom::FixAveAtom(LAMMPS *lmp, int narg, char **arg) : Fix(lmp, narg, arg),
|
|||||||
|
|
||||||
if (val.which == ArgInfo::COMPUTE) {
|
if (val.which == ArgInfo::COMPUTE) {
|
||||||
val.val.c = modify->get_compute_by_id(val.id);
|
val.val.c = modify->get_compute_by_id(val.id);
|
||||||
if (!val.val.c) error->all(FLERR, val.iarg, "Compute ID {} for fix ave/atom does not exist", val.id);
|
if (!val.val.c)
|
||||||
|
error->all(FLERR, val.iarg, "Compute ID {} for fix ave/atom does not exist", val.id);
|
||||||
if (val.val.c->peratom_flag == 0)
|
if (val.val.c->peratom_flag == 0)
|
||||||
error->all(FLERR, val.iarg, "Fix ave/atom compute {} does not calculate per-atom values", val.id);
|
error->all(FLERR, val.iarg, "Fix ave/atom compute {} does not calculate per-atom values",
|
||||||
|
val.id);
|
||||||
if (val.argindex == 0 && val.val.c->size_peratom_cols != 0)
|
if (val.argindex == 0 && val.val.c->size_peratom_cols != 0)
|
||||||
error->all(FLERR, val.iarg, "Fix ave/atom compute {} does not calculate a per-atom vector", val.id);
|
error->all(FLERR, val.iarg, "Fix ave/atom compute {} does not calculate a per-atom vector",
|
||||||
|
val.id);
|
||||||
if (val.argindex && val.val.c->size_peratom_cols == 0)
|
if (val.argindex && val.val.c->size_peratom_cols == 0)
|
||||||
error->all(FLERR, val.iarg, "Fix ave/atom compute {} does not calculate a per-atom array", val.id);
|
error->all(FLERR, val.iarg, "Fix ave/atom compute {} does not calculate a per-atom array",
|
||||||
|
val.id);
|
||||||
if (val.argindex && val.argindex > val.val.c->size_peratom_cols)
|
if (val.argindex && val.argindex > val.val.c->size_peratom_cols)
|
||||||
error->all(FLERR, val.iarg, "Fix ave/atom compute {} array is accessed out-of-range", val.id);
|
error->all(FLERR, val.iarg, "Fix ave/atom compute {} array is accessed out-of-range{}",
|
||||||
|
val.id, utils::errorurl(20));
|
||||||
|
|
||||||
} else if (val.which == ArgInfo::FIX) {
|
} else if (val.which == ArgInfo::FIX) {
|
||||||
val.val.f = modify->get_fix_by_id(val.id);
|
val.val.f = modify->get_fix_by_id(val.id);
|
||||||
if (!val.val.f) error->all(FLERR, val.iarg, "Fix ID {} for fix ave/atom does not exist", val.id);
|
if (!val.val.f)
|
||||||
|
error->all(FLERR, val.iarg, "Fix ID {} for fix ave/atom does not exist", val.id);
|
||||||
if (val.val.f->peratom_flag == 0)
|
if (val.val.f->peratom_flag == 0)
|
||||||
error->all(FLERR, val.iarg, "Fix ave/atom fix {} does not calculate per-atom values", val.id);
|
error->all(FLERR, val.iarg, "Fix ave/atom fix {} does not calculate per-atom values",
|
||||||
|
val.id);
|
||||||
if (val.argindex == 0 && val.val.f->size_peratom_cols != 0)
|
if (val.argindex == 0 && val.val.f->size_peratom_cols != 0)
|
||||||
error->all(FLERR, val.iarg, "Fix ave/atom fix {} does not calculate a per-atom vector", val.id);
|
error->all(FLERR, val.iarg, "Fix ave/atom fix {} does not calculate a per-atom vector",
|
||||||
|
val.id);
|
||||||
if (val.argindex && val.val.f->size_peratom_cols == 0)
|
if (val.argindex && val.val.f->size_peratom_cols == 0)
|
||||||
error->all(FLERR, val.iarg, "Fix ave/atom fix {} does not calculate a per-atom array", val.id);
|
error->all(FLERR, val.iarg, "Fix ave/atom fix {} does not calculate a per-atom array",
|
||||||
|
val.id);
|
||||||
if (val.argindex && val.argindex > val.val.f->size_peratom_cols)
|
if (val.argindex && val.argindex > val.val.f->size_peratom_cols)
|
||||||
error->all(FLERR, val.iarg, "Fix ave/atom fix {} array is accessed out-of-range", val.id);
|
error->all(FLERR, val.iarg, "Fix ave/atom fix {} array is accessed out-of-range{}",
|
||||||
|
val.id, utils::errorurl(20));
|
||||||
if (nevery % val.val.f->peratom_freq)
|
if (nevery % val.val.f->peratom_freq)
|
||||||
error->all(FLERR, val.iarg, "Fix {} for fix ave/atom not computed at compatible time", val.id);
|
error->all(FLERR, val.iarg, "Fix {} for fix ave/atom not computed at compatible time{}",
|
||||||
|
val.id, utils::errorurl(7));
|
||||||
|
|
||||||
} else if (val.which == ArgInfo::VARIABLE) {
|
} else if (val.which == ArgInfo::VARIABLE) {
|
||||||
val.val.v = input->variable->find(val.id.c_str());
|
val.val.v = input->variable->find(val.id.c_str());
|
||||||
|
|||||||
@ -262,32 +262,40 @@ FixAveChunk::FixAveChunk(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
if (!val.val.c)
|
if (!val.val.c)
|
||||||
error->all(FLERR, val.iarg, "Compute ID {} for fix ave/chunk does not exist",val.id);
|
error->all(FLERR, val.iarg, "Compute ID {} for fix ave/chunk does not exist",val.id);
|
||||||
if (val.val.c->peratom_flag == 0)
|
if (val.val.c->peratom_flag == 0)
|
||||||
error->all(FLERR, val.iarg, "Fix ave/chunk compute {} does not calculate per-atom values",val.id);
|
error->all(FLERR, val.iarg, "Fix ave/chunk compute {} does not calculate per-atom values",
|
||||||
|
val.id);
|
||||||
if (val.argindex == 0 && (val.val.c->size_peratom_cols != 0))
|
if (val.argindex == 0 && (val.val.c->size_peratom_cols != 0))
|
||||||
error->all(FLERR, val.iarg, "Fix ave/chunk compute {} does not calculate a per-atom vector",val.id);
|
error->all(FLERR, val.iarg, "Fix ave/chunk compute {} does not calculate a per-atom vector",
|
||||||
|
val.id);
|
||||||
if (val.argindex && (val.val.c->size_peratom_cols == 0))
|
if (val.argindex && (val.val.c->size_peratom_cols == 0))
|
||||||
error->all(FLERR, val.iarg, "Fix ave/chunk compute {} does not calculate a per-atom array",val.id);
|
error->all(FLERR, val.iarg, "Fix ave/chunk compute {} does not calculate a per-atom array",
|
||||||
|
val.id);
|
||||||
if (val.argindex && (val.argindex > val.val.c->size_peratom_cols))
|
if (val.argindex && (val.argindex > val.val.c->size_peratom_cols))
|
||||||
error->all(FLERR, val.iarg, "Fix ave/chunk compute {} vector is accessed out-of-range",val.id);
|
error->all(FLERR, val.iarg, "Fix ave/chunk compute {} vector is accessed out-of-range{}",
|
||||||
|
val.id, utils::errorurl(20));
|
||||||
|
|
||||||
} else if (val.which == ArgInfo::FIX) {
|
} else if (val.which == ArgInfo::FIX) {
|
||||||
val.val.f = modify->get_fix_by_id(val.id);
|
val.val.f = modify->get_fix_by_id(val.id);
|
||||||
if (!val.val.f)
|
if (!val.val.f)
|
||||||
error->all(FLERR, val.iarg, "Fix ID {} for fix ave/chunk does not exist",val.id);
|
error->all(FLERR, val.iarg, "Fix ID {} for fix ave/chunk does not exist",val.id);
|
||||||
if (val.val.f->peratom_flag == 0)
|
if (val.val.f->peratom_flag == 0)
|
||||||
error->all(FLERR, val.iarg, "Fix ave/chunk fix {} does not calculate per-atom values",val.id);
|
error->all(FLERR, val.iarg, "Fix ave/chunk fix {} does not calculate per-atom values",
|
||||||
|
val.id);
|
||||||
if (val.argindex == 0 && (val.val.f->size_peratom_cols != 0))
|
if (val.argindex == 0 && (val.val.f->size_peratom_cols != 0))
|
||||||
error->all(FLERR, val.iarg, "Fix ave/chunk fix {} does not calculate a per-atom vector",val.id);
|
error->all(FLERR, val.iarg, "Fix ave/chunk fix {} does not calculate a per-atom vector",
|
||||||
|
val.id);
|
||||||
if (val.argindex && (val.val.f->size_peratom_cols == 0))
|
if (val.argindex && (val.val.f->size_peratom_cols == 0))
|
||||||
error->all(FLERR, val.iarg, "Fix ave/chunk fix {} does not calculate a per-atom array",val.id);
|
error->all(FLERR, val.iarg, "Fix ave/chunk fix {} does not calculate a per-atom array",
|
||||||
|
val.id);
|
||||||
if (val.argindex && val.argindex > val.val.f->size_peratom_cols)
|
if (val.argindex && val.argindex > val.val.f->size_peratom_cols)
|
||||||
error->all(FLERR, val.iarg, "Fix ave/chunk fix {} vector is accessed out-of-range",val.id);
|
error->all(FLERR, val.iarg, "Fix ave/chunk fix {} vector is accessed out-of-range{}",
|
||||||
|
val.id, utils::errorurl(20));
|
||||||
} else if (val.which == ArgInfo::VARIABLE) {
|
} else if (val.which == ArgInfo::VARIABLE) {
|
||||||
val.val.v = input->variable->find(val.id.c_str());
|
val.val.v = input->variable->find(val.id.c_str());
|
||||||
if (val.val.v < 0)
|
if (val.val.v < 0)
|
||||||
error->all(FLERR, val.iarg, "Variable name {} for fix ave/chunk does not exist",val.id);
|
error->all(FLERR, val.iarg, "Variable name {} for fix ave/chunk does not exist", val.id);
|
||||||
if (input->variable->atomstyle(val.val.v) == 0)
|
if (input->variable->atomstyle(val.val.v) == 0)
|
||||||
error->all(FLERR, val.iarg, "Fix ave/chunk variable {} is not atom-style variable",val.id);
|
error->all(FLERR, val.iarg, "Fix ave/chunk variable {} is not atom-style variable", val.id);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -297,8 +305,8 @@ FixAveChunk::FixAveChunk(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
|
|
||||||
cchunk = dynamic_cast<ComputeChunkAtom *>(modify->get_compute_by_id(idchunk));
|
cchunk = dynamic_cast<ComputeChunkAtom *>(modify->get_compute_by_id(idchunk));
|
||||||
if (!cchunk)
|
if (!cchunk)
|
||||||
error->all(FLERR, 6, "Chunk/atom compute {} does not exist or is incorrect style for fix ave/chunk",
|
error->all(FLERR, 6, "Chunk/atom compute {} does not exist or is incorrect style for "
|
||||||
idchunk);
|
"fix ave/chunk", idchunk);
|
||||||
|
|
||||||
if ((nrepeat > 1) || (ave == RUNNING) || (ave == WINDOW)) cchunk->lockcount++;
|
if ((nrepeat > 1) || (ave == RUNNING) || (ave == WINDOW)) cchunk->lockcount++;
|
||||||
lockforever = 0;
|
lockforever = 0;
|
||||||
@ -445,7 +453,8 @@ void FixAveChunk::init()
|
|||||||
if (biasflag) {
|
if (biasflag) {
|
||||||
tbias = modify->get_compute_by_id(id_bias);
|
tbias = modify->get_compute_by_id(id_bias);
|
||||||
if (!tbias)
|
if (!tbias)
|
||||||
error->all(FLERR,"Could not find compute ID {} for temperature bias", id_bias);
|
error->all(FLERR, Error::NOLASTLINE, "Could not find compute ID {} for temperature bias",
|
||||||
|
id_bias);
|
||||||
}
|
}
|
||||||
|
|
||||||
for (auto &val : values) {
|
for (auto &val : values) {
|
||||||
@ -460,8 +469,8 @@ void FixAveChunk::init()
|
|||||||
error->all(FLERR, Error::NOLASTLINE, "Fix ID {} for fix ave/chunk does not exist", val.id);
|
error->all(FLERR, Error::NOLASTLINE, "Fix ID {} for fix ave/chunk does not exist", val.id);
|
||||||
|
|
||||||
if (nevery % val.val.f->peratom_freq)
|
if (nevery % val.val.f->peratom_freq)
|
||||||
error->all(FLERR, Error::NOLASTLINE, "Fix {} for fix ave/chunk not computed at compatible time",
|
error->all(FLERR, Error::NOLASTLINE, "Fix {} for fix ave/chunk not computed at "
|
||||||
val.id);
|
"compatible time{}", val.id, utils::errorurl(7));
|
||||||
|
|
||||||
} else if (val.which == ArgInfo::VARIABLE) {
|
} else if (val.which == ArgInfo::VARIABLE) {
|
||||||
val.val.v = input->variable->find(val.id.c_str());
|
val.val.v = input->variable->find(val.id.c_str());
|
||||||
|
|||||||
@ -55,9 +55,10 @@ FixAveCorrelate::FixAveCorrelate(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
|
|
||||||
// expand args if any have wildcard character "*"
|
// expand args if any have wildcard character "*"
|
||||||
|
|
||||||
const int ioffset = 6;
|
int ioffset = 6;
|
||||||
int expand = 0;
|
int expand = 0;
|
||||||
char **earg;
|
char **earg;
|
||||||
|
char **oarg = arg;
|
||||||
int *amap = nullptr;
|
int *amap = nullptr;
|
||||||
int nargnew = utils::expand_args(FLERR, narg - ioffset, &arg[ioffset], 0, earg, lmp, &amap);
|
int nargnew = utils::expand_args(FLERR, narg - ioffset, &arg[ioffset], 0, earg, lmp, &amap);
|
||||||
|
|
||||||
@ -99,7 +100,12 @@ FixAveCorrelate::FixAveCorrelate(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
char *title2 = nullptr;
|
char *title2 = nullptr;
|
||||||
char *title3 = nullptr;
|
char *title3 = nullptr;
|
||||||
|
|
||||||
|
for (int i = 0; i < narg; ++i) {
|
||||||
|
if (strcmp(oarg[i],arg[iarg]) == 0)
|
||||||
|
ioffset = i - iarg;
|
||||||
|
}
|
||||||
while (iarg < nargnew) {
|
while (iarg < nargnew) {
|
||||||
|
int errptr = iarg + ioffset;
|
||||||
if (strcmp(arg[iarg],"type") == 0) {
|
if (strcmp(arg[iarg],"type") == 0) {
|
||||||
if (iarg+2 > nargnew) utils::missing_cmd_args(FLERR, "fix ave/correlate type", error);
|
if (iarg+2 > nargnew) utils::missing_cmd_args(FLERR, "fix ave/correlate type", error);
|
||||||
if (strcmp(arg[iarg+1],"auto") == 0) type = AUTO;
|
if (strcmp(arg[iarg+1],"auto") == 0) type = AUTO;
|
||||||
@ -109,13 +115,13 @@ FixAveCorrelate::FixAveCorrelate(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
else if (strcmp(arg[iarg+1],"auto/lower") == 0) type = AUTOLOWER;
|
else if (strcmp(arg[iarg+1],"auto/lower") == 0) type = AUTOLOWER;
|
||||||
else if (strcmp(arg[iarg+1],"full") == 0) type = FULL;
|
else if (strcmp(arg[iarg+1],"full") == 0) type = FULL;
|
||||||
else if (strcmp(arg[iarg+1], "first") == 0) type = FIRST;
|
else if (strcmp(arg[iarg+1], "first") == 0) type = FIRST;
|
||||||
else error->all(FLERR, iarg+1, "Unknown fix ave/correlate type: {}");
|
else error->all(FLERR, errptr + 1, "Unknown fix ave/correlate type: {}", arg[iarg+1]);
|
||||||
iarg += 2;
|
iarg += 2;
|
||||||
} else if (strcmp(arg[iarg],"ave") == 0) {
|
} else if (strcmp(arg[iarg],"ave") == 0) {
|
||||||
if (iarg+2 > nargnew) utils::missing_cmd_args(FLERR, "fix ave/correlate ave", error);
|
if (iarg+2 > nargnew) utils::missing_cmd_args(FLERR, "fix ave/correlate ave", error);
|
||||||
if (strcmp(arg[iarg+1],"one") == 0) ave = ONE;
|
if (strcmp(arg[iarg+1],"one") == 0) ave = ONE;
|
||||||
else if (strcmp(arg[iarg+1],"running") == 0) ave = RUNNING;
|
else if (strcmp(arg[iarg+1],"running") == 0) ave = RUNNING;
|
||||||
else error->all(FLERR, iarg+1, "Unknown fix ave/correlate ave mode: {}", arg[iarg+1]);
|
else error->all(FLERR, errptr+1, "Unknown fix ave/correlate ave mode: {}", arg[iarg+1]);
|
||||||
iarg += 2;
|
iarg += 2;
|
||||||
} else if (strcmp(arg[iarg],"start") == 0) {
|
} else if (strcmp(arg[iarg],"start") == 0) {
|
||||||
if (iarg+2 > nargnew) utils::missing_cmd_args(FLERR, "fix ave/correlate start", error);
|
if (iarg+2 > nargnew) utils::missing_cmd_args(FLERR, "fix ave/correlate start", error);
|
||||||
@ -130,7 +136,7 @@ FixAveCorrelate::FixAveCorrelate(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
if (comm->me == 0) {
|
if (comm->me == 0) {
|
||||||
fp = fopen(arg[iarg+1],"w");
|
fp = fopen(arg[iarg+1],"w");
|
||||||
if (fp == nullptr)
|
if (fp == nullptr)
|
||||||
error->one(FLERR, iarg+1, "Cannot open fix ave/correlate file {}:"" {}", arg[iarg+1],
|
error->one(FLERR, errptr+1, "Cannot open fix ave/correlate file {}:"" {}", arg[iarg+1],
|
||||||
utils::getsyserror());
|
utils::getsyserror());
|
||||||
}
|
}
|
||||||
iarg += 2;
|
iarg += 2;
|
||||||
@ -152,7 +158,7 @@ FixAveCorrelate::FixAveCorrelate(LAMMPS *lmp, int narg, char **arg) :
|
|||||||
delete[] title3;
|
delete[] title3;
|
||||||
title3 = utils::strdup(arg[iarg+1]);
|
title3 = utils::strdup(arg[iarg+1]);
|
||||||
iarg += 2;
|
iarg += 2;
|
||||||
} else error->all(FLERR, iarg, "Unkown fix ave/correlate keyword: {}", arg[iarg]);
|
} else error->all(FLERR, errptr, "Unkown fix ave/correlate keyword: {}", arg[iarg]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// setup and error check
|
// setup and error check
|
||||||
|
|||||||
Reference in New Issue
Block a user