Commit b06fc4a7 authored by Peter Eastman's avatar Peter Eastman
Browse files

Moved SFMT into libraries folder, and restructured it to allow multiple...

Moved SFMT into libraries folder, and restructured it to allow multiple independent random number generators
parent 625180a6
...@@ -42,7 +42,7 @@ ...@@ -42,7 +42,7 @@
#include "openmm/PeriodicTorsionForce.h" #include "openmm/PeriodicTorsionForce.h"
#include "openmm/System.h" #include "openmm/System.h"
#include "openmm/VerletIntegrator.h" #include "openmm/VerletIntegrator.h"
#include "../src/sfmt/SFMT.h" #include "sfmt/SFMT.h"
#include <iostream> #include <iostream>
#include <vector> #include <vector>
...@@ -105,7 +105,9 @@ void testHbond() { ...@@ -105,7 +105,9 @@ void testHbond() {
// Set the atoms in various positions, and verify that both systems give identical forces and energy. // Set the atoms in various positions, and verify that both systems give identical forces and energy.
init_gen_rand(0); OpenMM_SFMT::SFMT sfmt;
init_gen_rand(0, sfmt);
vector<Vec3> positions(5); vector<Vec3> positions(5);
VerletIntegrator integrator1(0.01); VerletIntegrator integrator1(0.01);
VerletIntegrator integrator2(0.01); VerletIntegrator integrator2(0.01);
...@@ -113,7 +115,7 @@ void testHbond() { ...@@ -113,7 +115,7 @@ void testHbond() {
Context c1(customSystem, integrator1, platform); Context c1(customSystem, integrator1, platform);
Context c2(standardSystem, integrator2, platform); Context c2(standardSystem, integrator2, platform);
for (int j = 0; j < (int) positions.size(); j++) for (int j = 0; j < (int) positions.size(); j++)
positions[j] = Vec3(2.0*genrand_real2(), 2.0*genrand_real2(), 2.0*genrand_real2()); positions[j] = Vec3(2.0*genrand_real2(sfmt), 2.0*genrand_real2(sfmt), 2.0*genrand_real2(sfmt));
c1.setPositions(positions); c1.setPositions(positions);
c2.setPositions(positions); c2.setPositions(positions);
State s1 = c1.getState(State::Forces | State::Energy); State s1 = c1.getState(State::Forces | State::Energy);
......
...@@ -35,7 +35,7 @@ ...@@ -35,7 +35,7 @@
*/ */
#include "../../../tests/AssertionUtilities.h" #include "../../../tests/AssertionUtilities.h"
#include "../src/sfmt/SFMT.h" #include "sfmt/SFMT.h"
#include "openmm/Context.h" #include "openmm/Context.h"
#include "ReferencePlatform.h" #include "ReferencePlatform.h"
#include "openmm/CustomNonbondedForce.h" #include "openmm/CustomNonbondedForce.h"
...@@ -256,7 +256,9 @@ void testCoulombLennardJones() { ...@@ -256,7 +256,9 @@ void testCoulombLennardJones() {
customNonbonded->addPerParticleParameter("eps"); customNonbonded->addPerParticleParameter("eps");
vector<Vec3> positions(numParticles); vector<Vec3> positions(numParticles);
vector<Vec3> velocities(numParticles); vector<Vec3> velocities(numParticles);
init_gen_rand(0); OpenMM_SFMT::SFMT sfmt;
init_gen_rand(0, sfmt);
vector<double> params(3); vector<double> params(3);
for (int i = 0; i < numMolecules; i++) { for (int i = 0; i < numMolecules; i++) {
if (i < numMolecules/2) { if (i < numMolecules/2) {
...@@ -281,10 +283,10 @@ void testCoulombLennardJones() { ...@@ -281,10 +283,10 @@ void testCoulombLennardJones() {
params[1] = 0.1; params[1] = 0.1;
customNonbonded->addParticle(params); customNonbonded->addParticle(params);
} }
positions[2*i] = Vec3(boxSize*genrand_real2(), boxSize*genrand_real2(), boxSize*genrand_real2()); positions[2*i] = Vec3(boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt), boxSize*genrand_real2(sfmt));
positions[2*i+1] = Vec3(positions[2*i][0]+1.0, positions[2*i][1], positions[2*i][2]); positions[2*i+1] = Vec3(positions[2*i][0]+1.0, positions[2*i][1], positions[2*i][2]);
velocities[2*i] = Vec3(genrand_real2(), genrand_real2(), genrand_real2()); velocities[2*i] = Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt));
velocities[2*i+1] = Vec3(genrand_real2(), genrand_real2(), genrand_real2()); velocities[2*i+1] = Vec3(genrand_real2(sfmt), genrand_real2(sfmt), genrand_real2(sfmt));
standardNonbonded->addException(2*i, 2*i+1, 0.0, 1.0, 0.0); standardNonbonded->addException(2*i, 2*i+1, 0.0, 1.0, 0.0);
customNonbonded->addExclusion(2*i, 2*i+1); customNonbonded->addExclusion(2*i, 2*i+1);
} }
......
...@@ -40,7 +40,7 @@ ...@@ -40,7 +40,7 @@
#include "openmm/PeriodicTorsionForce.h" #include "openmm/PeriodicTorsionForce.h"
#include "openmm/System.h" #include "openmm/System.h"
#include "openmm/VerletIntegrator.h" #include "openmm/VerletIntegrator.h"
#include "../src/sfmt/SFMT.h" #include "sfmt/SFMT.h"
#include <iostream> #include <iostream>
#include <vector> #include <vector>
...@@ -89,7 +89,9 @@ void testTorsions() { ...@@ -89,7 +89,9 @@ void testTorsions() {
// Set the atoms in various positions, and verify that both systems give identical forces and energy. // Set the atoms in various positions, and verify that both systems give identical forces and energy.
init_gen_rand(0); OpenMM_SFMT::SFMT sfmt;
init_gen_rand(0, sfmt);
vector<Vec3> positions(5); vector<Vec3> positions(5);
VerletIntegrator integrator1(0.01); VerletIntegrator integrator1(0.01);
VerletIntegrator integrator2(0.01); VerletIntegrator integrator2(0.01);
...@@ -97,7 +99,7 @@ void testTorsions() { ...@@ -97,7 +99,7 @@ void testTorsions() {
Context c1(customSystem, integrator1, platform); Context c1(customSystem, integrator1, platform);
Context c2(harmonicSystem, integrator2, platform); Context c2(harmonicSystem, integrator2, platform);
for (int j = 0; j < (int) positions.size(); j++) for (int j = 0; j < (int) positions.size(); j++)
positions[j] = Vec3(5.0*genrand_real2(), 5.0*genrand_real2(), 5.0*genrand_real2()); positions[j] = Vec3(5.0*genrand_real2(sfmt), 5.0*genrand_real2(sfmt), 5.0*genrand_real2(sfmt));
c1.setPositions(positions); c1.setPositions(positions);
c2.setPositions(positions); c2.setPositions(positions);
State s1 = c1.getState(State::Forces | State::Energy); State s1 = c1.getState(State::Forces | State::Energy);
......
...@@ -40,7 +40,7 @@ ...@@ -40,7 +40,7 @@
#include "openmm/System.h" #include "openmm/System.h"
#include "openmm/VerletIntegrator.h" #include "openmm/VerletIntegrator.h"
#include "../src/SimTKUtilities/SimTKOpenMMRealType.h" #include "../src/SimTKUtilities/SimTKOpenMMRealType.h"
#include "../src/sfmt/SFMT.h" #include "sfmt/SFMT.h"
#include "openmm/HarmonicBondForce.h" #include "openmm/HarmonicBondForce.h"
#include <iostream> #include <iostream>
#include <vector> #include <vector>
...@@ -312,11 +312,13 @@ void testErrorTolerance(NonbondedForce::NonbondedMethod method) { ...@@ -312,11 +312,13 @@ void testErrorTolerance(NonbondedForce::NonbondedMethod method) {
NonbondedForce* force = new NonbondedForce(); NonbondedForce* force = new NonbondedForce();
system.addForce(force); system.addForce(force);
vector<Vec3> positions(numParticles); vector<Vec3> positions(numParticles);
init_gen_rand(0); OpenMM_SFMT::SFMT sfmt;
init_gen_rand(0, sfmt);
for (int i = 0; i < numParticles; i++) { for (int i = 0; i < numParticles; i++) {
system.addParticle(1.0); system.addParticle(1.0);
force->addParticle(-1.0+i*2.0/(numParticles-1), 1.0, 0.0); force->addParticle(-1.0+i*2.0/(numParticles-1), 1.0, 0.0);
positions[i] = Vec3(boxWidth*genrand_real2(), boxWidth*genrand_real2(), boxWidth*genrand_real2()); positions[i] = Vec3(boxWidth*genrand_real2(sfmt), boxWidth*genrand_real2(sfmt), boxWidth*genrand_real2(sfmt));
} }
force->setNonbondedMethod(method); force->setNonbondedMethod(method);
ReferencePlatform platform; ReferencePlatform platform;
......
...@@ -41,7 +41,7 @@ ...@@ -41,7 +41,7 @@
#include "openmm/LangevinIntegrator.h" #include "openmm/LangevinIntegrator.h"
#include "openmm/NonbondedForce.h" #include "openmm/NonbondedForce.h"
#include "../src/SimTKUtilities/SimTKOpenMMRealType.h" #include "../src/SimTKUtilities/SimTKOpenMMRealType.h"
#include "../src/sfmt/SFMT.h" #include "sfmt/SFMT.h"
#include <iostream> #include <iostream>
#include <vector> #include <vector>
...@@ -144,9 +144,11 @@ void testForce() { ...@@ -144,9 +144,11 @@ void testForce() {
// Set random positions for all the particles. // Set random positions for all the particles.
vector<Vec3> positions(numParticles); vector<Vec3> positions(numParticles);
init_gen_rand(0); OpenMM_SFMT::SFMT sfmt;
init_gen_rand(0, sfmt);
for (int i = 0; i < numParticles; ++i) for (int i = 0; i < numParticles; ++i)
positions[i] = Vec3(5.0*genrand_real2(), 5.0*genrand_real2(), 5.0*genrand_real2()); positions[i] = Vec3(5.0*genrand_real2(sfmt), 5.0*genrand_real2(sfmt), 5.0*genrand_real2(sfmt));
context.setPositions(positions); context.setPositions(positions);
State state = context.getState(State::Forces | State::Energy); State state = context.getState(State::Forces | State::Energy);
......
...@@ -43,7 +43,7 @@ ...@@ -43,7 +43,7 @@
#include "openmm/LangevinIntegrator.h" #include "openmm/LangevinIntegrator.h"
#include "openmm/NonbondedForce.h" #include "openmm/NonbondedForce.h"
#include "../src/SimTKUtilities/SimTKOpenMMRealType.h" #include "../src/SimTKUtilities/SimTKOpenMMRealType.h"
#include "../src/sfmt/SFMT.h" #include "sfmt/SFMT.h"
#include <iostream> #include <iostream>
#include <vector> #include <vector>
......
...@@ -41,7 +41,7 @@ ...@@ -41,7 +41,7 @@
#include "openmm/System.h" #include "openmm/System.h"
#include "openmm/LangevinIntegrator.h" #include "openmm/LangevinIntegrator.h"
#include "../src/SimTKUtilities/SimTKOpenMMRealType.h" #include "../src/SimTKUtilities/SimTKOpenMMRealType.h"
#include "../src/sfmt/SFMT.h" #include "sfmt/SFMT.h"
#include <iostream> #include <iostream>
#include <vector> #include <vector>
...@@ -147,10 +147,12 @@ void testConstraints() { ...@@ -147,10 +147,12 @@ void testConstraints() {
Context context(system, integrator, platform); Context context(system, integrator, platform);
vector<Vec3> positions(numParticles); vector<Vec3> positions(numParticles);
vector<Vec3> velocities(numParticles); vector<Vec3> velocities(numParticles);
init_gen_rand(0); OpenMM_SFMT::SFMT sfmt;
init_gen_rand(0, sfmt);
for (int i = 0; i < numParticles; ++i) { for (int i = 0; i < numParticles; ++i) {
positions[i] = Vec3(i/2, (i+1)/2, 0); positions[i] = Vec3(i/2, (i+1)/2, 0);
velocities[i] = Vec3(genrand_real2()-0.5, genrand_real2()-0.5, genrand_real2()-0.5); velocities[i] = Vec3(genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5);
} }
context.setPositions(positions); context.setPositions(positions);
context.setVelocities(velocities); context.setVelocities(velocities);
......
...@@ -31,7 +31,7 @@ ...@@ -31,7 +31,7 @@
#include "../../../tests/AssertionUtilities.h" #include "../../../tests/AssertionUtilities.h"
#include "../src/SimTKReference/ReferenceNeighborList.h" #include "../src/SimTKReference/ReferenceNeighborList.h"
#include "../src/sfmt/SFMT.h" #include "sfmt/SFMT.h"
#include <cassert> #include <cassert>
#include <iostream> #include <iostream>
...@@ -103,12 +103,14 @@ void testPeriodic() { ...@@ -103,12 +103,14 @@ void testPeriodic() {
const double cutoff = 3.0; const double cutoff = 3.0;
const RealOpenMM periodicBoxSize[3] = {20.0, 15.0, 22.0}; const RealOpenMM periodicBoxSize[3] = {20.0, 15.0, 22.0};
RealOpenMM* particleList[numParticles]; RealOpenMM* particleList[numParticles];
init_gen_rand(0); OpenMM_SFMT::SFMT sfmt;
init_gen_rand(0, sfmt);
for (int i = 0; i <numParticles; i++) { for (int i = 0; i <numParticles; i++) {
particleList[i] = new RealOpenMM[3]; particleList[i] = new RealOpenMM[3];
particleList[i][0] = (RealOpenMM) (genrand_real2()*periodicBoxSize[0]*3); particleList[i][0] = (RealOpenMM) (genrand_real2(sfmt)*periodicBoxSize[0]*3);
particleList[i][1] = (RealOpenMM) (genrand_real2()*periodicBoxSize[1]*3); particleList[i][1] = (RealOpenMM) (genrand_real2(sfmt)*periodicBoxSize[1]*3);
particleList[i][2] = (RealOpenMM) (genrand_real2()*periodicBoxSize[2]*3); particleList[i][2] = (RealOpenMM) (genrand_real2(sfmt)*periodicBoxSize[2]*3);
} }
vector<set<int> > exclusions(numParticles); vector<set<int> > exclusions(numParticles);
NeighborList neighborList; NeighborList neighborList;
......
...@@ -41,7 +41,7 @@ ...@@ -41,7 +41,7 @@
#include "openmm/System.h" #include "openmm/System.h"
#include "openmm/VariableLangevinIntegrator.h" #include "openmm/VariableLangevinIntegrator.h"
#include "../src/SimTKUtilities/SimTKOpenMMRealType.h" #include "../src/SimTKUtilities/SimTKOpenMMRealType.h"
#include "../src/sfmt/SFMT.h" #include "sfmt/SFMT.h"
#include <iostream> #include <iostream>
#include <vector> #include <vector>
...@@ -148,10 +148,12 @@ void testConstraints() { ...@@ -148,10 +148,12 @@ void testConstraints() {
Context context(system, integrator, platform); Context context(system, integrator, platform);
vector<Vec3> positions(numParticles); vector<Vec3> positions(numParticles);
vector<Vec3> velocities(numParticles); vector<Vec3> velocities(numParticles);
init_gen_rand(0); OpenMM_SFMT::SFMT sfmt;
init_gen_rand(0, sfmt);
for (int i = 0; i < numParticles; ++i) { for (int i = 0; i < numParticles; ++i) {
positions[i] = Vec3(i/2, (i+1)/2, 0); positions[i] = Vec3(i/2, (i+1)/2, 0);
velocities[i] = Vec3(genrand_real2()-0.5, genrand_real2()-0.5, genrand_real2()-0.5); velocities[i] = Vec3(genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5);
} }
context.setPositions(positions); context.setPositions(positions);
context.setVelocities(velocities); context.setVelocities(velocities);
......
...@@ -41,7 +41,7 @@ ...@@ -41,7 +41,7 @@
#include "openmm/System.h" #include "openmm/System.h"
#include "openmm/VariableVerletIntegrator.h" #include "openmm/VariableVerletIntegrator.h"
#include "../src/SimTKUtilities/SimTKOpenMMRealType.h" #include "../src/SimTKUtilities/SimTKOpenMMRealType.h"
#include "../src/sfmt/SFMT.h" #include "sfmt/SFMT.h"
#include <iostream> #include <iostream>
#include <vector> #include <vector>
...@@ -104,10 +104,12 @@ void testConstraints() { ...@@ -104,10 +104,12 @@ void testConstraints() {
Context context(system, integrator, platform); Context context(system, integrator, platform);
vector<Vec3> positions(numParticles); vector<Vec3> positions(numParticles);
vector<Vec3> velocities(numParticles); vector<Vec3> velocities(numParticles);
init_gen_rand(0); OpenMM_SFMT::SFMT sfmt;
init_gen_rand(0, sfmt);
for (int i = 0; i < numParticles; ++i) { for (int i = 0; i < numParticles; ++i) {
positions[i] = Vec3(i/2, (i+1)/2, 0); positions[i] = Vec3(i/2, (i+1)/2, 0);
velocities[i] = Vec3(genrand_real2()-0.5, genrand_real2()-0.5, genrand_real2()-0.5); velocities[i] = Vec3(genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5);
} }
context.setPositions(positions); context.setPositions(positions);
context.setVelocities(velocities); context.setVelocities(velocities);
...@@ -176,9 +178,11 @@ void testConstrainedClusters() { ...@@ -176,9 +178,11 @@ void testConstrainedClusters() {
positions[5] = Vec3(2, 0, 0); positions[5] = Vec3(2, 0, 0);
positions[6] = Vec3(1, 1, 0); positions[6] = Vec3(1, 1, 0);
vector<Vec3> velocities(numParticles); vector<Vec3> velocities(numParticles);
init_gen_rand(0); OpenMM_SFMT::SFMT sfmt;
init_gen_rand(0, sfmt);
for (int i = 0; i < numParticles; ++i) for (int i = 0; i < numParticles; ++i)
velocities[i] = Vec3(genrand_real2()-0.5, genrand_real2()-0.5, genrand_real2()-0.5); velocities[i] = Vec3(genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5);
context.setPositions(positions); context.setPositions(positions);
context.setVelocities(velocities); context.setVelocities(velocities);
......
...@@ -41,7 +41,7 @@ ...@@ -41,7 +41,7 @@
#include "openmm/System.h" #include "openmm/System.h"
#include "openmm/VerletIntegrator.h" #include "openmm/VerletIntegrator.h"
#include "../src/SimTKUtilities/SimTKOpenMMRealType.h" #include "../src/SimTKUtilities/SimTKOpenMMRealType.h"
#include "../src/sfmt/SFMT.h" #include "sfmt/SFMT.h"
#include <iostream> #include <iostream>
#include <vector> #include <vector>
...@@ -103,10 +103,12 @@ void testConstraints() { ...@@ -103,10 +103,12 @@ void testConstraints() {
Context context(system, integrator, platform); Context context(system, integrator, platform);
vector<Vec3> positions(numParticles); vector<Vec3> positions(numParticles);
vector<Vec3> velocities(numParticles); vector<Vec3> velocities(numParticles);
init_gen_rand(0); OpenMM_SFMT::SFMT sfmt;
init_gen_rand(0, sfmt);
for (int i = 0; i < numParticles; ++i) { for (int i = 0; i < numParticles; ++i) {
positions[i] = Vec3(i/2, (i+1)/2, 0); positions[i] = Vec3(i/2, (i+1)/2, 0);
velocities[i] = Vec3(genrand_real2()-0.5, genrand_real2()-0.5, genrand_real2()-0.5); velocities[i] = Vec3(genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5);
} }
context.setPositions(positions); context.setPositions(positions);
context.setVelocities(velocities); context.setVelocities(velocities);
...@@ -167,9 +169,11 @@ void testConstrainedClusters() { ...@@ -167,9 +169,11 @@ void testConstrainedClusters() {
positions[5] = Vec3(2, 0, 0); positions[5] = Vec3(2, 0, 0);
positions[6] = Vec3(1, 1, 0); positions[6] = Vec3(1, 1, 0);
vector<Vec3> velocities(numParticles); vector<Vec3> velocities(numParticles);
init_gen_rand(0); OpenMM_SFMT::SFMT sfmt;
init_gen_rand(0, sfmt);
for (int i = 0; i < numParticles; ++i) for (int i = 0; i < numParticles; ++i)
velocities[i] = Vec3(genrand_real2()-0.5, genrand_real2()-0.5, genrand_real2()-0.5); velocities[i] = Vec3(genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5, genrand_real2(sfmt)-0.5);
context.setPositions(positions); context.setPositions(positions);
context.setVelocities(velocities); context.setVelocities(velocities);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment