Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
tsoc
openmm
Commits
495a43c6
"platforms/cuda/src/CudaParameterSet.cpp" did not exist on "86aacbd80e991b90e5f273fc7bdd30fa9bd2a215"
Commit
495a43c6
authored
Jan 03, 2009
by
Mark Friedrichs
Browse files
Add
parent
8c3878b2
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
571 additions
and
0 deletions
+571
-0
platforms/brook/tests/TestBrookAngleBondForce.cpp
platforms/brook/tests/TestBrookAngleBondForce.cpp
+141
-0
platforms/brook/tests/TestBrookHarmonicBondForce.cpp
platforms/brook/tests/TestBrookHarmonicBondForce.cpp
+138
-0
platforms/brook/tests/TestBrookRBTorsionForce.cpp
platforms/brook/tests/TestBrookRBTorsionForce.cpp
+154
-0
platforms/brook/tests/testBrookPeriodicTorsionForce.cpp
platforms/brook/tests/testBrookPeriodicTorsionForce.cpp
+138
-0
No files found.
platforms/brook/tests/TestBrookAngleBondForce.cpp
0 → 100644
View file @
495a43c6
/* -------------------------------------------------------------------------- *
* OpenMM *
* -------------------------------------------------------------------------- *
* This is part of the OpenMM molecular simulation toolkit originating from *
* Simbios, the NIH National Center for Physics-Based Simulation of *
* Biological Structures at Stanford, funded under the NIH Roadmap for *
* Medical Research, grant U54 GM072970. See https://simtk.org. *
* *
* Portions copyright (c) 2008 Stanford University and the Authors. *
* Authors: Mark Friedrichs *
* Contributors: *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the "Software"), *
* to deal in the Software without restriction, including without limitation *
* the rights to use, copy, modify, merge, publish, distribute, sublicense, *
* and/or sell copies of the Software, and to permit persons to whom the *
* Software is furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included in *
* all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR *
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *
* THE AUTHORS, CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE *
* USE OR OTHER DEALINGS IN THE SOFTWARE. *
* -------------------------------------------------------------------------- */
/**
* This tests the Brook harmonic angle bond force/energy
*/
#include "../../../tests/AssertionUtilities.h"
#include "BrookPlatform.h"
#include "OpenMMContext.h"
#include "HarmonicAngleForce.h"
#include "System.h"
#include "LangevinIntegrator.h"
#include <vector>
#define PI_M 3.141592653589
using
namespace
OpenMM
;
using
namespace
std
;
const
double
TOL
=
1e-5
;
void
testBrookAngles
(
FILE
*
log
){
// ---------------------------------------------------------------------------------------
static
const
std
::
string
methodName
=
"testBrookAngles"
;
static
const
int
debug
=
1
;
int
PrintOn
=
0
;
int
numberOfParticles
=
4
;
double
mass
=
2.0
;
// ---------------------------------------------------------------------------------------
PrintOn
=
log
?
PrintOn
:
0
;
if
(
PrintOn
){
(
void
)
fprintf
(
log
,
"%s
\n
"
,
methodName
.
c_str
()
);
(
void
)
fflush
(
log
);
}
BrookPlatform
platform
(
32
,
"cal"
,
log
);
System
system
(
numberOfParticles
,
0
);
LangevinIntegrator
integrator
(
0
,
0.1
,
0.01
);
// int numParticles, int numBonds, int numAngles, int numPeriodicTorsions, int numRBTorsions
HarmonicAngleForce
*
forceField
=
new
HarmonicAngleForce
(
2
);
// int index, int atom1, int atom2, int atom3, double angle, double k
forceField
->
setAngleParameters
(
0
,
0
,
1
,
2
,
PI_M
/
3
,
1.1
);
forceField
->
setAngleParameters
(
1
,
1
,
2
,
3
,
PI_M
/
2
,
1.2
);
system
.
addForce
(
forceField
);
OpenMMContext
context
(
system
,
integrator
,
platform
);
vector
<
Vec3
>
positions
(
numberOfParticles
);
positions
[
0
]
=
Vec3
(
0
,
1
,
0
);
positions
[
1
]
=
Vec3
(
0
,
0
,
0
);
positions
[
2
]
=
Vec3
(
1
,
0
,
0
);
positions
[
3
]
=
Vec3
(
2
,
1
,
0
);
context
.
setPositions
(
positions
);
State
state
=
context
.
getState
(
State
::
Forces
|
State
::
Energy
);
const
vector
<
Vec3
>&
forces
=
state
.
getForces
();
if
(
PrintOn
){
(
void
)
fprintf
(
log
,
"Angle bond forces
\n
"
);
for
(
int
ii
=
0
;
ii
<
numberOfParticles
;
ii
++
){
(
void
)
fprintf
(
log
,
"%d [%.5e %.5e %.5e]
\n
"
,
ii
,
forces
[
ii
][
0
],
forces
[
ii
][
1
],
forces
[
ii
][
2
]
);
}
(
void
)
fflush
(
log
);
}
double
tolerance
=
1.0e-03
;
double
torque1
=
1.1
*
PI_M
/
6
;
double
torque2
=
1.2
*
PI_M
/
4
;
ASSERT_EQUAL_VEC
(
Vec3
(
torque1
,
0
,
0
),
forces
[
0
],
tolerance
);
ASSERT_EQUAL_VEC
(
Vec3
(
-
0.5
*
torque2
,
0.5
*
torque2
,
0
),
forces
[
3
],
tolerance
);
// reduced by sqrt(2) due to the bond length, another sqrt(2) due to the angle
ASSERT_EQUAL_VEC
(
Vec3
(
forces
[
0
][
0
]
+
forces
[
1
][
0
]
+
forces
[
2
][
0
]
+
forces
[
3
][
0
],
forces
[
0
][
1
]
+
forces
[
1
][
1
]
+
forces
[
2
][
1
]
+
forces
[
3
][
1
],
forces
[
0
][
2
]
+
forces
[
1
][
2
]
+
forces
[
2
][
2
]
+
forces
[
3
][
2
]),
Vec3
(
0
,
0
,
0
),
tolerance
);
ASSERT_EQUAL_TOL
(
0.5
*
1.1
*
(
PI_M
/
6
)
*
(
PI_M
/
6
)
+
0.5
*
1.2
*
(
PI_M
/
4
)
*
(
PI_M
/
4
),
state
.
getPotentialEnergy
(),
tolerance
);
if
(
PrintOn
){
(
void
)
fprintf
(
log
,
"Angle bond forces ok tolerance=%.2e
\n
"
,
tolerance
);
(
void
)
fflush
(
log
);
}
}
int
main
(
){
// ---------------------------------------------------------------------------------------
static
const
std
::
string
methodName
=
"testBrookAngles"
;
FILE
*
log
=
stdout
;
// ---------------------------------------------------------------------------------------
(
void
)
fflush
(
stdout
);
(
void
)
fflush
(
stderr
);
try
{
testBrookAngles
(
log
);
}
catch
(
const
exception
&
e
){
(
void
)
fprintf
(
log
,
"Exception %s %.s
\n
"
,
methodName
.
c_str
(),
e
.
what
()
);
(
void
)
fflush
(
log
);
return
1
;
}
(
void
)
fprintf
(
log
,
"
\n
%s done
\n
"
,
methodName
.
c_str
()
);
(
void
)
fflush
(
log
);
return
0
;
}
platforms/brook/tests/TestBrookHarmonicBondForce.cpp
0 → 100644
View file @
495a43c6
/* -------------------------------------------------------------------------- *
* OpenMM *
* -------------------------------------------------------------------------- *
* This is part of the OpenMM molecular simulation toolkit originating from *
* Simbios, the NIH National Center for Physics-Based Simulation of *
* Biological Structures at Stanford, funded under the NIH Roadmap for *
* Medical Research, grant U54 GM072970. See https://simtk.org. *
* *
* Portions copyright (c) 2008 Stanford University and the Authors. *
* Authors: Mark Friedrichs *
* Contributors: *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the "Software"), *
* to deal in the Software without restriction, including without limitation *
* the rights to use, copy, modify, merge, publish, distribute, sublicense, *
* and/or sell copies of the Software, and to permit persons to whom the *
* Software is furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included in *
* all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR *
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *
* THE AUTHORS, CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE *
* USE OR OTHER DEALINGS IN THE SOFTWARE. *
* -------------------------------------------------------------------------- */
/**
* This tests the Brook Harmonic bond force/energy
*/
#include "../../../tests/AssertionUtilities.h"
#include "BrookPlatform.h"
#include "OpenMMContext.h"
#include "HarmonicBondForce.h"
#include "System.h"
#include "LangevinIntegrator.h"
#include <vector>
using
namespace
OpenMM
;
using
namespace
std
;
const
double
TOL
=
1e-5
;
void
testBrookBonds
(
FILE
*
log
){
// ---------------------------------------------------------------------------------------
static
const
std
::
string
methodName
=
"testBrookBonds"
;
int
PrintOn
=
0
;
int
numberOfParticles
=
3
;
double
mass
=
2.0
;
// ---------------------------------------------------------------------------------------
PrintOn
=
log
?
PrintOn
:
0
;
if
(
PrintOn
){
(
void
)
fprintf
(
log
,
"%s
\n
"
,
methodName
.
c_str
()
);
(
void
)
fflush
(
log
);
}
BrookPlatform
platform
(
32
,
"cal"
,
log
);
System
system
(
numberOfParticles
,
0
);
LangevinIntegrator
integrator
(
0
,
0.1
,
0.01
);
// int numParticles, int numBonds, int numAngles, int numPeriodicTorsions, int numRBTorsions
HarmonicBondForce
*
forceField
=
new
HarmonicBondForce
(
2
);
// ( index, atom1, atom2, length, k )
forceField
->
setBondParameters
(
0
,
0
,
1
,
1.5
,
0.8
);
forceField
->
setBondParameters
(
1
,
1
,
2
,
1.2
,
0.7
);
system
.
addForce
(
forceField
);
OpenMMContext
context
(
system
,
integrator
,
platform
);
vector
<
Vec3
>
positions
(
3
);
positions
[
0
]
=
Vec3
(
0
,
2
,
0
);
positions
[
1
]
=
Vec3
(
0
,
0
,
0
);
positions
[
2
]
=
Vec3
(
1
,
0
,
0
);
context
.
setPositions
(
positions
);
//(void) fprintf( log, "testBrookBonds:Calling getState\n");
//(void) fflush( log );
State
state
=
context
.
getState
(
State
::
Forces
|
State
::
Energy
);
const
vector
<
Vec3
>&
forces
=
state
.
getForces
();
if
(
PrintOn
){
(
void
)
fprintf
(
log
,
"Harmonic bond forces
\n
"
);
for
(
int
ii
=
0
;
ii
<
numberOfParticles
;
ii
++
){
(
void
)
fprintf
(
log
,
"%d [%.5e %.5e %.5e]
\n
"
,
ii
,
forces
[
ii
][
0
],
forces
[
ii
][
1
],
forces
[
ii
][
2
]
);
}
(
void
)
fflush
(
log
);
}
ASSERT_EQUAL_VEC
(
Vec3
(
0
,
-
0.8
*
0.5
,
0
),
forces
[
0
],
TOL
);
ASSERT_EQUAL_VEC
(
Vec3
(
0.7
*
0.2
,
0
,
0
),
forces
[
2
],
TOL
);
ASSERT_EQUAL_VEC
(
Vec3
(
-
forces
[
0
][
0
]
-
forces
[
2
][
0
],
-
forces
[
0
][
1
]
-
forces
[
2
][
1
],
-
forces
[
0
][
2
]
-
forces
[
2
][
2
]),
forces
[
1
],
TOL
);
if
(
PrintOn
){
(
void
)
fprintf
(
log
,
"Harmonic bond forces ok -- checking energy
\n
"
);
(
void
)
fflush
(
log
);
}
ASSERT_EQUAL_TOL
(
0.5
*
0.8
*
0.5
*
0.5
+
0.5
*
0.7
*
0.2
*
0.2
,
state
.
getPotentialEnergy
(),
TOL
);
if
(
PrintOn
){
(
void
)
fprintf
(
log
,
"Harmonic bond energy ok
\n
"
);
(
void
)
fflush
(
log
);
}
}
int
main
(
){
// ---------------------------------------------------------------------------------------
static
const
std
::
string
methodName
=
"testBrookBonds"
;
FILE
*
log
=
stdout
;
// ---------------------------------------------------------------------------------------
(
void
)
fflush
(
stdout
);
(
void
)
fflush
(
stderr
);
try
{
testBrookBonds
(
log
);
}
catch
(
const
exception
&
e
){
(
void
)
fprintf
(
log
,
"Exception %s %.s
\n
"
,
methodName
.
c_str
(),
e
.
what
()
);
(
void
)
fflush
(
log
);
return
1
;
}
(
void
)
fprintf
(
log
,
"
\n
%s done
\n
"
,
methodName
.
c_str
()
);
(
void
)
fflush
(
log
);
return
0
;
}
platforms/brook/tests/TestBrookRBTorsionForce.cpp
0 → 100644
View file @
495a43c6
/* -------------------------------------------------------------------------- *
* OpenMM *
* -------------------------------------------------------------------------- *
* This is part of the OpenMM molecular simulation toolkit originating from *
* Simbios, the NIH National Center for Physics-Based Simulation of *
* Biological Structures at Stanford, funded under the NIH Roadmap for *
* Medical Research, grant U54 GM072970. See https://simtk.org. *
* *
* Portions copyright (c) 2008 Stanford University and the Authors. *
* Authors: Mark Friedrichs *
* Contributors: *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the "Software"), *
* to deal in the Software without restriction, including without limitation *
* the rights to use, copy, modify, merge, publish, distribute, sublicense, *
* and/or sell copies of the Software, and to permit persons to whom the *
* Software is furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included in *
* all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR *
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *
* THE AUTHORS, CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE *
* USE OR OTHER DEALINGS IN THE SOFTWARE. *
* -------------------------------------------------------------------------- */
/**
* This tests the Brook RB torsion bond force/energy
*/
#include "../../../tests/AssertionUtilities.h"
#include "BrookPlatform.h"
#include "ReferencePlatform.h"
#include "OpenMMContext.h"
#include "RBTorsionForce.h"
#include "System.h"
#include "LangevinIntegrator.h"
#include <vector>
#define PI_M 3.141592653589
using
namespace
OpenMM
;
using
namespace
std
;
const
double
TOL
=
1e-5
;
void
testBrookRBTorsions
(
FILE
*
log
){
// ---------------------------------------------------------------------------------------
static
const
std
::
string
methodName
=
"RBTorsions"
;
int
PrintOn
=
0
;
int
numberOfParticles
=
4
;
double
mass
=
2.0
;
// ---------------------------------------------------------------------------------------
PrintOn
=
log
?
PrintOn
:
0
;
if
(
PrintOn
){
(
void
)
fprintf
(
log
,
"%s
\n
"
,
methodName
.
c_str
()
);
(
void
)
fflush
(
log
);
}
BrookPlatform
platform
(
32
,
"cal"
,
log
);
//ReferencePlatform platform;
System
system
(
numberOfParticles
,
0
);
LangevinIntegrator
integrator
(
0
,
0.1
,
0.01
);
RBTorsionForce
*
forceField
=
new
RBTorsionForce
(
1
);
forceField
->
setTorsionParameters
(
0
,
0
,
1
,
2
,
3
,
0.1
,
0.2
,
0.3
,
0.4
,
0.5
,
0.6
);
system
.
addForce
(
forceField
);
OpenMMContext
context
(
system
,
integrator
,
platform
);
vector
<
Vec3
>
positions
(
numberOfParticles
);
positions
[
0
]
=
Vec3
(
0
,
1
,
0
);
positions
[
1
]
=
Vec3
(
0
,
0
,
0
);
positions
[
2
]
=
Vec3
(
1
,
0
,
0
);
positions
[
3
]
=
Vec3
(
1
,
1
,
1
);
context
.
setPositions
(
positions
);
State
state
=
context
.
getState
(
State
::
Forces
|
State
::
Energy
);
const
vector
<
Vec3
>&
forces
=
state
.
getForces
();
if
(
PrintOn
){
(
void
)
fprintf
(
log
,
"RB torsion bond forces
\n
"
);
for
(
int
ii
=
0
;
ii
<
numberOfParticles
;
ii
++
){
(
void
)
fprintf
(
log
,
"%d [%.5e %.5e %.5e]
\n
"
,
ii
,
forces
[
ii
][
0
],
forces
[
ii
][
1
],
forces
[
ii
][
2
]
);
}
(
void
)
fflush
(
log
);
}
double
psi
=
0.25
*
PI_M
-
PI_M
;
double
torque
=
0.0
;
for
(
int
i
=
1
;
i
<
6
;
++
i
)
{
double
c
=
0.1
*
(
i
+
1
);
torque
+=
-
c
*
i
*
std
::
pow
(
std
::
cos
(
psi
),
i
-
1
)
*
std
::
sin
(
psi
);
}
if
(
PrintOn
){
(
void
)
fprintf
(
log
,
"RB torsion bond expected forces
\n
"
);
(
void
)
fprintf
(
log
,
"0 [0.0 0.0 %.5e]
\n
"
,
torque
);
(
void
)
fprintf
(
log
,
"3 [0.0 %.5e %.5e]
\n
"
,
0.5
*
torque
,
-
0.5
*
torque
);
(
void
)
fflush
(
log
);
}
double
tolerance
=
0.001
;
ASSERT_EQUAL_VEC
(
Vec3
(
0
,
0
,
torque
),
forces
[
0
],
tolerance
);
ASSERT_EQUAL_VEC
(
Vec3
(
0
,
0.5
*
torque
,
-
0.5
*
torque
),
forces
[
3
],
tolerance
);
ASSERT_EQUAL_VEC
(
Vec3
(
forces
[
0
][
0
]
+
forces
[
1
][
0
]
+
forces
[
2
][
0
]
+
forces
[
3
][
0
],
forces
[
0
][
1
]
+
forces
[
1
][
1
]
+
forces
[
2
][
1
]
+
forces
[
3
][
1
],
forces
[
0
][
2
]
+
forces
[
1
][
2
]
+
forces
[
2
][
2
]
+
forces
[
3
][
2
]),
Vec3
(
0
,
0
,
0
),
tolerance
);
double
energy
=
0.0
;
for
(
int
i
=
0
;
i
<
6
;
++
i
)
{
double
c
=
0.1
*
(
i
+
1
);
energy
+=
c
*
std
::
pow
(
std
::
cos
(
psi
),
i
);
}
ASSERT_EQUAL_TOL
(
energy
,
state
.
getPotentialEnergy
(),
tolerance
);
if
(
PrintOn
){
(
void
)
fprintf
(
log
,
"RB torsion bond forces ok tolerance=%.2e
\n
"
,
tolerance
);
fflush
(
log
);
}
}
int
main
(
){
// ---------------------------------------------------------------------------------------
static
const
std
::
string
methodName
=
"testBrookRbTorsion"
;
FILE
*
log
=
stdout
;
// ---------------------------------------------------------------------------------------
(
void
)
fflush
(
stdout
);
(
void
)
fflush
(
stderr
);
try
{
testBrookRBTorsions
(
log
);
}
catch
(
const
exception
&
e
){
(
void
)
fprintf
(
log
,
"Exception %s %.s
\n
"
,
methodName
.
c_str
(),
e
.
what
()
);
(
void
)
fflush
(
log
);
return
1
;
}
(
void
)
fprintf
(
log
,
"
\n
%s done
\n
"
,
methodName
.
c_str
()
);
(
void
)
fflush
(
log
);
return
0
;
}
platforms/brook/tests/testBrookPeriodicTorsionForce.cpp
0 → 100644
View file @
495a43c6
/* -------------------------------------------------------------------------- *
* OpenMM *
* -------------------------------------------------------------------------- *
* This is part of the OpenMM molecular simulation toolkit originating from *
* Simbios, the NIH National Center for Physics-Based Simulation of *
* Biological Structures at Stanford, funded under the NIH Roadmap for *
* Medical Research, grant U54 GM072970. See https://simtk.org. *
* *
* Portions copyright (c) 2008 Stanford University and the Authors. *
* Authors: Mark Friedrichs *
* Contributors: *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the "Software"), *
* to deal in the Software without restriction, including without limitation *
* the rights to use, copy, modify, merge, publish, distribute, sublicense, *
* and/or sell copies of the Software, and to permit persons to whom the *
* Software is furnished to do so, subject to the following conditions: *
* *
* The above copyright notice and this permission notice shall be included in *
* all copies or substantial portions of the Software. *
* *
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR *
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, *
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL *
* THE AUTHORS, CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *
* DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *
* OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE *
* USE OR OTHER DEALINGS IN THE SOFTWARE. *
* -------------------------------------------------------------------------- */
/**
* This tests the Brook periodic torsion bond force/energy
*/
#include "../../../tests/AssertionUtilities.h"
#include "BrookPlatform.h"
#include "OpenMMContext.h"
#include "PeriodicTorsionForce.h"
#include "System.h"
#include "LangevinIntegrator.h"
#include <vector>
#define PI_M 3.141592653589
using
namespace
OpenMM
;
using
namespace
std
;
const
double
TOL
=
1e-5
;
void
testBrookPeriodicTorsions
(
FILE
*
log
){
// ---------------------------------------------------------------------------------------
static
const
std
::
string
methodName
=
"PeriodicTorsions"
;
int
PrintOn
=
0
;
int
numberOfParticles
=
4
;
double
mass
=
2.0
;
// ---------------------------------------------------------------------------------------
PrintOn
=
log
?
PrintOn
:
0
;
if
(
PrintOn
){
(
void
)
fprintf
(
log
,
"%s
\n
"
,
methodName
.
c_str
()
);
(
void
)
fflush
(
log
);
}
BrookPlatform
platform
(
32
,
"cal"
,
log
);
System
system
(
numberOfParticles
,
0
);
LangevinIntegrator
integrator
(
0
,
0.1
,
0.01
);
// int numParticles, int numBonds, int numAngles, int numPeriodicTorsions, int numRBTorsions
PeriodicTorsionForce
*
forceField
=
new
PeriodicTorsionForce
(
1
);
// int index, int atom1, int atom2, int atom3, double angle, double k
forceField
->
setTorsionParameters
(
0
,
0
,
1
,
2
,
3
,
2
,
PI_M
/
3
,
1.1
);
system
.
addForce
(
forceField
);
OpenMMContext
context
(
system
,
integrator
,
platform
);
vector
<
Vec3
>
positions
(
numberOfParticles
);
positions
[
0
]
=
Vec3
(
0
,
1
,
0
);
positions
[
1
]
=
Vec3
(
0
,
0
,
0
);
positions
[
2
]
=
Vec3
(
1
,
0
,
0
);
positions
[
3
]
=
Vec3
(
1
,
0
,
2
);
context
.
setPositions
(
positions
);
State
state
=
context
.
getState
(
State
::
Forces
|
State
::
Energy
);
const
vector
<
Vec3
>&
forces
=
state
.
getForces
();
if
(
PrintOn
){
(
void
)
fprintf
(
log
,
"Periodic torsion bond forces
\n
"
);
for
(
int
ii
=
0
;
ii
<
numberOfParticles
;
ii
++
){
(
void
)
fprintf
(
log
,
"%d [%.5e %.5e %.5e]
\n
"
,
ii
,
forces
[
ii
][
0
],
forces
[
ii
][
1
],
forces
[
ii
][
2
]
);
}
(
void
)
fflush
(
log
);
}
double
torque
=
-
2
*
1.1
*
std
::
sin
(
2
*
PI_M
/
3
);
double
tolerance
=
1.0e-03
;
ASSERT_EQUAL_VEC
(
Vec3
(
0
,
0
,
torque
),
forces
[
0
],
tolerance
);
ASSERT_EQUAL_VEC
(
Vec3
(
0
,
0.5
*
torque
,
0
),
forces
[
3
],
tolerance
);
ASSERT_EQUAL_VEC
(
Vec3
(
forces
[
0
][
0
]
+
forces
[
1
][
0
]
+
forces
[
2
][
0
]
+
forces
[
3
][
0
],
forces
[
0
][
1
]
+
forces
[
1
][
1
]
+
forces
[
2
][
1
]
+
forces
[
3
][
1
],
forces
[
0
][
2
]
+
forces
[
1
][
2
]
+
forces
[
2
][
2
]
+
forces
[
3
][
2
]),
Vec3
(
0
,
0
,
0
),
tolerance
);
ASSERT_EQUAL_TOL
(
1.1
*
(
1
+
std
::
cos
(
2
*
PI_M
/
3
)),
state
.
getPotentialEnergy
(),
tolerance
);
if
(
PrintOn
){
(
void
)
fprintf
(
log
,
"Periodic torsion bond forces ok -- tolerance=%.2e
\n
"
,
tolerance
);
(
void
)
fflush
(
log
);
}
}
int
main
(
){
// ---------------------------------------------------------------------------------------
static
const
std
::
string
methodName
=
"testBrookPeriodicTorsions"
;
FILE
*
log
=
stdout
;
// ---------------------------------------------------------------------------------------
(
void
)
fflush
(
stdout
);
(
void
)
fflush
(
stderr
);
try
{
testBrookPeriodicTorsions
(
log
);
}
catch
(
const
exception
&
e
){
(
void
)
fprintf
(
log
,
"Exception %s %.s
\n
"
,
methodName
.
c_str
(),
e
.
what
()
);
(
void
)
fflush
(
log
);
return
1
;
}
(
void
)
fprintf
(
log
,
"
\n
%s done
\n
"
,
methodName
.
c_str
()
);
(
void
)
fflush
(
log
);
return
0
;
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment