From bb1f1a7593bb374060c0af4e1abcc59edee00b0e Mon Sep 17 00:00:00 2001 From: Axel Kohlmeyer Date: Thu, 23 Mar 2023 15:19:51 -0400 Subject: [PATCH] modernize check for fix drude. print warning about order of fixes with rigid. --- src/DRUDE/fix_drude_transform.cpp | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/src/DRUDE/fix_drude_transform.cpp b/src/DRUDE/fix_drude_transform.cpp index a301a0cbea..396a8cfa27 100644 --- a/src/DRUDE/fix_drude_transform.cpp +++ b/src/DRUDE/fix_drude_transform.cpp @@ -50,11 +50,22 @@ FixDrudeTransform::~FixDrudeTransform() template void FixDrudeTransform::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(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); } /* ---------------------------------------------------------------------- */