Introduce nblib nonbonded force calculator impl class
[alexxy/gromacs.git] / api / nblib / tests / nbkernelsystem.cpp
index 15163e1384d60efdbd8c39f67cf64176440a7214..96c874a39361ebd49dbc23e75a830e4b940c2b2c 100644 (file)
@@ -45,8 +45,7 @@
 #include <gtest/gtest.h>
 
 #include "gromacs/topology/exclusionblocks.h"
-#include "nblib/gmxcalculator.h"
-#include "nblib/gmxsetup.h"
+#include "nblib/gmxcalculatorcpu.h"
 #include "nblib/integrator.h"
 #include "nblib/tests/testhelpers.h"
 #include "nblib/tests/testsystems.h"
@@ -68,12 +67,14 @@ TEST(NBlibTest, SpcMethanolForcesAreCorrect)
 
     SpcMethanolSimulationStateBuilder spcMethanolSystemBuilder;
 
-    auto simState        = spcMethanolSystemBuilder.setupSimulationState();
-    auto forceCalculator = nblib::setupGmxForceCalculator(
-            simState.topology(), simState.coordinates(), simState.box(), options);
+    auto simState = spcMethanolSystemBuilder.setupSimulationState();
+
+    auto forceCalculator = setupGmxForceCalculatorCpu(simState.topology(), options);
+
+    forceCalculator->updatePairlist(simState.coordinates(), simState.box());
 
     gmx::ArrayRef<Vec3> forces(simState.forces());
-    ASSERT_NO_THROW(forceCalculator->compute(simState.coordinates(), forces));
+    ASSERT_NO_THROW(forceCalculator->compute(simState.coordinates(), simState.box(), forces));
 
     RefDataChecker forcesOutputTest(5e-5);
     forcesOutputTest.testArrays<Vec3>(forces, "SPC-methanol forces");
@@ -86,12 +87,14 @@ TEST(NBlibTest, ExpectedNumberOfForces)
 
     SpcMethanolSimulationStateBuilder spcMethanolSystemBuilder;
 
-    auto simState        = spcMethanolSystemBuilder.setupSimulationState();
-    auto forceCalculator = nblib::setupGmxForceCalculator(
-            simState.topology(), simState.coordinates(), simState.box(), options);
+    auto simState = spcMethanolSystemBuilder.setupSimulationState();
+
+    auto forceCalculator = setupGmxForceCalculatorCpu(simState.topology(), options);
+
+    forceCalculator->updatePairlist(simState.coordinates(), simState.box());
 
     gmx::ArrayRef<Vec3> forces(simState.forces());
-    forceCalculator->compute(simState.coordinates(), forces);
+    forceCalculator->compute(simState.coordinates(), simState.box(), forces);
     EXPECT_EQ(simState.topology().numParticles(), forces.size());
 }
 
@@ -103,18 +106,19 @@ TEST(NBlibTest, CanIntegrateSystem)
 
     SpcMethanolSimulationStateBuilder spcMethanolSystemBuilder;
 
-    auto simState        = spcMethanolSystemBuilder.setupSimulationState();
-    auto forceCalculator = nblib::setupGmxForceCalculator(
-            simState.topology(), simState.coordinates(), simState.box(), options);
+    auto simState = spcMethanolSystemBuilder.setupSimulationState();
+
+    auto forceCalculator = setupGmxForceCalculatorCpu(simState.topology(), options);
+
+    forceCalculator->updatePairlist(simState.coordinates(), simState.box());
 
     LeapFrog integrator(simState.topology(), simState.box());
 
     for (int iter = 0; iter < options.numIterations; iter++)
     {
         gmx::ArrayRef<Vec3> forces(simState.forces());
-        forceCalculator->compute(simState.coordinates(), simState.forces());
-        EXPECT_NO_THROW(integrator.integrate(
-                1.0, simState.coordinates(), simState.velocities(), simState.forces()));
+        forceCalculator->compute(simState.coordinates(), simState.box(), forces);
+        EXPECT_NO_THROW(integrator.integrate(1.0, simState.coordinates(), simState.velocities(), forces));
     }
 }
 
@@ -139,15 +143,18 @@ TEST(NBlibTest, UpdateChangesForces)
 
     SpcMethanolSimulationStateBuilder spcMethanolSystemBuilder;
 
-    auto simState        = spcMethanolSystemBuilder.setupSimulationState();
-    auto forceCalculator = nblib::setupGmxForceCalculator(
-            simState.topology(), simState.coordinates(), simState.box(), options);
+    auto simState = spcMethanolSystemBuilder.setupSimulationState();
+
+    auto forceCalculator = setupGmxForceCalculatorCpu(simState.topology(), options);
+
+    forceCalculator->updatePairlist(simState.coordinates(), simState.box());
 
     LeapFrog integrator(simState.topology(), simState.box());
 
     // step 1
     gmx::ArrayRef<Vec3> forces(simState.forces());
-    forceCalculator->compute(simState.coordinates(), simState.forces());
+
+    forceCalculator->compute(simState.coordinates(), simState.box(), simState.forces());
 
     // copy computed forces to another array
     std::vector<Vec3> forces_1(forces.size());
@@ -157,7 +164,7 @@ TEST(NBlibTest, UpdateChangesForces)
     zeroCartesianArray(forces);
 
     // check if forces change without update step
-    forceCalculator->compute(simState.coordinates(), forces);
+    forceCalculator->compute(simState.coordinates(), simState.box(), forces);
 
     // check if forces change without update
     for (size_t i = 0; i < forces_1.size(); i++)
@@ -175,7 +182,8 @@ TEST(NBlibTest, UpdateChangesForces)
     zeroCartesianArray(forces);
 
     // step 2
-    forceCalculator->compute(simState.coordinates(), forces);
+    forceCalculator->compute(simState.coordinates(), simState.box(), forces);
+
     std::vector<Vec3> forces_2(forces.size());
     std::copy(forces.begin(), forces.end(), begin(forces_2));
 
@@ -197,12 +205,14 @@ TEST(NBlibTest, ArgonOplsaForcesAreCorrect)
 
     ArgonSimulationStateBuilder argonSystemBuilder(fftypes::OPLSA);
 
-    auto simState        = argonSystemBuilder.setupSimulationState();
-    auto forceCalculator = nblib::setupGmxForceCalculator(
-            simState.topology(), simState.coordinates(), simState.box(), options);
+    auto simState = argonSystemBuilder.setupSimulationState();
+
+    auto forceCalculator = setupGmxForceCalculatorCpu(simState.topology(), options);
+
+    forceCalculator->updatePairlist(simState.coordinates(), simState.box());
 
     gmx::ArrayRef<Vec3> testForces(simState.forces());
-    forceCalculator->compute(simState.coordinates(), simState.forces());
+    forceCalculator->compute(simState.coordinates(), simState.box(), simState.forces());
 
     RefDataChecker forcesOutputTest(1e-7);
     forcesOutputTest.testArrays<Vec3>(testForces, "Argon forces");
@@ -216,14 +226,16 @@ TEST(NBlibTest, ArgonGromos43A1ForcesAreCorrect)
 
     ArgonSimulationStateBuilder argonSystemBuilder(fftypes::GROMOS43A1);
 
-    auto simState        = argonSystemBuilder.setupSimulationState();
-    auto forceCalculator = nblib::setupGmxForceCalculator(
-            simState.topology(), simState.coordinates(), simState.box(), options);
+    auto simState = argonSystemBuilder.setupSimulationState();
+
+    auto forceCalculator = setupGmxForceCalculatorCpu(simState.topology(), options);
+
+    forceCalculator->updatePairlist(simState.coordinates(), simState.box());
 
     gmx::ArrayRef<Vec3> testForces(simState.forces());
-    forceCalculator->compute(simState.coordinates(), simState.forces());
+    forceCalculator->compute(simState.coordinates(), simState.box(), simState.forces());
 
-    RefDataChecker forcesOutputTest(1e-7);
+    RefDataChecker forcesOutputTest;
     forcesOutputTest.testArrays<Vec3>(testForces, "Argon forces");
 }