Implement pull for modular simulator
[alexxy/gromacs.git] / src / gromacs / modularsimulator / modularsimulator.cpp
index d3fce2c0b5563bf8bce6df5c8821aaf171f55e58..fac5ea0d86bfd2c0db059fe66598559d18d15617 100644 (file)
@@ -84,6 +84,7 @@
 #include "mttk.h"
 #include "nosehooverchains.h"
 #include "parrinellorahmanbarostat.h"
+#include "pullelement.h"
 #include "simulatoralgorithm.h"
 #include "statepropagatordata.h"
 #include "velocityscalingtemperaturecoupling.h"
@@ -133,6 +134,12 @@ void ModularSimulator::addIntegrationElements(ModularSimulatorAlgorithmBuilder*
         {
             builder->add<ConstraintsElement<ConstraintVariable::Positions>>();
         }
+
+        if (legacySimulatorData_->inputrec->bPull)
+        {
+            builder->add<PullElement>();
+        }
+
         builder->add<ComputeGlobalsElement<ComputeGlobalsAlgorithm::LeapFrog>>();
         if (legacySimulatorData_->inputrec->epc == PressureCoupling::ParrinelloRahman)
         {
@@ -181,6 +188,12 @@ void ModularSimulator::addIntegrationElements(ModularSimulatorAlgorithmBuilder*
         {
             builder->add<ConstraintsElement<ConstraintVariable::Positions>>();
         }
+
+        if (legacySimulatorData_->inputrec->bPull)
+        {
+            builder->add<PullElement>();
+        }
+
         builder->add<ComputeGlobalsElement<ComputeGlobalsAlgorithm::VelocityVerlet>>();
         if (legacySimulatorData_->inputrec->epc == PressureCoupling::ParrinelloRahman)
         {
@@ -304,6 +317,12 @@ void ModularSimulator::addIntegrationElements(ModularSimulatorAlgorithmBuilder*
         {
             builder->add<ConstraintsElement<ConstraintVariable::Positions>>();
         }
+
+        if (legacySimulatorData_->inputrec->bPull)
+        {
+            builder->add<PullElement>();
+        }
+
         builder->add<ComputeGlobalsElement<ComputeGlobalsAlgorithm::VelocityVerlet>>();
 
         // Propagate box from t to t+dt
@@ -380,9 +399,6 @@ bool ModularSimulator::isInputCompatible(bool                             exitOn
     isInputCompatible =
             isInputCompatible
             && conditionalAssert(!doRerun, "Rerun is not supported by the modular simulator.");
-    isInputCompatible = isInputCompatible
-                        && conditionalAssert(!inputrec->bPull,
-                                             "Pulling is not supported by the modular simulator.");
     isInputCompatible =
             isInputCompatible
             && conditionalAssert(inputrec->cos_accel == 0.0,