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
93900ab2
"vscode:/vscode.git/clone" did not exist on "e670188bbab456313cf65474cf02568d74d86d20"
Commit
93900ab2
authored
Jan 04, 2011
by
Peter Eastman
Browse files
Updated Amoeba plugin based on refactoring of reference platform
parent
c27f5d1f
Changes
27
Show whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
184 additions
and
155 deletions
+184
-155
plugins/amoeba/platforms/reference/src/AmoebaReferenceKernels.cpp
...amoeba/platforms/reference/src/AmoebaReferenceKernels.cpp
+35
-35
plugins/amoeba/platforms/reference/src/SimTKReference/AmoebaReferenceForce.cpp
...rms/reference/src/SimTKReference/AmoebaReferenceForce.cpp
+3
-1
plugins/amoeba/platforms/reference/src/SimTKReference/AmoebaReferenceForce.h
...forms/reference/src/SimTKReference/AmoebaReferenceForce.h
+2
-2
plugins/amoeba/platforms/reference/src/SimTKReference/AmoebaReferenceHarmonicAngleForce.cpp
.../src/SimTKReference/AmoebaReferenceHarmonicAngleForce.cpp
+9
-6
plugins/amoeba/platforms/reference/src/SimTKReference/AmoebaReferenceHarmonicAngleForce.h
...ce/src/SimTKReference/AmoebaReferenceHarmonicAngleForce.h
+6
-6
plugins/amoeba/platforms/reference/src/SimTKReference/AmoebaReferenceHarmonicBondForce.cpp
...e/src/SimTKReference/AmoebaReferenceHarmonicBondForce.cpp
+8
-5
plugins/amoeba/platforms/reference/src/SimTKReference/AmoebaReferenceHarmonicBondForce.h
...nce/src/SimTKReference/AmoebaReferenceHarmonicBondForce.h
+5
-5
plugins/amoeba/platforms/reference/src/SimTKReference/AmoebaReferenceHarmonicInPlaneAngleForce.cpp
...mTKReference/AmoebaReferenceHarmonicInPlaneAngleForce.cpp
+9
-6
plugins/amoeba/platforms/reference/src/SimTKReference/AmoebaReferenceHarmonicInPlaneAngleForce.h
...SimTKReference/AmoebaReferenceHarmonicInPlaneAngleForce.h
+6
-6
plugins/amoeba/platforms/reference/src/SimTKReference/AmoebaReferenceMultipoleForce.cpp
...ence/src/SimTKReference/AmoebaReferenceMultipoleForce.cpp
+13
-10
plugins/amoeba/platforms/reference/src/SimTKReference/AmoebaReferenceMultipoleForce.h
...erence/src/SimTKReference/AmoebaReferenceMultipoleForce.h
+11
-11
plugins/amoeba/platforms/reference/src/SimTKReference/AmoebaReferenceOutOfPlaneBendForce.cpp
...src/SimTKReference/AmoebaReferenceOutOfPlaneBendForce.cpp
+9
-6
plugins/amoeba/platforms/reference/src/SimTKReference/AmoebaReferenceOutOfPlaneBendForce.h
...e/src/SimTKReference/AmoebaReferenceOutOfPlaneBendForce.h
+6
-6
plugins/amoeba/platforms/reference/src/SimTKReference/AmoebaReferencePiTorsionForce.cpp
...ence/src/SimTKReference/AmoebaReferencePiTorsionForce.cpp
+10
-7
plugins/amoeba/platforms/reference/src/SimTKReference/AmoebaReferencePiTorsionForce.h
...erence/src/SimTKReference/AmoebaReferencePiTorsionForce.h
+7
-7
plugins/amoeba/platforms/reference/src/SimTKReference/AmoebaReferenceStretchBendForce.cpp
...ce/src/SimTKReference/AmoebaReferenceStretchBendForce.cpp
+9
-6
plugins/amoeba/platforms/reference/src/SimTKReference/AmoebaReferenceStretchBendForce.h
...ence/src/SimTKReference/AmoebaReferenceStretchBendForce.h
+6
-6
plugins/amoeba/platforms/reference/src/SimTKReference/AmoebaReferenceTorsionForce.cpp
...erence/src/SimTKReference/AmoebaReferenceTorsionForce.cpp
+9
-6
plugins/amoeba/platforms/reference/src/SimTKReference/AmoebaReferenceTorsionForce.h
...eference/src/SimTKReference/AmoebaReferenceTorsionForce.h
+6
-6
plugins/amoeba/platforms/reference/src/SimTKReference/AmoebaReferenceTorsionTorsionForce.cpp
...src/SimTKReference/AmoebaReferenceTorsionTorsionForce.cpp
+15
-12
No files found.
plugins/amoeba/platforms/reference/src/AmoebaReferenceKernels.cpp
View file @
93900ab2
...
...
@@ -51,24 +51,24 @@
using
namespace
OpenMM
;
using
namespace
std
;
static
RealOpenMM
**
extractPositions
(
ContextImpl
&
context
)
{
static
vector
<
RealVec
>&
extractPositions
(
ContextImpl
&
context
)
{
ReferencePlatform
::
PlatformData
*
data
=
reinterpret_cast
<
ReferencePlatform
::
PlatformData
*>
(
context
.
getPlatformData
());
return
(
RealOpenMM
*
*
)
data
->
positions
;
return
*
((
vector
<
RealVec
>
*
)
data
->
positions
)
;
}
static
RealOpenMM
**
extractVelocities
(
ContextImpl
&
context
)
{
static
vector
<
RealVec
>&
extractVelocities
(
ContextImpl
&
context
)
{
ReferencePlatform
::
PlatformData
*
data
=
reinterpret_cast
<
ReferencePlatform
::
PlatformData
*>
(
context
.
getPlatformData
());
return
(
RealOpenMM
*
*
)
data
->
velocities
;
return
*
((
vector
<
RealVec
>
*
)
data
->
velocities
)
;
}
static
RealOpenMM
**
extractForces
(
ContextImpl
&
context
)
{
static
vector
<
RealVec
>&
extractForces
(
ContextImpl
&
context
)
{
ReferencePlatform
::
PlatformData
*
data
=
reinterpret_cast
<
ReferencePlatform
::
PlatformData
*>
(
context
.
getPlatformData
());
return
(
RealOpenMM
*
*
)
data
->
forces
;
return
*
((
vector
<
RealVec
>
*
)
data
->
forces
)
;
}
static
Real
OpenMM
*
extractBoxSize
(
ContextImpl
&
context
)
{
static
Real
Vec
&
extractBoxSize
(
ContextImpl
&
context
)
{
ReferencePlatform
::
PlatformData
*
data
=
reinterpret_cast
<
ReferencePlatform
::
PlatformData
*>
(
context
.
getPlatformData
());
return
(
Real
OpenMM
*
)
data
->
periodicBoxSize
;
return
*
(
Real
Vec
*
)
data
->
periodicBoxSize
;
}
// ***************************************************************************
...
...
@@ -99,8 +99,8 @@ void ReferenceCalcAmoebaHarmonicBondForceKernel::initialize(const System& system
}
double
ReferenceCalcAmoebaHarmonicBondForceKernel
::
execute
(
ContextImpl
&
context
,
bool
includeForces
,
bool
includeEnergy
)
{
RealOpenMM
**
posData
=
extractPositions
(
context
);
RealOpenMM
**
forceData
=
extractForces
(
context
);
vector
<
RealVec
>&
posData
=
extractPositions
(
context
);
vector
<
RealVec
>&
forceData
=
extractForces
(
context
);
AmoebaReferenceHarmonicBondForce
amoebaReferenceHarmonicBondForce
;
RealOpenMM
energy
=
amoebaReferenceHarmonicBondForce
.
calculateForceAndEnergy
(
numBonds
,
posData
,
particle1
,
particle2
,
length
,
kQuadratic
,
globalHarmonicBondCubic
,
globalHarmonicBondQuartic
,
...
...
@@ -136,8 +136,8 @@ void ReferenceCalcAmoebaUreyBradleyForceKernel::initialize(const System& system,
}
double
ReferenceCalcAmoebaUreyBradleyForceKernel
::
execute
(
ContextImpl
&
context
,
bool
includeForces
,
bool
includeEnergy
)
{
RealOpenMM
**
posData
=
extractPositions
(
context
);
RealOpenMM
**
forceData
=
extractForces
(
context
);
vector
<
RealVec
>&
posData
=
extractPositions
(
context
);
vector
<
RealVec
>&
forceData
=
extractForces
(
context
);
AmoebaReferenceUreyBradleyForce
amoebaReferenceUreyBradleyForce
;
RealOpenMM
energy
=
amoebaReferenceUreyBradleyForce
.
calculateForceAndEnergy
(
numIxns
,
posData
,
particle1
,
particle2
,
length
,
kQuadratic
,
globalUreyBradleyCubic
,
globalUreyBradleyQuartic
,
...
...
@@ -173,8 +173,8 @@ void ReferenceCalcAmoebaHarmonicAngleForceKernel::initialize(const System& syste
}
double
ReferenceCalcAmoebaHarmonicAngleForceKernel
::
execute
(
ContextImpl
&
context
,
bool
includeForces
,
bool
includeEnergy
)
{
RealOpenMM
**
posData
=
extractPositions
(
context
);
RealOpenMM
**
forceData
=
extractForces
(
context
);
vector
<
RealVec
>&
posData
=
extractPositions
(
context
);
vector
<
RealVec
>&
forceData
=
extractForces
(
context
);
AmoebaReferenceHarmonicAngleForce
amoebaReferenceHarmonicAngleForce
;
RealOpenMM
energy
=
amoebaReferenceHarmonicAngleForce
.
calculateForceAndEnergy
(
numAngles
,
posData
,
particle1
,
particle2
,
particle3
,
angle
,
kQuadratic
,
globalHarmonicAngleCubic
,
globalHarmonicAngleQuartic
,
globalHarmonicAnglePentic
,
globalHarmonicAngleSextic
,
forceData
);
...
...
@@ -210,8 +210,8 @@ void ReferenceCalcAmoebaHarmonicInPlaneAngleForceKernel::initialize(const System
double
ReferenceCalcAmoebaHarmonicInPlaneAngleForceKernel
::
execute
(
ContextImpl
&
context
,
bool
includeForces
,
bool
includeEnergy
)
{
RealOpenMM
**
posData
=
extractPositions
(
context
);
RealOpenMM
**
forceData
=
extractForces
(
context
);
vector
<
RealVec
>&
posData
=
extractPositions
(
context
);
vector
<
RealVec
>&
forceData
=
extractForces
(
context
);
AmoebaReferenceHarmonicInPlaneAngleForce
amoebaReferenceHarmonicInPlaneAngleForce
;
RealOpenMM
energy
=
amoebaReferenceHarmonicInPlaneAngleForce
.
calculateForceAndEnergy
(
numAngles
,
posData
,
particle1
,
particle2
,
particle3
,
particle4
,
angle
,
kQuadratic
,
globalHarmonicInPlaneAngleCubic
,
globalHarmonicInPlaneAngleQuartic
,
...
...
@@ -260,8 +260,8 @@ void ReferenceCalcAmoebaTorsionForceKernel::initialize(const System& system, con
}
double
ReferenceCalcAmoebaTorsionForceKernel
::
execute
(
ContextImpl
&
context
,
bool
includeForces
,
bool
includeEnergy
)
{
RealOpenMM
**
posData
=
extractPositions
(
context
);
RealOpenMM
**
forceData
=
extractForces
(
context
);
vector
<
RealVec
>&
posData
=
extractPositions
(
context
);
vector
<
RealVec
>&
forceData
=
extractForces
(
context
);
AmoebaReferenceTorsionForce
amoebaReferenceTorsionForce
;
RealOpenMM
energy
=
amoebaReferenceTorsionForce
.
calculateForceAndEnergy
(
numTorsions
,
posData
,
particle1
,
particle2
,
particle3
,
particle4
,
torsionParameters1
,
torsionParameters2
,
torsionParameters3
,
forceData
);
...
...
@@ -294,8 +294,8 @@ void ReferenceCalcAmoebaPiTorsionForceKernel::initialize(const System& system, c
}
double
ReferenceCalcAmoebaPiTorsionForceKernel
::
execute
(
ContextImpl
&
context
,
bool
includeForces
,
bool
includeEnergy
)
{
RealOpenMM
**
posData
=
extractPositions
(
context
);
RealOpenMM
**
forceData
=
extractForces
(
context
);
vector
<
RealVec
>&
posData
=
extractPositions
(
context
);
vector
<
RealVec
>&
forceData
=
extractForces
(
context
);
AmoebaReferencePiTorsionForce
amoebaReferencePiTorsionForce
;
RealOpenMM
energy
=
amoebaReferencePiTorsionForce
.
calculateForceAndEnergy
(
numPiTorsions
,
posData
,
particle1
,
particle2
,
particle3
,
particle4
,
particle5
,
particle6
,
...
...
@@ -328,8 +328,8 @@ void ReferenceCalcAmoebaStretchBendForceKernel::initialize(const System& system,
}
double
ReferenceCalcAmoebaStretchBendForceKernel
::
execute
(
ContextImpl
&
context
,
bool
includeForces
,
bool
includeEnergy
)
{
RealOpenMM
**
posData
=
extractPositions
(
context
);
RealOpenMM
**
forceData
=
extractForces
(
context
);
vector
<
RealVec
>&
posData
=
extractPositions
(
context
);
vector
<
RealVec
>&
forceData
=
extractForces
(
context
);
AmoebaReferenceStretchBendForce
amoebaReferenceStretchBendForce
;
RealOpenMM
energy
=
amoebaReferenceStretchBendForce
.
calculateForceAndEnergy
(
numStretchBends
,
posData
,
particle1
,
particle2
,
particle3
,
lengthABParameters
,
lengthCBParameters
,
angleParameters
,
kParameters
,
forceData
);
...
...
@@ -366,8 +366,8 @@ void ReferenceCalcAmoebaOutOfPlaneBendForceKernel::initialize(const System& syst
}
double
ReferenceCalcAmoebaOutOfPlaneBendForceKernel
::
execute
(
ContextImpl
&
context
,
bool
includeForces
,
bool
includeEnergy
)
{
RealOpenMM
**
posData
=
extractPositions
(
context
);
RealOpenMM
**
forceData
=
extractForces
(
context
);
vector
<
RealVec
>&
posData
=
extractPositions
(
context
);
vector
<
RealVec
>&
forceData
=
extractForces
(
context
);
AmoebaReferenceOutOfPlaneBendForce
amoebaReferenceOutOfPlaneBendForce
;
RealOpenMM
energy
=
amoebaReferenceOutOfPlaneBendForce
.
calculateForceAndEnergy
(
numOutOfPlaneBends
,
posData
,
particle1
,
particle2
,
particle3
,
particle4
,
...
...
@@ -430,8 +430,8 @@ void ReferenceCalcAmoebaTorsionTorsionForceKernel::initialize(const System& syst
double
ReferenceCalcAmoebaTorsionTorsionForceKernel
::
execute
(
ContextImpl
&
context
,
bool
includeForces
,
bool
includeEnergy
)
{
RealOpenMM
**
posData
=
extractPositions
(
context
);
RealOpenMM
**
forceData
=
extractForces
(
context
);
vector
<
RealVec
>&
posData
=
extractPositions
(
context
);
vector
<
RealVec
>&
forceData
=
extractForces
(
context
);
AmoebaReferenceTorsionTorsionForce
amoebaReferenceTorsionTorsionForce
;
RealOpenMM
energy
=
amoebaReferenceTorsionTorsionForce
.
calculateForceAndEnergy
(
numTorsionTorsions
,
posData
,
particle1
,
particle2
,
particle3
,
particle4
,
particle5
,
...
...
@@ -524,8 +524,8 @@ void ReferenceCalcAmoebaMultipoleForceKernel::initialize(const System& system, c
}
double
ReferenceCalcAmoebaMultipoleForceKernel
::
execute
(
ContextImpl
&
context
,
bool
includeForces
,
bool
includeEnergy
)
{
RealOpenMM
**
posData
=
extractPositions
(
context
);
RealOpenMM
**
forceData
=
extractForces
(
context
);
vector
<
RealVec
>&
posData
=
extractPositions
(
context
);
vector
<
RealVec
>&
forceData
=
extractForces
(
context
);
AmoebaReferenceMultipoleForce
amoebaReferenceMultipoleForce
(
AmoebaReferenceMultipoleForce
::
NoCutoff
);
amoebaReferenceMultipoleForce
.
setMutualInducedDipoleTargetEpsilon
(
mutualInducedTargetEpsilon
);
...
...
@@ -627,8 +627,8 @@ void ReferenceCalcAmoebaVdwForceKernel::initialize(const System& system, const A
double
ReferenceCalcAmoebaVdwForceKernel
::
execute
(
ContextImpl
&
context
,
bool
includeForces
,
bool
includeEnergy
)
{
RealOpenMM
**
posData
=
extractPositions
(
context
);
RealOpenMM
**
forceData
=
extractForces
(
context
);
vector
<
RealVec
>&
posData
=
extractPositions
(
context
);
vector
<
RealVec
>&
forceData
=
extractForces
(
context
);
AmoebaReferenceVdwForce
vdwForce
(
sigmaCombiningRule
,
epsilonCombiningRule
,
AmoebaReferenceVdwForce
::
NoCutoff
);
RealOpenMM
energy
=
vdwForce
.
calculateForceAndEnergy
(
numParticles
,
posData
,
indexIVs
,
indexClasses
,
sigmas
,
epsilons
,
reductions
,
allExclusions
,
forceData
);
return
static_cast
<
double
>
(
energy
);
...
...
@@ -674,8 +674,8 @@ void ReferenceCalcAmoebaWcaDispersionForceKernel::initialize(const System& syste
}
double
ReferenceCalcAmoebaWcaDispersionForceKernel
::
execute
(
ContextImpl
&
context
,
bool
includeForces
,
bool
includeEnergy
)
{
RealOpenMM
**
posData
=
extractPositions
(
context
);
RealOpenMM
**
forceData
=
extractForces
(
context
);
vector
<
RealVec
>&
posData
=
extractPositions
(
context
);
vector
<
RealVec
>&
forceData
=
extractForces
(
context
);
AmoebaReferenceWcaDispersionForce
amoebaReferenceWcaDispersionForce
(
epso
,
epsh
,
rmino
,
rminh
,
awater
,
shctd
,
dispoff
,
slevy
);
RealOpenMM
energy
=
amoebaReferenceWcaDispersionForce
.
calculateForceAndEnergy
(
numParticles
,
posData
,
radii
,
epsilons
,
totalMaximumDispersionEnergy
,
forceData
);
return
static_cast
<
double
>
(
energy
);
...
...
plugins/amoeba/platforms/reference/src/SimTKReference/AmoebaReferenceForce.cpp
View file @
93900ab2
...
...
@@ -25,6 +25,8 @@
#include "AmoebaReferenceForce.h"
#include <vector>
using
OpenMM
::
RealVec
;
/**---------------------------------------------------------------------------------------
Load delta of two vectors
...
...
@@ -35,7 +37,7 @@
--------------------------------------------------------------------------------------- */
void
AmoebaReferenceForce
::
loadDeltaR
(
const
Real
OpenMM
*
xVector
,
const
Real
OpenMM
*
yVector
,
void
AmoebaReferenceForce
::
loadDeltaR
(
const
Real
Vec
&
xVector
,
const
Real
Vec
&
yVector
,
std
::
vector
<
RealOpenMM
>&
deltaR
){
...
...
plugins/amoeba/platforms/reference/src/SimTKReference/AmoebaReferenceForce.h
View file @
93900ab2
...
...
@@ -25,7 +25,7 @@
#ifndef __AmoebaReferenceForce_H__
#define __AmoebaReferenceForce_H__
#include "SimTKUtilities/
SimTKOpenMMRealType
.h"
#include "SimTKUtilities/
RealVec
.h"
#include "openmm/Vec3.h"
#include <vector>
...
...
@@ -62,7 +62,7 @@ public:
--------------------------------------------------------------------------------------- */
static
void
loadDeltaR
(
const
Real
OpenMM
*
xVector
,
const
Real
OpenMM
*
yVector
,
static
void
loadDeltaR
(
const
OpenMM
::
RealVec
&
xVector
,
const
OpenMM
::
RealVec
&
yVector
,
std
::
vector
<
RealOpenMM
>&
deltaR
);
/**---------------------------------------------------------------------------------------
...
...
plugins/amoeba/platforms/reference/src/SimTKReference/AmoebaReferenceHarmonicAngleForce.cpp
View file @
93900ab2
...
...
@@ -25,6 +25,9 @@
#include "AmoebaReferenceForce.h"
#include "AmoebaReferenceHarmonicAngleForce.h"
using
std
::
vector
;
using
OpenMM
::
RealVec
;
/**---------------------------------------------------------------------------------------
Get dEdT and energy prefactor given cosine of angle :: the calculation for different
...
...
@@ -110,12 +113,12 @@ RealOpenMM AmoebaReferenceHarmonicAngleForce::getPrefactorsGivenAngleCosine( Rea
--------------------------------------------------------------------------------------- */
RealOpenMM
AmoebaReferenceHarmonicAngleForce
::
calculateAngleIxn
(
const
Real
OpenMM
*
positionAtomA
,
const
Real
OpenMM
*
positionAtomB
,
const
Real
OpenMM
*
positionAtomC
,
RealOpenMM
AmoebaReferenceHarmonicAngleForce
::
calculateAngleIxn
(
const
Real
Vec
&
positionAtomA
,
const
Real
Vec
&
positionAtomB
,
const
Real
Vec
&
positionAtomC
,
RealOpenMM
angle
,
RealOpenMM
angleK
,
RealOpenMM
angleCubic
,
RealOpenMM
angleQuartic
,
RealOpenMM
anglePentic
,
RealOpenMM
angleSextic
,
Real
OpenMM
*
*
forces
)
const
{
Real
Vec
*
forces
)
const
{
// ---------------------------------------------------------------------------------------
...
...
@@ -180,7 +183,7 @@ RealOpenMM AmoebaReferenceHarmonicAngleForce::calculateAngleIxn( const RealOpenM
return
energy
;
}
RealOpenMM
AmoebaReferenceHarmonicAngleForce
::
calculateForceAndEnergy
(
int
numAngles
,
RealOpenMM
**
posData
,
RealOpenMM
AmoebaReferenceHarmonicAngleForce
::
calculateForceAndEnergy
(
int
numAngles
,
vector
<
RealVec
>&
posData
,
const
std
::
vector
<
int
>&
particle1
,
const
std
::
vector
<
int
>&
particle2
,
const
std
::
vector
<
int
>&
particle3
,
...
...
@@ -190,7 +193,7 @@ RealOpenMM AmoebaReferenceHarmonicAngleForce::calculateForceAndEnergy( int numAn
RealOpenMM
angleQuartic
,
RealOpenMM
anglePentic
,
RealOpenMM
angleSextic
,
RealOpenMM
**
forceData
)
const
{
vector
<
RealVec
>&
forceData
)
const
{
RealOpenMM
energy
=
0.0
;
for
(
unsigned
int
ii
=
0
;
ii
<
numAngles
;
ii
++
)
{
int
particle1Index
=
particle1
[
ii
];
...
...
@@ -198,7 +201,7 @@ RealOpenMM AmoebaReferenceHarmonicAngleForce::calculateForceAndEnergy( int numAn
int
particle3Index
=
particle3
[
ii
];
RealOpenMM
idealAngle
=
angle
[
ii
];
RealOpenMM
angleK
=
kQuadratic
[
ii
];
Real
OpenMM
*
forces
[
3
];
Real
Vec
forces
[
3
];
forces
[
0
]
=
forceData
[
particle1Index
];
forces
[
1
]
=
forceData
[
particle2Index
];
forces
[
2
]
=
forceData
[
particle3Index
];
...
...
plugins/amoeba/platforms/reference/src/SimTKReference/AmoebaReferenceHarmonicAngleForce.h
View file @
93900ab2
...
...
@@ -25,7 +25,7 @@
#ifndef __AmoebaReferenceHarmonicAngleForce_H__
#define __AmoebaReferenceHarmonicAngleForce_H__
#include "SimTKUtilities/
SimTKOpenMMRealType
.h"
#include "SimTKUtilities/
RealVec
.h"
#include <vector>
// ---------------------------------------------------------------------------------------
...
...
@@ -72,7 +72,7 @@ public:
--------------------------------------------------------------------------------------- */
RealOpenMM
calculateForceAndEnergy
(
int
numAngles
,
RealOpenMM
**
posData
,
RealOpenMM
calculateForceAndEnergy
(
int
numAngles
,
std
::
vector
<
OpenMM
::
RealVec
>&
posData
,
const
std
::
vector
<
int
>&
particle1
,
const
std
::
vector
<
int
>&
particle2
,
const
std
::
vector
<
int
>&
particle3
,
...
...
@@ -82,7 +82,7 @@ public:
RealOpenMM
globalHarmonicAngleQuartic
,
RealOpenMM
globalHarmonicAnglePentic
,
RealOpenMM
globalHarmonicAngleSextic
,
RealOpenMM
**
forceData
)
const
;
std
::
vector
<
OpenMM
::
RealVec
>&
forceData
)
const
;
private:
...
...
@@ -128,12 +128,12 @@ private:
--------------------------------------------------------------------------------------- */
RealOpenMM
calculateAngleIxn
(
const
Real
OpenMM
*
positionAtomA
,
const
Real
OpenMM
*
positionAtomB
,
const
Real
OpenMM
*
positionAtomC
,
RealOpenMM
calculateAngleIxn
(
const
OpenMM
::
RealVec
&
positionAtomA
,
const
OpenMM
::
RealVec
&
positionAtomB
,
const
OpenMM
::
RealVec
&
positionAtomC
,
RealOpenMM
angle
,
RealOpenMM
angleK
,
RealOpenMM
angleCubic
,
RealOpenMM
angleQuartic
,
RealOpenMM
anglePentic
,
RealOpenMM
angleSextic
,
Real
OpenMM
*
*
forces
)
const
;
OpenMM
::
RealVec
*
forces
)
const
;
};
...
...
plugins/amoeba/platforms/reference/src/SimTKReference/AmoebaReferenceHarmonicBondForce.cpp
View file @
93900ab2
...
...
@@ -25,6 +25,9 @@
#include "AmoebaReferenceHarmonicBondForce.h"
#include "AmoebaReferenceForce.h"
using
std
::
vector
;
using
OpenMM
::
RealVec
;
/**---------------------------------------------------------------------------------------
Calculate Amoeba harmonic bond ixn (force and energy)
...
...
@@ -41,10 +44,10 @@
--------------------------------------------------------------------------------------- */
RealOpenMM
AmoebaReferenceHarmonicBondForce
::
calculateBondIxn
(
const
Real
OpenMM
*
positionAtomA
,
const
Real
OpenMM
*
positionAtomB
,
RealOpenMM
AmoebaReferenceHarmonicBondForce
::
calculateBondIxn
(
const
Real
Vec
&
positionAtomA
,
const
Real
Vec
&
positionAtomB
,
RealOpenMM
bondLength
,
RealOpenMM
bondK
,
RealOpenMM
bondCubic
,
RealOpenMM
bondQuartic
,
Real
OpenMM
*
*
forces
)
const
{
Real
Vec
*
forces
)
const
{
// ---------------------------------------------------------------------------------------
...
...
@@ -85,21 +88,21 @@ RealOpenMM AmoebaReferenceHarmonicBondForce::calculateBondIxn( const RealOpenMM*
}
RealOpenMM
AmoebaReferenceHarmonicBondForce
::
calculateForceAndEnergy
(
int
numBonds
,
RealOpenMM
**
particlePositions
,
vector
<
RealVec
>&
particlePositions
,
const
std
::
vector
<
int
>&
particle1
,
const
std
::
vector
<
int
>&
particle2
,
const
std
::
vector
<
RealOpenMM
>&
length
,
const
std
::
vector
<
RealOpenMM
>&
kQuadratic
,
RealOpenMM
globalHarmonicBondCubic
,
RealOpenMM
globalHarmonicBondQuartic
,
RealOpenMM
**
forceData
)
const
{
vector
<
RealVec
>&
forceData
)
const
{
RealOpenMM
energy
=
0.0
;
for
(
int
ii
=
0
;
ii
<
numBonds
;
ii
++
){
int
particle1Index
=
particle1
[
ii
];
int
particle2Index
=
particle2
[
ii
];
RealOpenMM
bondLength
=
length
[
ii
];
RealOpenMM
bondK
=
kQuadratic
[
ii
];
Real
OpenMM
*
forces
[
2
];
Real
Vec
forces
[
2
];
forces
[
0
]
=
forceData
[
particle1Index
];
forces
[
1
]
=
forceData
[
particle2Index
];
energy
+=
calculateBondIxn
(
particlePositions
[
particle1Index
],
particlePositions
[
particle2Index
],
...
...
plugins/amoeba/platforms/reference/src/SimTKReference/AmoebaReferenceHarmonicBondForce.h
View file @
93900ab2
...
...
@@ -25,7 +25,7 @@
#ifndef __AmoebaReferenceHarmonicBondForce_H__
#define __AmoebaReferenceHarmonicBondForce_H__
#include "SimTKUtilities/
SimTKOpenMMRealType
.h"
#include "SimTKUtilities/
RealVec
.h"
#include <vector>
// ---------------------------------------------------------------------------------------
...
...
@@ -69,13 +69,13 @@ public:
--------------------------------------------------------------------------------------- */
RealOpenMM
calculateForceAndEnergy
(
int
numBonds
,
RealOpenMM
**
posData
,
RealOpenMM
calculateForceAndEnergy
(
int
numBonds
,
std
::
vector
<
OpenMM
::
RealVec
>&
posData
,
const
std
::
vector
<
int
>&
particle1
,
const
std
::
vector
<
int
>&
particle2
,
const
std
::
vector
<
RealOpenMM
>&
bondLength
,
const
std
::
vector
<
RealOpenMM
>&
bondK
,
RealOpenMM
bondCubic
,
RealOpenMM
bondQuartic
,
RealOpenMM
**
forceData
)
const
;
std
::
vector
<
OpenMM
::
RealVec
>&
forceData
)
const
;
private:
...
...
@@ -95,10 +95,10 @@ private:
--------------------------------------------------------------------------------------- */
RealOpenMM
calculateBondIxn
(
const
Real
OpenMM
*
positionAtomA
,
const
Real
OpenMM
*
positionAtomB
,
RealOpenMM
calculateBondIxn
(
const
OpenMM
::
RealVec
&
positionAtomA
,
const
OpenMM
::
RealVec
&
positionAtomB
,
RealOpenMM
bondLength
,
RealOpenMM
bondK
,
RealOpenMM
bondCubic
,
RealOpenMM
bondQuartic
,
Real
OpenMM
*
*
forces
)
const
;
OpenMM
::
RealVec
*
forces
)
const
;
};
...
...
plugins/amoeba/platforms/reference/src/SimTKReference/AmoebaReferenceHarmonicInPlaneAngleForce.cpp
View file @
93900ab2
...
...
@@ -25,6 +25,9 @@
#include "AmoebaReferenceForce.h"
#include "AmoebaReferenceHarmonicInPlaneAngleForce.h"
using
std
::
vector
;
using
OpenMM
::
RealVec
;
/**---------------------------------------------------------------------------------------
Get dEdT and energy prefactor given cosine of angle :: the calculation for different
...
...
@@ -111,12 +114,12 @@ RealOpenMM AmoebaReferenceHarmonicInPlaneAngleForce::getPrefactorsGivenAngleCosi
--------------------------------------------------------------------------------------- */
RealOpenMM
AmoebaReferenceHarmonicInPlaneAngleForce
::
calculateAngleIxn
(
const
Real
OpenMM
*
positionAtomA
,
const
Real
OpenMM
*
positionAtomB
,
const
Real
OpenMM
*
positionAtomC
,
const
Real
OpenMM
*
positionAtomD
,
RealOpenMM
AmoebaReferenceHarmonicInPlaneAngleForce
::
calculateAngleIxn
(
const
Real
Vec
&
positionAtomA
,
const
Real
Vec
&
positionAtomB
,
const
Real
Vec
&
positionAtomC
,
const
Real
Vec
&
positionAtomD
,
RealOpenMM
angle
,
RealOpenMM
angleK
,
RealOpenMM
angleCubic
,
RealOpenMM
angleQuartic
,
RealOpenMM
anglePentic
,
RealOpenMM
angleSextic
,
Real
OpenMM
*
*
forces
)
const
{
Real
Vec
*
forces
)
const
{
// ---------------------------------------------------------------------------------------
...
...
@@ -242,7 +245,7 @@ RealOpenMM AmoebaReferenceHarmonicInPlaneAngleForce::calculateAngleIxn( const Re
}
RealOpenMM
AmoebaReferenceHarmonicInPlaneAngleForce
::
calculateForceAndEnergy
(
int
numAngles
,
RealOpenMM
**
posData
,
RealOpenMM
AmoebaReferenceHarmonicInPlaneAngleForce
::
calculateForceAndEnergy
(
int
numAngles
,
vector
<
RealVec
>&
posData
,
const
std
::
vector
<
int
>&
particle1
,
const
std
::
vector
<
int
>&
particle2
,
const
std
::
vector
<
int
>&
particle3
,
...
...
@@ -253,7 +256,7 @@ RealOpenMM AmoebaReferenceHarmonicInPlaneAngleForce::calculateForceAndEnergy( in
RealOpenMM
angleQuartic
,
RealOpenMM
anglePentic
,
RealOpenMM
angleSextic
,
RealOpenMM
**
forceData
)
const
{
vector
<
RealVec
>&
forceData
)
const
{
RealOpenMM
energy
=
0.0
;
for
(
unsigned
int
ii
=
0
;
ii
<
numAngles
;
ii
++
)
{
int
particle1Index
=
particle1
[
ii
];
...
...
@@ -262,7 +265,7 @@ RealOpenMM AmoebaReferenceHarmonicInPlaneAngleForce::calculateForceAndEnergy( in
int
particle4Index
=
particle4
[
ii
];
RealOpenMM
idealAngle
=
angle
[
ii
];
RealOpenMM
angleK
=
kQuadratic
[
ii
];
Real
OpenMM
*
forces
[
4
];
Real
Vec
forces
[
4
];
forces
[
0
]
=
forceData
[
particle1Index
];
forces
[
1
]
=
forceData
[
particle2Index
];
forces
[
2
]
=
forceData
[
particle3Index
];
...
...
plugins/amoeba/platforms/reference/src/SimTKReference/AmoebaReferenceHarmonicInPlaneAngleForce.h
View file @
93900ab2
...
...
@@ -25,7 +25,7 @@
#ifndef __AmoebaReferenceHarmonicInPlaneAngleForce_H__
#define __AmoebaReferenceHarmonicInPlaneAngleForce_H__
#include "SimTKUtilities/
SimTKOpenMMRealType
.h"
#include "SimTKUtilities/
RealVec
.h"
#include <vector>
// ---------------------------------------------------------------------------------------
...
...
@@ -73,7 +73,7 @@ public:
--------------------------------------------------------------------------------------- */
RealOpenMM
calculateForceAndEnergy
(
int
numAngles
,
RealOpenMM
**
posData
,
RealOpenMM
calculateForceAndEnergy
(
int
numAngles
,
std
::
vector
<
OpenMM
::
RealVec
>&
posData
,
const
std
::
vector
<
int
>&
particle1
,
const
std
::
vector
<
int
>&
particle2
,
const
std
::
vector
<
int
>&
particle3
,
...
...
@@ -84,7 +84,7 @@ public:
RealOpenMM
globalHarmonicAngleQuartic
,
RealOpenMM
globalHarmonicAnglePentic
,
RealOpenMM
globalHarmonicAngleSextic
,
RealOpenMM
**
forceData
)
const
;
std
::
vector
<
OpenMM
::
RealVec
>&
forceData
)
const
;
private:
...
...
@@ -131,12 +131,12 @@ private:
--------------------------------------------------------------------------------------- */
RealOpenMM
calculateAngleIxn
(
const
Real
OpenMM
*
positionAtomA
,
const
Real
OpenMM
*
positionAtomB
,
const
Real
OpenMM
*
positionAtomC
,
const
Real
OpenMM
*
positionAtomD
,
RealOpenMM
calculateAngleIxn
(
const
OpenMM
::
RealVec
&
positionAtomA
,
const
OpenMM
::
RealVec
&
positionAtomB
,
const
OpenMM
::
RealVec
&
positionAtomC
,
const
OpenMM
::
RealVec
&
positionAtomD
,
RealOpenMM
angle
,
RealOpenMM
angleK
,
RealOpenMM
angleCubic
,
RealOpenMM
angleQuartic
,
RealOpenMM
anglePentic
,
RealOpenMM
angleSextic
,
Real
OpenMM
*
*
forces
)
const
;
OpenMM
::
RealVec
*
forces
)
const
;
};
...
...
plugins/amoeba/platforms/reference/src/SimTKReference/AmoebaReferenceMultipoleForce.cpp
View file @
93900ab2
...
...
@@ -27,6 +27,9 @@
#include <sstream>
#include <algorithm>
using
std
::
vector
;
using
OpenMM
::
RealVec
;
#define AMOEBA_DEBUG
AmoebaReferenceMultipoleForce
::
AmoebaReferenceMultipoleForce
(
)
:
_nonbondedMethod
(
NoCutoff
)
{
...
...
@@ -134,7 +137,7 @@ void AmoebaReferenceMultipoleForce::setMutualInducedDipoleTargetEpsilon( RealOpe
_mutualInducedDipoleTargetEpsilon
=
mutualInducedDipoleTargetEpsilon
;
}
void
AmoebaReferenceMultipoleForce
::
getDelta
(
unsigned
int
particleI
,
unsigned
int
particleJ
,
RealOpenMM
**
particlePositions
,
void
AmoebaReferenceMultipoleForce
::
getDelta
(
unsigned
int
particleI
,
unsigned
int
particleJ
,
vector
<
RealVec
>&
particlePositions
,
RealOpenMM
*
delta
)
const
{
delta
[
0
]
=
particlePositions
[
particleJ
][
0
]
-
particlePositions
[
particleI
][
0
];
...
...
@@ -332,7 +335,7 @@ void AmoebaReferenceMultipoleForce::getScaleFactors( unsigned int particleI, uns
scaleFactors
[
U_SCALE
]
=
getScaleFactor
(
particleI
,
particleJ
,
U_SCALE
);
}
void
AmoebaReferenceMultipoleForce
::
loadParticleData
(
RealOpenMM
**
particlePositions
,
void
AmoebaReferenceMultipoleForce
::
loadParticleData
(
vector
<
RealVec
>&
particlePositions
,
const
std
::
vector
<
RealOpenMM
>&
charges
,
const
std
::
vector
<
RealOpenMM
>&
dipoles
,
const
std
::
vector
<
RealOpenMM
>&
quadrupoles
,
...
...
@@ -1023,7 +1026,7 @@ fprintf( stderr, "MIb %3u eps=%15.7e %15.7e %15.7e\n", iteration, epsilonDirect,
RealOpenMM
AmoebaReferenceMultipoleForce
::
calculateNoCutoffElectrostaticPairIxn
(
const
MultipoleParticleData
&
particleI
,
const
MultipoleParticleData
&
particleK
,
RealOpenMM
*
scalingFactors
,
RealOpenMM
**
forces
,
RealOpenMM
*
scalingFactors
,
vector
<
RealVec
>&
forces
,
std
::
vector
<
Vec3
>&
torque
)
const
{
// ---------------------------------------------------------------------------------------
...
...
@@ -1545,7 +1548,7 @@ void AmoebaReferenceMultipoleForce::mapTorqueToForce( const MultipoleParticleDat
const
MultipoleParticleData
&
particleU
,
const
MultipoleParticleData
&
particleV
,
MultipoleParticleData
*
particleW
,
int
axisType
,
const
Vec3
&
torque
,
RealOpenMM
**
forces
)
const
{
int
axisType
,
const
Vec3
&
torque
,
vector
<
RealVec
>&
forces
)
const
{
// ---------------------------------------------------------------------------------------
...
...
@@ -1782,7 +1785,7 @@ void AmoebaReferenceMultipoleForce::mapTorqueToForce( const MultipoleParticleDat
void
AmoebaReferenceMultipoleForce
::
mapTorqueToForceOld
(
const
MultipoleParticleData
&
particleI
,
const
MultipoleParticleData
&
particleU
,
const
MultipoleParticleData
&
particleV
,
int
axisType
,
const
Vec3
&
torque
,
RealOpenMM
**
forces
)
const
{
int
axisType
,
const
Vec3
&
torque
,
vector
<
RealVec
>&
forces
)
const
{
// ---------------------------------------------------------------------------------------
...
...
@@ -1877,7 +1880,7 @@ RealOpenMM AmoebaReferenceMultipoleForce::calculateNoCutoffElectrostatic( std::v
const
std
::
vector
<
int
>&
multipoleAtomZs
,
const
std
::
vector
<
int
>&
multipoleAtomXs
,
const
std
::
vector
<
int
>&
multipoleAtomYs
,
RealOpenMM
**
forces
)
const
{
vector
<
RealVec
>&
forces
)
const
{
// ---------------------------------------------------------------------------------------
...
...
@@ -1982,7 +1985,7 @@ RealOpenMM AmoebaReferenceMultipoleForce::calculateNoCutoffElectrostatic( std::v
}
RealOpenMM
AmoebaReferenceMultipoleForce
::
calculateNoCutoffForceAndEnergy
(
unsigned
int
numParticles
,
RealOpenMM
**
particlePositions
,
vector
<
RealVec
>&
particlePositions
,
const
std
::
vector
<
RealOpenMM
>&
charges
,
const
std
::
vector
<
RealOpenMM
>&
dipoles
,
const
std
::
vector
<
RealOpenMM
>&
quadrupoles
,
...
...
@@ -1993,7 +1996,7 @@ RealOpenMM AmoebaReferenceMultipoleForce::calculateNoCutoffForceAndEnergy( unsig
const
std
::
vector
<
int
>&
multipoleAtomZs
,
const
std
::
vector
<
int
>&
multipoleAtomXs
,
const
std
::
vector
<
int
>&
multipoleAtomYs
,
RealOpenMM
**
forces
){
vector
<
RealVec
>&
forces
){
// ---------------------------------------------------------------------------------------
...
...
@@ -2091,7 +2094,7 @@ RealOpenMM AmoebaReferenceMultipoleForce::calculateNoCutoffForceAndEnergy( unsig
}
RealOpenMM
AmoebaReferenceMultipoleForce
::
calculateForceAndEnergy
(
int
numParticles
,
RealOpenMM
**
particlePositions
,
vector
<
RealVec
>&
particlePositions
,
const
std
::
vector
<
RealOpenMM
>&
charges
,
const
std
::
vector
<
RealOpenMM
>&
dipoles
,
const
std
::
vector
<
RealOpenMM
>&
quadrupoles
,
...
...
@@ -2103,7 +2106,7 @@ RealOpenMM AmoebaReferenceMultipoleForce::calculateForceAndEnergy( int numPartic
const
std
::
vector
<
int
>&
multipoleAtomXs
,
const
std
::
vector
<
int
>&
multipoleAtomYs
,
const
std
::
vector
<
std
::
vector
<
std
::
vector
<
int
>
>
>&
multipoleParticleCovalentInfo
,
RealOpenMM
**
forces
){
vector
<
RealVec
>&
forces
){
setupScaleMaps
(
multipoleParticleCovalentInfo
);
...
...
plugins/amoeba/platforms/reference/src/SimTKReference/AmoebaReferenceMultipoleForce.h
View file @
93900ab2
...
...
@@ -25,7 +25,7 @@
#ifndef __AmoebaReferenceMultipoleForce_H__
#define __AmoebaReferenceMultipoleForce_H__
#include "SimTKUtilities/
SimTKOpenMMRealType
.h"
#include "SimTKUtilities/
RealVec
.h"
#include "openmm/Vec3.h"
#include "AmoebaMultipoleForce.h"
#include <string>
...
...
@@ -203,7 +203,7 @@ public:
--------------------------------------------------------------------------------------- */
RealOpenMM
calculateForceAndEnergy
(
int
numParticles
,
RealOpenMM
**
particlePositions
,
RealOpenMM
calculateForceAndEnergy
(
int
numParticles
,
std
::
vector
<
OpenMM
::
RealVec
>&
particlePositions
,
const
std
::
vector
<
RealOpenMM
>&
charges
,
const
std
::
vector
<
RealOpenMM
>&
dipoles
,
const
std
::
vector
<
RealOpenMM
>&
quadrupoles
,
...
...
@@ -215,7 +215,7 @@ public:
const
std
::
vector
<
int
>&
multipoleAtomXs
,
const
std
::
vector
<
int
>&
multipoleAtomYs
,
const
std
::
vector
<
std
::
vector
<
std
::
vector
<
int
>
>
>&
multipoleAtomCovalentInfo
,
RealOpenMM
**
forces
);
std
::
vector
<
OpenMM
::
RealVec
>&
forces
);
...
...
@@ -270,7 +270,7 @@ private:
void
initialize
(
void
);
void
loadParticleData
(
RealOpenMM
**
particlePositions
,
void
loadParticleData
(
std
::
vector
<
OpenMM
::
RealVec
>&
particlePositions
,
const
std
::
vector
<
RealOpenMM
>&
charges
,
const
std
::
vector
<
RealOpenMM
>&
dipoles
,
const
std
::
vector
<
RealOpenMM
>&
quadrupoles
,
...
...
@@ -319,7 +319,7 @@ private:
--------------------------------------------------------------------------------------- */
void
getDelta
(
unsigned
int
particleI
,
unsigned
int
particleJ
,
RealOpenMM
**
particlePositions
,
RealOpenMM
*
delta
)
const
;
void
getDelta
(
unsigned
int
particleI
,
unsigned
int
particleJ
,
std
::
vector
<
OpenMM
::
RealVec
>&
particlePositions
,
RealOpenMM
*
delta
)
const
;
/**---------------------------------------------------------------------------------------
...
...
@@ -464,7 +464,7 @@ private:
RealOpenMM
calculateNoCutoffElectrostaticPairIxn
(
const
MultipoleParticleData
&
particleI
,
const
MultipoleParticleData
&
particleK
,
RealOpenMM
*
scalingFactors
,
RealOpenMM
**
forces
,
std
::
vector
<
Vec3
>&
torque
)
const
;
RealOpenMM
*
scalingFactors
,
std
::
vector
<
OpenMM
::
RealVec
>&
forces
,
std
::
vector
<
Vec3
>&
torque
)
const
;
/**---------------------------------------------------------------------------------------
...
...
@@ -483,19 +483,19 @@ private:
const
MultipoleParticleData
&
particleU
,
const
MultipoleParticleData
&
particleV
,
MultipoleParticleData
*
particleW
,
int
axisType
,
const
Vec3
&
torque
,
RealOpenMM
**
forces
)
const
;
int
axisType
,
const
Vec3
&
torque
,
std
::
vector
<
OpenMM
::
RealVec
>&
forces
)
const
;
void
mapTorqueToForceOld
(
const
MultipoleParticleData
&
particleI
,
const
MultipoleParticleData
&
particleU
,
const
MultipoleParticleData
&
particleV
,
int
axisType
,
const
Vec3
&
torque
,
RealOpenMM
**
forces
)
const
;
int
axisType
,
const
Vec3
&
torque
,
std
::
vector
<
OpenMM
::
RealVec
>&
forces
)
const
;
RealOpenMM
calculateNoCutoffElectrostatic
(
std
::
vector
<
MultipoleParticleData
>&
particleData
,
const
std
::
vector
<
int
>&
axisTypes
,
const
std
::
vector
<
int
>&
multipoleAtomZs
,
const
std
::
vector
<
int
>&
multipoleAtomXs
,
const
std
::
vector
<
int
>&
multipoleAtomYs
,
RealOpenMM
**
forces
)
const
;
std
::
vector
<
OpenMM
::
RealVec
>&
forces
)
const
;
/**---------------------------------------------------------------------------------------
...
...
@@ -515,7 +515,7 @@ private:
--------------------------------------------------------------------------------------- */
RealOpenMM
calculateNoCutoffForceAndEnergy
(
unsigned
int
numParticles
,
RealOpenMM
**
particlePositions
,
RealOpenMM
calculateNoCutoffForceAndEnergy
(
unsigned
int
numParticles
,
std
::
vector
<
OpenMM
::
RealVec
>&
particlePositions
,
const
std
::
vector
<
RealOpenMM
>&
charges
,
const
std
::
vector
<
RealOpenMM
>&
dipoles
,
const
std
::
vector
<
RealOpenMM
>&
quadrupoles
,
...
...
@@ -526,7 +526,7 @@ private:
const
std
::
vector
<
int
>&
multipoleAtomZs
,
const
std
::
vector
<
int
>&
multipoleAtomXs
,
const
std
::
vector
<
int
>&
multipoleAtomYs
,
RealOpenMM
**
forces
);
std
::
vector
<
OpenMM
::
RealVec
>&
forces
);
};
...
...
plugins/amoeba/platforms/reference/src/SimTKReference/AmoebaReferenceOutOfPlaneBendForce.cpp
View file @
93900ab2
...
...
@@ -25,6 +25,9 @@
#include "AmoebaReferenceForce.h"
#include "AmoebaReferenceOutOfPlaneBendForce.h"
using
std
::
vector
;
using
OpenMM
::
RealVec
;
/**---------------------------------------------------------------------------------------
Calculate Amoeba Out-Of-Plane-Bend ixn (force and energy)
...
...
@@ -45,12 +48,12 @@
--------------------------------------------------------------------------------------- */
RealOpenMM
AmoebaReferenceOutOfPlaneBendForce
::
calculateOutOfPlaneBendIxn
(
const
Real
OpenMM
*
positionAtomA
,
const
Real
OpenMM
*
positionAtomB
,
const
Real
OpenMM
*
positionAtomC
,
const
Real
OpenMM
*
positionAtomD
,
RealOpenMM
AmoebaReferenceOutOfPlaneBendForce
::
calculateOutOfPlaneBendIxn
(
const
Real
Vec
&
positionAtomA
,
const
Real
Vec
&
positionAtomB
,
const
Real
Vec
&
positionAtomC
,
const
Real
Vec
&
positionAtomD
,
RealOpenMM
angleK
,
RealOpenMM
angleCubic
,
RealOpenMM
angleQuartic
,
RealOpenMM
anglePentic
,
RealOpenMM
angleSextic
,
Real
OpenMM
*
*
forces
)
const
{
Real
Vec
*
forces
)
const
{
// ---------------------------------------------------------------------------------------
...
...
@@ -193,7 +196,7 @@ RealOpenMM AmoebaReferenceOutOfPlaneBendForce::calculateOutOfPlaneBendIxn( const
return
energy
;
}
RealOpenMM
AmoebaReferenceOutOfPlaneBendForce
::
calculateForceAndEnergy
(
int
numOutOfPlaneBends
,
RealOpenMM
**
posData
,
RealOpenMM
AmoebaReferenceOutOfPlaneBendForce
::
calculateForceAndEnergy
(
int
numOutOfPlaneBends
,
vector
<
RealVec
>&
posData
,
const
std
::
vector
<
int
>&
particle1
,
const
std
::
vector
<
int
>&
particle2
,
const
std
::
vector
<
int
>&
particle3
,
...
...
@@ -203,7 +206,7 @@ RealOpenMM AmoebaReferenceOutOfPlaneBendForce::calculateForceAndEnergy( int numO
RealOpenMM
angleQuartic
,
RealOpenMM
anglePentic
,
RealOpenMM
angleSextic
,
RealOpenMM
**
forceData
)
const
{
vector
<
RealVec
>&
forceData
)
const
{
RealOpenMM
energy
=
0.0
;
for
(
unsigned
int
ii
=
0
;
ii
<
static_cast
<
unsigned
int
>
(
numOutOfPlaneBends
);
ii
++
)
{
int
particle1Index
=
particle1
[
ii
];
...
...
@@ -211,7 +214,7 @@ RealOpenMM AmoebaReferenceOutOfPlaneBendForce::calculateForceAndEnergy( int numO
int
particle3Index
=
particle3
[
ii
];
int
particle4Index
=
particle4
[
ii
];
RealOpenMM
kAngle
=
kQuadratic
[
ii
];
Real
OpenMM
*
forces
[
4
];
Real
Vec
forces
[
4
];
forces
[
0
]
=
forceData
[
particle1Index
];
forces
[
1
]
=
forceData
[
particle2Index
];
forces
[
2
]
=
forceData
[
particle3Index
];
...
...
plugins/amoeba/platforms/reference/src/SimTKReference/AmoebaReferenceOutOfPlaneBendForce.h
View file @
93900ab2
...
...
@@ -25,7 +25,7 @@
#ifndef __AmoebaReferenceOutOfPlaneBendForce_H__
#define __AmoebaReferenceOutOfPlaneBendForce_H__
#include "SimTKUtilities/
SimTKOpenMMRealType
.h"
#include "SimTKUtilities/
RealVec
.h"
#include <vector>
// ---------------------------------------------------------------------------------------
...
...
@@ -72,7 +72,7 @@ public:
--------------------------------------------------------------------------------------- */
RealOpenMM
calculateForceAndEnergy
(
int
numOutOfPlaneBends
,
RealOpenMM
**
posData
,
RealOpenMM
calculateForceAndEnergy
(
int
numOutOfPlaneBends
,
std
::
vector
<
OpenMM
::
RealVec
>&
posData
,
const
std
::
vector
<
int
>&
particle1
,
const
std
::
vector
<
int
>&
particle2
,
const
std
::
vector
<
int
>&
particle3
,
...
...
@@ -82,7 +82,7 @@ public:
RealOpenMM
angleQuartic
,
RealOpenMM
anglePentic
,
RealOpenMM
angleSextic
,
RealOpenMM
**
forceData
)
const
;
std
::
vector
<
OpenMM
::
RealVec
>&
forceData
)
const
;
private:
...
...
@@ -105,12 +105,12 @@ private:
--------------------------------------------------------------------------------------- */
RealOpenMM
calculateOutOfPlaneBendIxn
(
const
Real
OpenMM
*
positionAtomA
,
const
Real
OpenMM
*
positionAtomB
,
const
Real
OpenMM
*
positionAtomC
,
const
Real
OpenMM
*
positionAtomD
,
RealOpenMM
calculateOutOfPlaneBendIxn
(
const
OpenMM
::
RealVec
&
positionAtomA
,
const
OpenMM
::
RealVec
&
positionAtomB
,
const
OpenMM
::
RealVec
&
positionAtomC
,
const
OpenMM
::
RealVec
&
positionAtomD
,
RealOpenMM
angleK
,
RealOpenMM
angleCubic
,
RealOpenMM
angleQuartic
,
RealOpenMM
anglePentic
,
RealOpenMM
angleSextic
,
Real
OpenMM
*
*
forces
)
const
;
OpenMM
::
RealVec
*
forces
)
const
;
};
...
...
plugins/amoeba/platforms/reference/src/SimTKReference/AmoebaReferencePiTorsionForce.cpp
View file @
93900ab2
...
...
@@ -26,6 +26,9 @@
#include "AmoebaReferencePiTorsionForce.h"
#include <vector>
using
std
::
vector
;
using
OpenMM
::
RealVec
;
/**---------------------------------------------------------------------------------------
Calculate Amoeba pi-torsion ixn (force and energy)
...
...
@@ -43,10 +46,10 @@
--------------------------------------------------------------------------------------- */
RealOpenMM
AmoebaReferencePiTorsionForce
::
calculatePiTorsionIxn
(
const
Real
OpenMM
*
positionAtomA
,
const
Real
OpenMM
*
positionAtomB
,
const
Real
OpenMM
*
positionAtomC
,
const
Real
OpenMM
*
positionAtomD
,
const
Real
OpenMM
*
positionAtomE
,
const
Real
OpenMM
*
positionAtomF
,
RealOpenMM
piTorsionK
,
Real
OpenMM
*
*
forces
)
const
{
RealOpenMM
AmoebaReferencePiTorsionForce
::
calculatePiTorsionIxn
(
const
Real
Vec
&
positionAtomA
,
const
Real
Vec
&
positionAtomB
,
const
Real
Vec
&
positionAtomC
,
const
Real
Vec
&
positionAtomD
,
const
Real
Vec
&
positionAtomE
,
const
Real
Vec
&
positionAtomF
,
RealOpenMM
piTorsionK
,
Real
Vec
*
forces
)
const
{
// ---------------------------------------------------------------------------------------
...
...
@@ -183,7 +186,7 @@ RealOpenMM AmoebaReferencePiTorsionForce::calculatePiTorsionIxn( const RealOpenM
}
RealOpenMM
AmoebaReferencePiTorsionForce
::
calculateForceAndEnergy
(
int
numPiTorsions
,
RealOpenMM
**
posData
,
RealOpenMM
AmoebaReferencePiTorsionForce
::
calculateForceAndEnergy
(
int
numPiTorsions
,
vector
<
RealVec
>&
posData
,
const
std
::
vector
<
int
>&
particle1
,
const
std
::
vector
<
int
>&
particle2
,
const
std
::
vector
<
int
>&
particle3
,
...
...
@@ -191,7 +194,7 @@ RealOpenMM AmoebaReferencePiTorsionForce::calculateForceAndEnergy( int numPiTors
const
std
::
vector
<
int
>&
particle5
,
const
std
::
vector
<
int
>&
particle6
,
const
std
::
vector
<
RealOpenMM
>&
kTorsion
,
RealOpenMM
**
forceData
)
const
{
vector
<
RealVec
>&
forceData
)
const
{
RealOpenMM
energy
=
0.0
;
for
(
unsigned
int
ii
=
0
;
ii
<
static_cast
<
unsigned
int
>
(
numPiTorsions
);
ii
++
)
{
...
...
@@ -202,7 +205,7 @@ RealOpenMM AmoebaReferencePiTorsionForce::calculateForceAndEnergy( int numPiTors
int
particle5Index
=
particle5
[
ii
];
int
particle6Index
=
particle6
[
ii
];
Real
OpenMM
*
forces
[
6
];
Real
Vec
forces
[
6
];
forces
[
0
]
=
forceData
[
particle1Index
];
forces
[
1
]
=
forceData
[
particle2Index
];
forces
[
2
]
=
forceData
[
particle3Index
];
...
...
plugins/amoeba/platforms/reference/src/SimTKReference/AmoebaReferencePiTorsionForce.h
View file @
93900ab2
...
...
@@ -25,7 +25,7 @@
#ifndef __AmoebaReferencePiTorsionForce_H__
#define __AmoebaReferencePiTorsionForce_H__
#include "SimTKUtilities/
SimTKOpenMMRealType
.h"
#include "SimTKUtilities/
RealVec
.h"
#include <vector>
// ---------------------------------------------------------------------------------------
...
...
@@ -72,7 +72,7 @@ public:
--------------------------------------------------------------------------------------- */
RealOpenMM
calculateForceAndEnergy
(
int
numPiTorsions
,
RealOpenMM
**
posData
,
RealOpenMM
calculateForceAndEnergy
(
int
numPiTorsions
,
std
::
vector
<
OpenMM
::
RealVec
>&
posData
,
const
std
::
vector
<
int
>&
particle1
,
const
std
::
vector
<
int
>&
particle2
,
const
std
::
vector
<
int
>&
particle3
,
...
...
@@ -80,7 +80,7 @@ public:
const
std
::
vector
<
int
>&
particle5
,
const
std
::
vector
<
int
>&
particle6
,
const
std
::
vector
<
RealOpenMM
>&
kTorsion
,
RealOpenMM
**
forceData
)
const
;
std
::
vector
<
OpenMM
::
RealVec
>&
forceData
)
const
;
private:
...
...
@@ -102,10 +102,10 @@ private:
--------------------------------------------------------------------------------------- */
RealOpenMM
calculatePiTorsionIxn
(
const
Real
OpenMM
*
positionAtomA
,
const
Real
OpenMM
*
positionAtomB
,
const
Real
OpenMM
*
positionAtomC
,
const
Real
OpenMM
*
positionAtomD
,
const
Real
OpenMM
*
positionAtomE
,
const
Real
OpenMM
*
positionAtomF
,
RealOpenMM
kTorsion
,
Real
OpenMM
*
*
forces
)
const
;
RealOpenMM
calculatePiTorsionIxn
(
const
OpenMM
::
RealVec
&
positionAtomA
,
const
OpenMM
::
RealVec
&
positionAtomB
,
const
OpenMM
::
RealVec
&
positionAtomC
,
const
OpenMM
::
RealVec
&
positionAtomD
,
const
OpenMM
::
RealVec
&
positionAtomE
,
const
OpenMM
::
RealVec
&
positionAtomF
,
RealOpenMM
kTorsion
,
OpenMM
::
RealVec
*
forces
)
const
;
};
...
...
plugins/amoeba/platforms/reference/src/SimTKReference/AmoebaReferenceStretchBendForce.cpp
View file @
93900ab2
...
...
@@ -26,6 +26,9 @@
#include "AmoebaReferenceStretchBendForce.h"
#include <vector>
using
std
::
vector
;
using
OpenMM
::
RealVec
;
/**---------------------------------------------------------------------------------------
Calculate Amoeba stretch bend angle ixn (force and energy)
...
...
@@ -46,11 +49,11 @@
--------------------------------------------------------------------------------------- */
RealOpenMM
AmoebaReferenceStretchBendForce
::
calculateStretchBendIxn
(
const
Real
OpenMM
*
positionAtomA
,
const
Real
OpenMM
*
positionAtomB
,
const
Real
OpenMM
*
positionAtomC
,
RealOpenMM
AmoebaReferenceStretchBendForce
::
calculateStretchBendIxn
(
const
Real
Vec
&
positionAtomA
,
const
Real
Vec
&
positionAtomB
,
const
Real
Vec
&
positionAtomC
,
RealOpenMM
lengthAB
,
RealOpenMM
lengthCB
,
RealOpenMM
idealAngle
,
RealOpenMM
kParameter
,
Real
OpenMM
*
*
forces
)
const
{
Real
Vec
*
forces
)
const
{
// ---------------------------------------------------------------------------------------
...
...
@@ -144,7 +147,7 @@ RealOpenMM AmoebaReferenceStretchBendForce::calculateStretchBendIxn( const RealO
return
(
kParameter
*
dt
*
dr
);
}
RealOpenMM
AmoebaReferenceStretchBendForce
::
calculateForceAndEnergy
(
int
numStretchBends
,
RealOpenMM
**
posData
,
RealOpenMM
AmoebaReferenceStretchBendForce
::
calculateForceAndEnergy
(
int
numStretchBends
,
vector
<
RealVec
>&
posData
,
const
std
::
vector
<
int
>&
particle1
,
const
std
::
vector
<
int
>&
particle2
,
const
std
::
vector
<
int
>&
particle3
,
...
...
@@ -152,7 +155,7 @@ RealOpenMM AmoebaReferenceStretchBendForce::calculateForceAndEnergy( int numStre
const
std
::
vector
<
RealOpenMM
>&
lengthCBParameters
,
const
std
::
vector
<
RealOpenMM
>&
angle
,
const
std
::
vector
<
RealOpenMM
>&
kQuadratic
,
RealOpenMM
**
forceData
)
const
{
vector
<
RealVec
>&
forceData
)
const
{
RealOpenMM
energy
=
0.0
;
for
(
unsigned
int
ii
=
0
;
ii
<
static_cast
<
unsigned
int
>
(
numStretchBends
);
ii
++
)
{
int
particle1Index
=
particle1
[
ii
];
...
...
@@ -162,7 +165,7 @@ RealOpenMM AmoebaReferenceStretchBendForce::calculateForceAndEnergy( int numStre
RealOpenMM
cbLength
=
lengthCBParameters
[
ii
];
RealOpenMM
idealAngle
=
angle
[
ii
];
RealOpenMM
angleK
=
kQuadratic
[
ii
];
Real
OpenMM
*
forces
[
3
];
Real
Vec
forces
[
3
];
forces
[
0
]
=
forceData
[
particle1Index
];
forces
[
1
]
=
forceData
[
particle2Index
];
forces
[
2
]
=
forceData
[
particle3Index
];
...
...
plugins/amoeba/platforms/reference/src/SimTKReference/AmoebaReferenceStretchBendForce.h
View file @
93900ab2
...
...
@@ -25,7 +25,7 @@
#ifndef __AmoebaReferenceStretchBendForce_H__
#define __AmoebaReferenceStretchBendForce_H__
#include "SimTKUtilities/
SimTKOpenMMRealType
.h"
#include "SimTKUtilities/
RealVec
.h"
#include <vector>
// ---------------------------------------------------------------------------------------
...
...
@@ -70,7 +70,7 @@ public:
--------------------------------------------------------------------------------------- */
RealOpenMM
calculateForceAndEnergy
(
int
numAngles
,
RealOpenMM
**
posData
,
RealOpenMM
calculateForceAndEnergy
(
int
numAngles
,
std
::
vector
<
OpenMM
::
RealVec
>&
posData
,
const
std
::
vector
<
int
>&
particle1
,
const
std
::
vector
<
int
>&
particle2
,
const
std
::
vector
<
int
>&
particle3
,
...
...
@@ -78,7 +78,7 @@ public:
const
std
::
vector
<
RealOpenMM
>&
lengthCBParameters
,
const
std
::
vector
<
RealOpenMM
>&
angle
,
const
std
::
vector
<
RealOpenMM
>&
kQuadratic
,
RealOpenMM
**
forceData
)
const
;
std
::
vector
<
OpenMM
::
RealVec
>&
forceData
)
const
;
private:
...
...
@@ -100,11 +100,11 @@ private:
--------------------------------------------------------------------------------------- */
RealOpenMM
calculateStretchBendIxn
(
const
Real
OpenMM
*
positionAtomA
,
const
Real
OpenMM
*
positionAtomB
,
const
Real
OpenMM
*
positionAtomC
,
RealOpenMM
calculateStretchBendIxn
(
const
OpenMM
::
RealVec
&
positionAtomA
,
const
OpenMM
::
RealVec
&
positionAtomB
,
const
OpenMM
::
RealVec
&
positionAtomC
,
RealOpenMM
lengthAB
,
RealOpenMM
lengthCB
,
RealOpenMM
idealAngle
,
RealOpenMM
kParameter
,
Real
OpenMM
*
*
forces
)
const
;
OpenMM
::
RealVec
*
forces
)
const
;
};
...
...
plugins/amoeba/platforms/reference/src/SimTKReference/AmoebaReferenceTorsionForce.cpp
View file @
93900ab2
...
...
@@ -24,6 +24,9 @@
#include "AmoebaReferenceForce.h"
#include "AmoebaReferenceTorsionForce.h"
using
std
::
vector
;
using
OpenMM
::
RealVec
;
/**---------------------------------------------------------------------------------------
Calculate Amoeba torsion ixn (force and energy)
...
...
@@ -41,12 +44,12 @@
--------------------------------------------------------------------------------------- */
RealOpenMM
AmoebaReferenceTorsionForce
::
calculateTorsionIxn
(
const
Real
OpenMM
*
positionAtomA
,
const
Real
OpenMM
*
positionAtomB
,
const
Real
OpenMM
*
positionAtomC
,
const
Real
OpenMM
*
positionAtomD
,
RealOpenMM
AmoebaReferenceTorsionForce
::
calculateTorsionIxn
(
const
Real
Vec
&
positionAtomA
,
const
Real
Vec
&
positionAtomB
,
const
Real
Vec
&
positionAtomC
,
const
Real
Vec
&
positionAtomD
,
const
std
::
vector
<
RealOpenMM
>&
torsionParameters1
,
const
std
::
vector
<
RealOpenMM
>&
torsionParameters2
,
const
std
::
vector
<
RealOpenMM
>&
torsionParameters3
,
Real
OpenMM
*
*
forces
)
const
{
Real
Vec
*
forces
)
const
{
// ---------------------------------------------------------------------------------------
...
...
@@ -209,7 +212,7 @@ RealOpenMM AmoebaReferenceTorsionForce::calculateTorsionIxn( const RealOpenMM* p
return
energy
;
}
RealOpenMM
AmoebaReferenceTorsionForce
::
calculateForceAndEnergy
(
int
numTorsions
,
RealOpenMM
**
posData
,
RealOpenMM
AmoebaReferenceTorsionForce
::
calculateForceAndEnergy
(
int
numTorsions
,
vector
<
RealVec
>&
posData
,
const
std
::
vector
<
int
>&
particle1
,
const
std
::
vector
<
int
>&
particle2
,
const
std
::
vector
<
int
>&
particle3
,
...
...
@@ -217,14 +220,14 @@ RealOpenMM AmoebaReferenceTorsionForce::calculateForceAndEnergy( int numTorsions
const
std
::
vector
<
std
::
vector
<
RealOpenMM
>
>&
torsionParameters1
,
const
std
::
vector
<
std
::
vector
<
RealOpenMM
>
>&
torsionParameters2
,
const
std
::
vector
<
std
::
vector
<
RealOpenMM
>
>&
torsionParameters3
,
RealOpenMM
**
forceData
)
const
{
vector
<
RealVec
>&
forceData
)
const
{
RealOpenMM
energy
=
0.0
;
for
(
unsigned
int
ii
=
0
;
ii
<
static_cast
<
unsigned
int
>
(
numTorsions
);
ii
++
)
{
int
particle1Index
=
particle1
[
ii
];
int
particle2Index
=
particle2
[
ii
];
int
particle3Index
=
particle3
[
ii
];
int
particle4Index
=
particle4
[
ii
];
Real
OpenMM
*
forces
[
4
];
Real
Vec
forces
[
4
];
forces
[
0
]
=
forceData
[
particle1Index
];
forces
[
1
]
=
forceData
[
particle2Index
];
forces
[
2
]
=
forceData
[
particle3Index
];
...
...
plugins/amoeba/platforms/reference/src/SimTKReference/AmoebaReferenceTorsionForce.h
View file @
93900ab2
...
...
@@ -25,7 +25,7 @@
#ifndef __AmoebaReferenceTorsionForce_H__
#define __AmoebaReferenceTorsionForce_H__
#include "SimTKUtilities/
SimTKOpenMMRealType
.h"
#include "SimTKUtilities/
RealVec
.h"
#include <vector>
// ---------------------------------------------------------------------------------------
...
...
@@ -70,7 +70,7 @@ public:
--------------------------------------------------------------------------------------- */
RealOpenMM
calculateForceAndEnergy
(
int
numTorsions
,
RealOpenMM
**
posData
,
RealOpenMM
calculateForceAndEnergy
(
int
numTorsions
,
std
::
vector
<
OpenMM
::
RealVec
>&
posData
,
const
std
::
vector
<
int
>&
particle1
,
const
std
::
vector
<
int
>&
particle2
,
const
std
::
vector
<
int
>&
particle3
,
...
...
@@ -78,7 +78,7 @@ public:
const
std
::
vector
<
std
::
vector
<
RealOpenMM
>
>&
torsionParameters1
,
const
std
::
vector
<
std
::
vector
<
RealOpenMM
>
>&
torsionParameters2
,
const
std
::
vector
<
std
::
vector
<
RealOpenMM
>
>&
torsionParameters3
,
RealOpenMM
**
forceData
)
const
;
std
::
vector
<
OpenMM
::
RealVec
>&
forceData
)
const
;
private:
...
...
@@ -99,12 +99,12 @@ private:
--------------------------------------------------------------------------------------- */
RealOpenMM
calculateTorsionIxn
(
const
Real
OpenMM
*
positionAtomA
,
const
Real
OpenMM
*
positionAtomB
,
const
Real
OpenMM
*
positionAtomC
,
const
Real
OpenMM
*
positionAtomD
,
RealOpenMM
calculateTorsionIxn
(
const
OpenMM
::
RealVec
&
positionAtomA
,
const
OpenMM
::
RealVec
&
positionAtomB
,
const
OpenMM
::
RealVec
&
positionAtomC
,
const
OpenMM
::
RealVec
&
positionAtomD
,
const
std
::
vector
<
RealOpenMM
>&
torsionParameters1
,
const
std
::
vector
<
RealOpenMM
>&
torsionParameters2
,
const
std
::
vector
<
RealOpenMM
>&
torsionParameters3
,
Real
OpenMM
*
*
forces
)
const
;
OpenMM
::
RealVec
*
forces
)
const
;
};
...
...
plugins/amoeba/platforms/reference/src/SimTKReference/AmoebaReferenceTorsionTorsionForce.cpp
View file @
93900ab2
...
...
@@ -25,6 +25,9 @@
#include "AmoebaReferenceForce.h"
#include "AmoebaReferenceTorsionTorsionForce.h"
using
std
::
vector
;
using
OpenMM
::
RealVec
;
/**---------------------------------------------------------------------------------------
Load grid values from rectenclosing angles
...
...
@@ -273,8 +276,8 @@ void AmoebaReferenceTorsionTorsionForce::getBicubicValues(
--------------------------------------------------------------------------------------- */
int
AmoebaReferenceTorsionTorsionForce
::
checkTorsionSign
(
const
Real
OpenMM
*
positionAtomA
,
const
Real
OpenMM
*
positionAtomB
,
const
Real
OpenMM
*
positionAtomC
,
const
Real
OpenMM
*
positionAtomD
)
const
{
const
Real
Vec
&
positionAtomA
,
const
Real
Vec
&
positionAtomB
,
const
Real
Vec
&
positionAtomC
,
const
Real
Vec
&
positionAtomD
)
const
{
// ---------------------------------------------------------------------------------------
...
...
@@ -323,11 +326,11 @@ int AmoebaReferenceTorsionTorsionForce::checkTorsionSign(
--------------------------------------------------------------------------------------- */
RealOpenMM
AmoebaReferenceTorsionTorsionForce
::
calculateTorsionTorsionIxn
(
const
Real
OpenMM
*
positionAtomA
,
const
Real
OpenMM
*
positionAtomB
,
const
Real
OpenMM
*
positionAtomC
,
const
Real
OpenMM
*
positionAtomD
,
const
Real
OpenMM
*
positionAtomE
,
const
Real
OpenMM
*
positionChiralCheckAtom
,
RealOpenMM
AmoebaReferenceTorsionTorsionForce
::
calculateTorsionTorsionIxn
(
const
Real
Vec
&
positionAtomA
,
const
Real
Vec
&
positionAtomB
,
const
Real
Vec
&
positionAtomC
,
const
Real
Vec
&
positionAtomD
,
const
Real
Vec
&
positionAtomE
,
const
Real
Vec
*
positionChiralCheckAtom
,
const
std
::
vector
<
std
::
vector
<
std
::
vector
<
RealOpenMM
>
>
>&
grid
,
Real
OpenMM
*
*
forces
)
const
{
Real
Vec
*
forces
)
const
{
// ---------------------------------------------------------------------------------------
...
...
@@ -421,7 +424,7 @@ RealOpenMM AmoebaReferenceTorsionTorsionForce::calculateTorsionTorsionIxn( const
// is 'negative'
if
(
positionChiralCheckAtom
){
sign
=
checkTorsionSign
(
positionChiralCheckAtom
,
positionAtomB
,
positionAtomC
,
positionAtomD
);
sign
=
checkTorsionSign
(
*
positionChiralCheckAtom
,
positionAtomB
,
positionAtomC
,
positionAtomD
);
if
(
sign
<
zero
){
angle1
=
-
angle1
;
angle2
=
-
angle2
;
...
...
@@ -549,7 +552,7 @@ RealOpenMM AmoebaReferenceTorsionTorsionForce::calculateTorsionTorsionIxn( const
return
gridEnergy
;
}
RealOpenMM
AmoebaReferenceTorsionTorsionForce
::
calculateForceAndEnergy
(
int
numTorsionTorsions
,
RealOpenMM
**
posData
,
RealOpenMM
AmoebaReferenceTorsionTorsionForce
::
calculateForceAndEnergy
(
int
numTorsionTorsions
,
vector
<
RealVec
>&
posData
,
const
std
::
vector
<
int
>&
particle1
,
const
std
::
vector
<
int
>&
particle2
,
const
std
::
vector
<
int
>&
particle3
,
...
...
@@ -558,7 +561,7 @@ RealOpenMM AmoebaReferenceTorsionTorsionForce::calculateForceAndEnergy( int numT
const
std
::
vector
<
int
>&
chiralCheckAtom
,
const
std
::
vector
<
int
>&
gridIndices
,
const
std
::
vector
<
std
::
vector
<
std
::
vector
<
std
::
vector
<
RealOpenMM
>
>
>
>&
torsionTorsionGrids
,
RealOpenMM
**
forceData
)
const
{
vector
<
RealVec
>&
forceData
)
const
{
RealOpenMM
energy
=
0.0
;
for
(
unsigned
int
ii
=
0
;
ii
<
static_cast
<
unsigned
int
>
(
numTorsionTorsions
);
ii
++
)
{
...
...
@@ -572,16 +575,16 @@ RealOpenMM AmoebaReferenceTorsionTorsionForce::calculateForceAndEnergy( int numT
int
gridIndex
=
gridIndices
[
ii
];
Real
OpenMM
*
forces
[
5
];
Real
Vec
forces
[
5
];
forces
[
0
]
=
forceData
[
particle1Index
];
forces
[
1
]
=
forceData
[
particle2Index
];
forces
[
2
]
=
forceData
[
particle3Index
];
forces
[
3
]
=
forceData
[
particle4Index
];
forces
[
4
]
=
forceData
[
particle5Index
];
Real
OpenMM
*
chiralCheckAtom
;
Real
Vec
*
chiralCheckAtom
;
if
(
chiralCheckAtomIndex
>=
0
){
chiralCheckAtom
=
posData
[
chiralCheckAtomIndex
];
chiralCheckAtom
=
&
posData
[
chiralCheckAtomIndex
];
}
else
{
chiralCheckAtom
=
NULL
;
}
...
...
Prev
1
2
Next
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