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
f6d209af
"csrc/vscode:/vscode.git/clone" did not exist on "e6d61fc674c8ae5ff050a11fd1573673c4b609fc"
Commit
f6d209af
authored
Oct 20, 2016
by
Peter Eastman
Browse files
Fixed errors with multipoles set to ZOnly mode
parent
1f78252a
Changes
4
Show whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
51 additions
and
46 deletions
+51
-46
plugins/amoeba/platforms/cuda/src/kernels/multipoles.cu
plugins/amoeba/platforms/cuda/src/kernels/multipoles.cu
+9
-5
plugins/amoeba/platforms/reference/src/SimTKReference/AmoebaReferenceMultipoleForce.cpp
...ence/src/SimTKReference/AmoebaReferenceMultipoleForce.cpp
+39
-38
plugins/amoeba/platforms/reference/src/SimTKReference/AmoebaReferenceMultipoleForce.h
...erence/src/SimTKReference/AmoebaReferenceMultipoleForce.h
+2
-2
wrappers/python/simtk/openmm/app/forcefield.py
wrappers/python/simtk/openmm/app/forcefield.py
+1
-1
No files found.
plugins/amoeba/platforms/cuda/src/kernels/multipoles.cu
View file @
f6d209af
...
@@ -24,13 +24,19 @@ extern "C" __global__ void computeLabFrameMoments(real4* __restrict__ posq, int4
...
@@ -24,13 +24,19 @@ extern "C" __global__ void computeLabFrameMoments(real4* __restrict__ posq, int4
// code common to ZThenX and Bisector
// code common to ZThenX and Bisector
int4
particles
=
multipoleParticles
[
atom
];
int4
particles
=
multipoleParticles
[
atom
];
if
(
particles
.
x
>=
0
&&
particles
.
z
>=
0
)
{
if
(
particles
.
z
>=
0
)
{
real4
thisParticlePos
=
posq
[
atom
];
real4
thisParticlePos
=
posq
[
atom
];
real4
posZ
=
posq
[
particles
.
z
];
real4
posZ
=
posq
[
particles
.
z
];
real3
vectorZ
=
make_real3
(
posZ
.
x
-
thisParticlePos
.
x
,
posZ
.
y
-
thisParticlePos
.
y
,
posZ
.
z
-
thisParticlePos
.
z
);
real3
vectorZ
=
make_real3
(
posZ
.
x
-
thisParticlePos
.
x
,
posZ
.
y
-
thisParticlePos
.
y
,
posZ
.
z
-
thisParticlePos
.
z
);
real4
posX
=
posq
[
particles
.
x
];
real3
vectorX
=
make_real3
(
posX
.
x
-
thisParticlePos
.
x
,
posX
.
y
-
thisParticlePos
.
y
,
posX
.
z
-
thisParticlePos
.
z
);
int
axisType
=
particles
.
w
;
int
axisType
=
particles
.
w
;
real4
posX
;
real3
vectorX
;
if
(
axisType
>=
4
)
vectorX
=
make_real3
((
real
)
0.1
f
);
else
{
posX
=
posq
[
particles
.
x
];
vectorX
=
make_real3
(
posX
.
x
-
thisParticlePos
.
x
,
posX
.
y
-
thisParticlePos
.
y
,
posX
.
z
-
thisParticlePos
.
z
);
}
/*
/*
z-only
z-only
...
@@ -108,8 +114,6 @@ extern "C" __global__ void computeLabFrameMoments(real4* __restrict__ posq, int4
...
@@ -108,8 +114,6 @@ extern "C" __global__ void computeLabFrameMoments(real4* __restrict__ posq, int4
}
}
}
}
else
if
(
axisType
>=
4
)
vectorX
=
make_real3
((
real
)
0.1
f
);
// x = x - (x.z)z
// x = x - (x.z)z
...
...
plugins/amoeba/platforms/reference/src/SimTKReference/AmoebaReferenceMultipoleForce.cpp
View file @
f6d209af
...
@@ -397,8 +397,8 @@ void AmoebaReferenceMultipoleForce::checkChiral(vector<MultipoleParticleData>& p
...
@@ -397,8 +397,8 @@ void AmoebaReferenceMultipoleForce::checkChiral(vector<MultipoleParticleData>& p
}
}
void AmoebaReferenceMultipoleForce::applyRotationMatrixToParticle( MultipoleParticleData& particleI,
void AmoebaReferenceMultipoleForce::applyRotationMatrixToParticle( MultipoleParticleData& particleI,
const MultipoleParticleData
&
particleZ,
const MultipoleParticleData
*
particleZ,
const MultipoleParticleData
&
particleX,
const MultipoleParticleData
*
particleX,
MultipoleParticleData* particleY,
MultipoleParticleData* particleY,
int axisType) const
int axisType) const
{
{
...
@@ -410,14 +410,20 @@ void AmoebaReferenceMultipoleForce::applyRotationMatrixToParticle( Multipol
...
@@ -410,14 +410,20 @@ void AmoebaReferenceMultipoleForce::applyRotationMatrixToParticle( Multipol
// this atom and the axis atom
// this atom and the axis atom
RealVec vectorY;
RealVec vectorX, vectorY;
RealVec vectorZ = particleZ.position - particleI.position;
RealVec vectorZ = particleZ->position - particleI.position;
RealVec vectorX = particleX.position - particleI.position;
normalizeRealVec(vectorZ);
normalizeRealVec(vectorZ);
// branch based on axis type
// branch based on axis type
if (axisType == AmoebaMultipoleForce::ZOnly) {
// z-only
vectorX = RealVec(0.1, 0.1, 0.1);
}
else {
vectorX = particleX->position - particleI.position;
if (axisType == AmoebaMultipoleForce::Bisector) {
if (axisType == AmoebaMultipoleForce::Bisector) {
// bisector
// bisector
...
@@ -427,8 +433,8 @@ void AmoebaReferenceMultipoleForce::applyRotationMatrixToParticle( Multipol
...
@@ -427,8 +433,8 @@ void AmoebaReferenceMultipoleForce::applyRotationMatrixToParticle( Multipol
normalizeRealVec(vectorX);
normalizeRealVec(vectorX);
vectorZ += vectorX;
vectorZ += vectorX;
normalizeRealVec(vectorZ);
normalizeRealVec(vectorZ);
}
}
else if (axisType == AmoebaMultipoleForce::ZBisect) {
else if (axisType == AmoebaMultipoleForce::ZBisect) {
// z-bisect
// z-bisect
...
@@ -441,8 +447,8 @@ void AmoebaReferenceMultipoleForce::applyRotationMatrixToParticle( Multipol
...
@@ -441,8 +447,8 @@ void AmoebaReferenceMultipoleForce::applyRotationMatrixToParticle( Multipol
vectorX += vectorY;
vectorX += vectorY;
normalizeRealVec(vectorX);
normalizeRealVec(vectorX);
}
}
else if (axisType == AmoebaMultipoleForce::ThreeFold) {
else if (axisType == AmoebaMultipoleForce::ThreeFold) {
// 3-fold
// 3-fold
...
@@ -455,13 +461,7 @@ void AmoebaReferenceMultipoleForce::applyRotationMatrixToParticle( Multipol
...
@@ -455,13 +461,7 @@ void AmoebaReferenceMultipoleForce::applyRotationMatrixToParticle( Multipol
vectorZ += vectorX + vectorY;
vectorZ += vectorX + vectorY;
normalizeRealVec(vectorZ);
normalizeRealVec(vectorZ);
}
} else if (axisType == AmoebaMultipoleForce::ZOnly) {
// z-only
vectorX = RealVec(0.1, 0.1, 0.1);
}
}
RealOpenMM dot = vectorZ.dot(vectorX);
RealOpenMM dot = vectorZ.dot(vectorX);
...
@@ -652,8 +652,9 @@ void AmoebaReferenceMultipoleForce::applyRotationMatrix(vector<MultipoleParticle
...
@@ -652,8 +652,9 @@ void AmoebaReferenceMultipoleForce::applyRotationMatrix(vector<MultipoleParticle
{
{
for (unsigned int ii = 0; ii < _numParticles; ii++) {
for (unsigned int ii = 0; ii < _numParticles; ii++) {
if (multipoleAtomZs[ii] >= 0 && multipoleAtomXs[ii] >= 0) {
if (multipoleAtomZs[ii] >= 0) {
applyRotationMatrixToParticle(particleData[ii], particleData[multipoleAtomZs[ii]], particleData[multipoleAtomXs[ii]],
applyRotationMatrixToParticle(particleData[ii], &particleData[multipoleAtomZs[ii]],
multipoleAtomXs[ii] > -1 ? &particleData[multipoleAtomXs[ii]] : NULL,
multipoleAtomYs[ii] > -1 ? &particleData[multipoleAtomYs[ii]] : NULL, axisTypes[ii]);
multipoleAtomYs[ii] > -1 ? &particleData[multipoleAtomYs[ii]] : NULL, axisTypes[ii]);
}
}
}
}
...
...
plugins/amoeba/platforms/reference/src/SimTKReference/AmoebaReferenceMultipoleForce.h
View file @
f6d209af
...
@@ -900,8 +900,8 @@ protected:
...
@@ -900,8 +900,8 @@ protected:
* @param axisType axis type
* @param axisType axis type
*/
*/
void
applyRotationMatrixToParticle
(
MultipoleParticleData
&
particleI
,
void
applyRotationMatrixToParticle
(
MultipoleParticleData
&
particleI
,
const
MultipoleParticleData
&
particleZ
,
const
MultipoleParticleData
*
particleZ
,
const
MultipoleParticleData
&
particleX
,
const
MultipoleParticleData
*
particleX
,
MultipoleParticleData
*
particleY
,
int
axisType
)
const
;
MultipoleParticleData
*
particleY
,
int
axisType
)
const
;
/**
/**
...
...
wrappers/python/simtk/openmm/app/forcefield.py
View file @
f6d209af
...
@@ -4907,7 +4907,7 @@ class AmoebaMultipoleGenerator(object):
...
@@ -4907,7 +4907,7 @@ class AmoebaMultipoleGenerator(object):
bondedAtomZ
=
data
.
atoms
[
bondedAtomZIndex
]
bondedAtomZ
=
data
.
atoms
[
bondedAtomZIndex
]
if
(
kx
==
0
and
kz
==
bondedAtomZType
):
if
(
kx
==
0
and
kz
==
bondedAtomZType
):
k
z
=
bondedAtomZIndex
z
axis
=
bondedAtomZIndex
savedMultipoleDict
=
multipoleDict
savedMultipoleDict
=
multipoleDict
hit
=
5
hit
=
5
...
...
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