#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"
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");
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());
}
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));
}
}
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());
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++)
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));
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");
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");
}