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
d1793e5a
Commit
d1793e5a
authored
Jan 20, 2012
by
Peter Eastman
Browse files
Eliminated nested classes, since SWIG didn't handle them well
parent
f728d2f6
Changes
5
Show whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
42 additions
and
44 deletions
+42
-44
openmmapi/include/OpenMM.h
openmmapi/include/OpenMM.h
+1
-0
openmmapi/include/openmm/VirtualSite.h
openmmapi/include/openmm/VirtualSite.h
+9
-12
openmmapi/src/VirtualSite.cpp
openmmapi/src/VirtualSite.cpp
+8
-8
platforms/reference/src/SimTKReference/ReferenceVirtualSites.cpp
...ms/reference/src/SimTKReference/ReferenceVirtualSites.cpp
+12
-12
platforms/reference/tests/TestReferenceVirtualSites.cpp
platforms/reference/tests/TestReferenceVirtualSites.cpp
+12
-12
No files found.
openmmapi/include/OpenMM.h
View file @
d1793e5a
...
...
@@ -65,6 +65,7 @@
#include "openmm/VariableVerletIntegrator.h"
#include "openmm/Vec3.h"
#include "openmm/VerletIntegrator.h"
#include "openmm/VirtualSite.h"
#include "openmm/Platform.h"
#endif
/*OPENMM_H_*/
openmmapi/include/openmm/VirtualSite.h
View file @
d1793e5a
...
...
@@ -46,9 +46,6 @@ namespace OpenMM {
class
OPENMM_EXPORT
VirtualSite
{
public:
class
TwoParticleAverage
;
class
ThreeParticleAverage
;
class
OutOfPlane
;
virtual
~
VirtualSite
()
{
}
/**
...
...
@@ -75,10 +72,10 @@ private:
* of two other particle's locations. Assuming the weights add up to 1, this means
* the virtual site is on the line passing through the two particles.
*/
class
VirtualSite
::
TwoParticleAverage
:
public
VirtualSite
{
class
TwoParticleAverage
Site
:
public
VirtualSite
{
public:
/**
* Create a new TwoParticleAverage virtual site. Normally weight1 and weight2
* Create a new TwoParticleAverage
Site
virtual site. Normally weight1 and weight2
* should add up to 1, although this is not strictly required.
*
* @param particle1 the index of the first particle
...
...
@@ -86,7 +83,7 @@ public:
* @param weight1 the weight factor (between 0 and 1) for the first particle
* @param weight2 the weight factor (between 0 and 1) for the second particle
*/
TwoParticleAverage
(
int
particle1
,
int
particle2
,
double
weight1
,
double
weight2
);
TwoParticleAverage
Site
(
int
particle1
,
int
particle2
,
double
weight1
,
double
weight2
);
/**
* Get the weight factor used for a particle this virtual site depends on.
*
...
...
@@ -103,10 +100,10 @@ private:
* of three other particle's locations. Assuming the weights add up to 1, this means
* the virtual site is in the plane of the three particles.
*/
class
VirtualSite
::
ThreeParticleAverage
:
public
VirtualSite
{
class
ThreeParticleAverage
Site
:
public
VirtualSite
{
public:
/**
* Create a new ThreeParticleAverage virtual site. Normally the weights
* Create a new ThreeParticleAverage
Site
virtual site. Normally the weights
* should add up to 1, although this is not strictly required.
*
* @param particle1 the index of the first particle
...
...
@@ -116,7 +113,7 @@ public:
* @param weight2 the weight factor (between 0 and 1) for the second particle
* @param weight2 the weight factor (between 0 and 1) for the third particle
*/
ThreeParticleAverage
(
int
particle1
,
int
particle2
,
int
particle3
,
double
weight1
,
double
weight2
,
double
weight3
);
ThreeParticleAverage
Site
(
int
particle1
,
int
particle2
,
int
particle3
,
double
weight1
,
double
weight2
,
double
weight3
);
/**
* Get the weight factor used for a particle this virtual site depends on.
*
...
...
@@ -140,10 +137,10 @@ private:
* The three weight factors are user-specified. This allows the virtual site location
* to be out of the plane of the three particles.
*/
class
VirtualSite
::
OutOfPlane
:
public
VirtualSite
{
class
OutOfPlane
Site
:
public
VirtualSite
{
public:
/**
* Create a new OutOfPlane virtual site.
* Create a new OutOfPlane
Site
virtual site.
*
* @param particle1 the index of the first particle
* @param particle2 the index of the second particle
...
...
@@ -152,7 +149,7 @@ public:
* @param weight13 the weight factor for the vector from particle1 to particle3
* @param weightCross the weight factor for the cross product
*/
OutOfPlane
(
int
particle1
,
int
particle2
,
int
particle3
,
double
weight12
,
double
weight13
,
double
weightCross
);
OutOfPlane
Site
(
int
particle1
,
int
particle2
,
int
particle3
,
double
weight12
,
double
weight13
,
double
weightCross
);
/**
* Get the weight factor for the vector from particle1 to particle2.
*/
...
...
openmmapi/src/VirtualSite.cpp
View file @
d1793e5a
...
...
@@ -48,7 +48,7 @@ int VirtualSite::getParticle(int particle) const {
return
particles
[
particle
];
}
VirtualSite
::
TwoParticleAverage
::
TwoParticleAverage
(
int
particle1
,
int
particle2
,
double
weight1
,
double
weight2
)
:
TwoParticleAverage
Site
::
TwoParticleAverage
Site
(
int
particle1
,
int
particle2
,
double
weight1
,
double
weight2
)
:
weight1
(
weight1
),
weight2
(
weight2
)
{
vector
<
int
>
particles
(
2
);
particles
[
0
]
=
particle1
;
...
...
@@ -56,7 +56,7 @@ VirtualSite::TwoParticleAverage::TwoParticleAverage(int particle1, int particle2
setParticles
(
particles
);
}
double
VirtualSite
::
TwoParticleAverage
::
getWeight
(
int
particle
)
const
{
double
TwoParticleAverage
Site
::
getWeight
(
int
particle
)
const
{
if
(
particle
==
0
)
return
weight1
;
if
(
particle
==
1
)
...
...
@@ -64,7 +64,7 @@ double VirtualSite::TwoParticleAverage::getWeight(int particle) const {
throw
OpenMMException
(
"Illegal index for particle"
);
}
VirtualSite
::
ThreeParticleAverage
::
ThreeParticleAverage
(
int
particle1
,
int
particle2
,
int
particle3
,
double
weight1
,
double
weight2
,
double
weight3
)
:
ThreeParticleAverage
Site
::
ThreeParticleAverage
Site
(
int
particle1
,
int
particle2
,
int
particle3
,
double
weight1
,
double
weight2
,
double
weight3
)
:
weight1
(
weight1
),
weight2
(
weight2
),
weight3
(
weight3
)
{
vector
<
int
>
particles
(
3
);
particles
[
0
]
=
particle1
;
...
...
@@ -73,7 +73,7 @@ VirtualSite::ThreeParticleAverage::ThreeParticleAverage(int particle1, int parti
setParticles
(
particles
);
}
double
VirtualSite
::
ThreeParticleAverage
::
getWeight
(
int
particle
)
const
{
double
ThreeParticleAverage
Site
::
getWeight
(
int
particle
)
const
{
if
(
particle
==
0
)
return
weight1
;
if
(
particle
==
1
)
...
...
@@ -83,7 +83,7 @@ double VirtualSite::ThreeParticleAverage::getWeight(int particle) const {
throw
OpenMMException
(
"Illegal index for particle"
);
}
VirtualSite
::
OutOfPlane
::
OutOfPlane
(
int
particle1
,
int
particle2
,
int
particle3
,
double
weight12
,
double
weight13
,
double
weightCross
)
:
OutOfPlane
Site
::
OutOfPlane
Site
(
int
particle1
,
int
particle2
,
int
particle3
,
double
weight12
,
double
weight13
,
double
weightCross
)
:
weight12
(
weight12
),
weight13
(
weight13
),
weightCross
(
weightCross
)
{
vector
<
int
>
particles
(
3
);
particles
[
0
]
=
particle1
;
...
...
@@ -92,14 +92,14 @@ VirtualSite::OutOfPlane::OutOfPlane(int particle1, int particle2, int particle3,
setParticles
(
particles
);
}
double
VirtualSite
::
OutOfPlane
::
getWeight12
()
const
{
double
OutOfPlane
Site
::
getWeight12
()
const
{
return
weight12
;
}
double
VirtualSite
::
OutOfPlane
::
getWeight13
()
const
{
double
OutOfPlane
Site
::
getWeight13
()
const
{
return
weight13
;
}
double
VirtualSite
::
OutOfPlane
::
getWeightCross
()
const
{
double
OutOfPlane
Site
::
getWeightCross
()
const
{
return
weightCross
;
}
platforms/reference/src/SimTKReference/ReferenceVirtualSites.cpp
View file @
d1793e5a
...
...
@@ -38,26 +38,26 @@ using namespace std;
void
ReferenceVirtualSites
::
computePositions
(
const
OpenMM
::
System
&
system
,
vector
<
OpenMM
::
RealVec
>&
atomCoordinates
)
{
for
(
int
i
=
0
;
i
<
system
.
getNumParticles
();
i
++
)
if
(
system
.
isVirtualSite
(
i
))
{
if
(
dynamic_cast
<
const
VirtualSite
::
TwoParticleAverage
*>
(
&
system
.
getVirtualSite
(
i
))
!=
NULL
)
{
if
(
dynamic_cast
<
const
TwoParticleAverage
Site
*>
(
&
system
.
getVirtualSite
(
i
))
!=
NULL
)
{
// A two particle average.
const
VirtualSite
::
TwoParticleAverage
&
site
=
dynamic_cast
<
const
VirtualSite
::
TwoParticleAverage
&>
(
system
.
getVirtualSite
(
i
));
const
TwoParticleAverage
Site
&
site
=
dynamic_cast
<
const
TwoParticleAverage
Site
&>
(
system
.
getVirtualSite
(
i
));
int
p1
=
site
.
getParticle
(
0
),
p2
=
site
.
getParticle
(
1
);
RealOpenMM
w1
=
site
.
getWeight
(
0
),
w2
=
site
.
getWeight
(
1
);
atomCoordinates
[
i
]
=
atomCoordinates
[
p1
]
*
w1
+
atomCoordinates
[
p2
]
*
w2
;
}
else
if
(
dynamic_cast
<
const
VirtualSite
::
ThreeParticleAverage
*>
(
&
system
.
getVirtualSite
(
i
))
!=
NULL
)
{
else
if
(
dynamic_cast
<
const
ThreeParticleAverage
Site
*>
(
&
system
.
getVirtualSite
(
i
))
!=
NULL
)
{
// A three particle average.
const
VirtualSite
::
ThreeParticleAverage
&
site
=
dynamic_cast
<
const
VirtualSite
::
ThreeParticleAverage
&>
(
system
.
getVirtualSite
(
i
));
const
ThreeParticleAverage
Site
&
site
=
dynamic_cast
<
const
ThreeParticleAverage
Site
&>
(
system
.
getVirtualSite
(
i
));
int
p1
=
site
.
getParticle
(
0
),
p2
=
site
.
getParticle
(
1
),
p3
=
site
.
getParticle
(
2
);
RealOpenMM
w1
=
site
.
getWeight
(
0
),
w2
=
site
.
getWeight
(
1
),
w3
=
site
.
getWeight
(
2
);
atomCoordinates
[
i
]
=
atomCoordinates
[
p1
]
*
w1
+
atomCoordinates
[
p2
]
*
w2
+
atomCoordinates
[
p3
]
*
w3
;
}
else
if
(
dynamic_cast
<
const
VirtualSite
::
OutOfPlane
*>
(
&
system
.
getVirtualSite
(
i
))
!=
NULL
)
{
else
if
(
dynamic_cast
<
const
OutOfPlane
Site
*>
(
&
system
.
getVirtualSite
(
i
))
!=
NULL
)
{
// An out of plane site.
const
VirtualSite
::
OutOfPlane
&
site
=
dynamic_cast
<
const
VirtualSite
::
OutOfPlane
&>
(
system
.
getVirtualSite
(
i
));
const
OutOfPlane
Site
&
site
=
dynamic_cast
<
const
OutOfPlane
Site
&>
(
system
.
getVirtualSite
(
i
));
int
p1
=
site
.
getParticle
(
0
),
p2
=
site
.
getParticle
(
1
),
p3
=
site
.
getParticle
(
2
);
RealOpenMM
w12
=
site
.
getWeight12
(),
w13
=
site
.
getWeight13
(),
wcross
=
site
.
getWeightCross
();
RealVec
v12
=
atomCoordinates
[
p2
]
-
atomCoordinates
[
p1
];
...
...
@@ -73,29 +73,29 @@ void ReferenceVirtualSites::distributeForces(const OpenMM::System& system, const
for
(
int
i
=
0
;
i
<
system
.
getNumParticles
();
i
++
)
if
(
system
.
isVirtualSite
(
i
))
{
RealVec
f
=
forces
[
i
];
if
(
dynamic_cast
<
const
VirtualSite
::
TwoParticleAverage
*>
(
&
system
.
getVirtualSite
(
i
))
!=
NULL
)
{
if
(
dynamic_cast
<
const
TwoParticleAverage
Site
*>
(
&
system
.
getVirtualSite
(
i
))
!=
NULL
)
{
// A two particle average.
const
VirtualSite
::
TwoParticleAverage
&
site
=
dynamic_cast
<
const
VirtualSite
::
TwoParticleAverage
&>
(
system
.
getVirtualSite
(
i
));
const
TwoParticleAverage
Site
&
site
=
dynamic_cast
<
const
TwoParticleAverage
Site
&>
(
system
.
getVirtualSite
(
i
));
int
p1
=
site
.
getParticle
(
0
),
p2
=
site
.
getParticle
(
1
);
RealOpenMM
w1
=
site
.
getWeight
(
0
),
w2
=
site
.
getWeight
(
1
);
forces
[
p1
]
+=
f
*
w1
;
forces
[
p2
]
+=
f
*
w2
;
}
else
if
(
dynamic_cast
<
const
VirtualSite
::
ThreeParticleAverage
*>
(
&
system
.
getVirtualSite
(
i
))
!=
NULL
)
{
else
if
(
dynamic_cast
<
const
ThreeParticleAverage
Site
*>
(
&
system
.
getVirtualSite
(
i
))
!=
NULL
)
{
// A three particle average.
const
VirtualSite
::
ThreeParticleAverage
&
site
=
dynamic_cast
<
const
VirtualSite
::
ThreeParticleAverage
&>
(
system
.
getVirtualSite
(
i
));
const
ThreeParticleAverage
Site
&
site
=
dynamic_cast
<
const
ThreeParticleAverage
Site
&>
(
system
.
getVirtualSite
(
i
));
int
p1
=
site
.
getParticle
(
0
),
p2
=
site
.
getParticle
(
1
),
p3
=
site
.
getParticle
(
2
);
RealOpenMM
w1
=
site
.
getWeight
(
0
),
w2
=
site
.
getWeight
(
1
),
w3
=
site
.
getWeight
(
2
);
forces
[
p1
]
+=
f
*
w1
;
forces
[
p2
]
+=
f
*
w2
;
forces
[
p3
]
+=
f
*
w3
;
}
else
if
(
dynamic_cast
<
const
VirtualSite
::
OutOfPlane
*>
(
&
system
.
getVirtualSite
(
i
))
!=
NULL
)
{
else
if
(
dynamic_cast
<
const
OutOfPlane
Site
*>
(
&
system
.
getVirtualSite
(
i
))
!=
NULL
)
{
// An out of plane site.
const
VirtualSite
::
OutOfPlane
&
site
=
dynamic_cast
<
const
VirtualSite
::
OutOfPlane
&>
(
system
.
getVirtualSite
(
i
));
const
OutOfPlane
Site
&
site
=
dynamic_cast
<
const
OutOfPlane
Site
&>
(
system
.
getVirtualSite
(
i
));
int
p1
=
site
.
getParticle
(
0
),
p2
=
site
.
getParticle
(
1
),
p3
=
site
.
getParticle
(
2
);
RealOpenMM
w12
=
site
.
getWeight12
(),
w13
=
site
.
getWeight13
(),
wcross
=
site
.
getWeightCross
();
RealVec
v12
=
atomCoordinates
[
p2
]
-
atomCoordinates
[
p1
];
...
...
platforms/reference/tests/TestReferenceVirtualSites.cpp
View file @
d1793e5a
...
...
@@ -88,7 +88,7 @@ void testMasslessParticle() {
}
/**
* Test a TwoParticleAverage virtual site.
* Test a TwoParticleAverage
Site
virtual site.
*/
void
testTwoParticleAverage
()
{
ReferencePlatform
platform
;
...
...
@@ -96,7 +96,7 @@ void testTwoParticleAverage() {
system
.
addParticle
(
1.0
);
system
.
addParticle
(
1.0
);
system
.
addParticle
(
0.0
);
system
.
setVirtualSite
(
2
,
new
VirtualSite
::
TwoParticleAverage
(
0
,
1
,
0.8
,
0.2
));
system
.
setVirtualSite
(
2
,
new
TwoParticleAverage
Site
(
0
,
1
,
0.8
,
0.2
));
CustomExternalForce
*
forceField
=
new
CustomExternalForce
(
"-a*x"
);
system
.
addForce
(
forceField
);
forceField
->
addPerParticleParameter
(
"a"
);
...
...
@@ -124,7 +124,7 @@ void testTwoParticleAverage() {
}
/**
* Test a ThreeParticleAverage virtual site.
* Test a ThreeParticleAverage
Site
virtual site.
*/
void
testThreeParticleAverage
()
{
ReferencePlatform
platform
;
...
...
@@ -133,7 +133,7 @@ void testThreeParticleAverage() {
system
.
addParticle
(
1.0
);
system
.
addParticle
(
1.0
);
system
.
addParticle
(
0.0
);
system
.
setVirtualSite
(
3
,
new
VirtualSite
::
ThreeParticleAverage
(
0
,
1
,
2
,
0.2
,
0.3
,
0.5
));
system
.
setVirtualSite
(
3
,
new
ThreeParticleAverage
Site
(
0
,
1
,
2
,
0.2
,
0.3
,
0.5
));
CustomExternalForce
*
forceField
=
new
CustomExternalForce
(
"-a*x"
);
system
.
addForce
(
forceField
);
forceField
->
addPerParticleParameter
(
"a"
);
...
...
@@ -165,7 +165,7 @@ void testThreeParticleAverage() {
}
/**
* Test an OutOfPlane virtual site.
* Test an OutOfPlane
Site
virtual site.
*/
void
testOutOfPlane
()
{
ReferencePlatform
platform
;
...
...
@@ -174,7 +174,7 @@ void testOutOfPlane() {
system
.
addParticle
(
1.0
);
system
.
addParticle
(
1.0
);
system
.
addParticle
(
0.0
);
system
.
setVirtualSite
(
3
,
new
VirtualSite
::
OutOfPlane
(
0
,
1
,
2
,
0.3
,
0.4
,
0.5
));
system
.
setVirtualSite
(
3
,
new
OutOfPlane
Site
(
0
,
1
,
2
,
0.3
,
0.4
,
0.5
));
CustomExternalForce
*
forceField
=
new
CustomExternalForce
(
"-a*x"
);
system
.
addForce
(
forceField
);
forceField
->
addPerParticleParameter
(
"a"
);
...
...
@@ -228,7 +228,7 @@ void testConservationLaws() {
system
.
addParticle
(
1.0
);
system
.
addParticle
(
1.0
);
system
.
addParticle
(
0.0
);
system
.
setVirtualSite
(
2
,
new
VirtualSite
::
TwoParticleAverage
(
0
,
1
,
0.4
,
0.6
));
system
.
setVirtualSite
(
2
,
new
TwoParticleAverage
Site
(
0
,
1
,
0.4
,
0.6
));
system
.
addConstraint
(
0
,
1
,
2.0
);
for
(
int
i
=
0
;
i
<
3
;
i
++
)
{
forceField
->
addParticle
(
0
,
1
,
10
);
...
...
@@ -245,7 +245,7 @@ void testConservationLaws() {
system
.
addParticle
(
1.0
);
system
.
addParticle
(
1.0
);
system
.
addParticle
(
0.0
);
system
.
setVirtualSite
(
6
,
new
VirtualSite
::
ThreeParticleAverage
(
3
,
4
,
5
,
0.3
,
0.5
,
0.2
));
system
.
setVirtualSite
(
6
,
new
ThreeParticleAverage
Site
(
3
,
4
,
5
,
0.3
,
0.5
,
0.2
));
system
.
addConstraint
(
3
,
4
,
1.0
);
system
.
addConstraint
(
3
,
5
,
1.0
);
system
.
addConstraint
(
4
,
5
,
sqrt
(
2.0
));
...
...
@@ -265,7 +265,7 @@ void testConservationLaws() {
system
.
addParticle
(
1.0
);
system
.
addParticle
(
1.0
);
system
.
addParticle
(
0.0
);
system
.
setVirtualSite
(
10
,
new
VirtualSite
::
OutOfPlane
(
7
,
8
,
9
,
0.3
,
0.5
,
0.2
));
system
.
setVirtualSite
(
10
,
new
OutOfPlane
Site
(
7
,
8
,
9
,
0.3
,
0.5
,
0.2
));
system
.
addConstraint
(
7
,
8
,
1.0
);
system
.
addConstraint
(
7
,
9
,
1.0
);
system
.
addConstraint
(
8
,
9
,
sqrt
(
2.0
));
...
...
@@ -294,9 +294,9 @@ void testConservationLaws() {
const
vector
<
Vec3
>&
vel
=
state
.
getVelocities
();
const
vector
<
Vec3
>&
f
=
state
.
getForces
();
double
energy
=
state
.
getPotentialEnergy
();
for
(
int
i
=
0
;
i
<
numParticles
;
i
++
)
{
Vec3
v
=
vel
[
i
]
+
f
[
i
]
*
0.5
*
integrator
.
getStepSize
();
energy
+=
0.5
*
system
.
getParticleMass
(
i
)
*
v
.
dot
(
v
);
for
(
int
j
=
0
;
j
<
numParticles
;
j
++
)
{
Vec3
v
=
vel
[
j
]
+
f
[
j
]
*
0.5
*
integrator
.
getStepSize
();
energy
+=
0.5
*
system
.
getParticleMass
(
j
)
*
v
.
dot
(
v
);
}
if
(
i
==
0
)
initialEnergy
=
energy
;
...
...
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