modernize check for fix drude. print warning about order of fixes with rigid.

This commit is contained in:
Axel Kohlmeyer
2023-03-23 15:19:51 -04:00
parent 3b3325076a
commit bb1f1a7593

View File

@ -50,11 +50,22 @@ FixDrudeTransform<inverse>::~FixDrudeTransform()
template <bool inverse>
void FixDrudeTransform<inverse>::init()
{
int ifix;
for (ifix = 0; ifix < modify->nfix; ifix++)
if (strcmp(modify->fix[ifix]->style,"drude") == 0) break;
if (ifix == modify->nfix) error->all(FLERR, "fix drude/transform requires fix drude");
fix_drude = (FixDrude *) modify->fix[ifix];
fix_drude = nullptr;
std::string substyle = "direct";
if (inverse) substyle = "inverse";
auto fixes = modify->get_fix_by_style("^drude");
if (fixes.size() > 0) fix_drude = dynamic_cast<FixDrude *>(fixes[0]);
if (!fix_drude)
error->all(FLERR, "fix drude/transform/{} requires fix drude", substyle);
int before_or_after = -1;
for (auto &ifix : modify->get_fix_list()) {
if ((ifix == this) && (before_or_after < 0)) before_or_after = 0;
if (utils::strmatch(ifix->style, "^rigid") && (before_or_after < 0)) before_or_after = 1;
}
if ((comm->me == 0) && (before_or_after > 0))
error->warning(FLERR, "fix drude/transform/{} should come before any rigid fixes", substyle);
}
/* ---------------------------------------------------------------------- */