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
bcc6216d
"ssh:/git@developer.sourcefind.cn:2222/tsoc/openmm.git" did not exist on "74b4d450cbd842916c7023dd67667914be4c2f11"
Commit
bcc6216d
authored
May 07, 2010
by
Peter Eastman
Browse files
Periodic box dimensions can be changed in the middle of a simulation
parent
149c6ec6
Changes
48
Hide whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
113 additions
and
36 deletions
+113
-36
examples/HelloWaterBox.cpp
examples/HelloWaterBox.cpp
+1
-1
libraries/validate/src/ValidateOpenMM.cpp
libraries/validate/src/ValidateOpenMM.cpp
+3
-3
openmmapi/include/openmm/Context.h
openmmapi/include/openmm/Context.h
+25
-0
openmmapi/include/openmm/System.h
openmmapi/include/openmm/System.h
+6
-4
openmmapi/src/Context.cpp
openmmapi/src/Context.cpp
+22
-0
openmmapi/src/CustomGBForceImpl.cpp
openmmapi/src/CustomGBForceImpl.cpp
+1
-1
openmmapi/src/CustomHbondForceImpl.cpp
openmmapi/src/CustomHbondForceImpl.cpp
+1
-1
openmmapi/src/CustomNonbondedForceImpl.cpp
openmmapi/src/CustomNonbondedForceImpl.cpp
+1
-1
openmmapi/src/GBSAOBCForceImpl.cpp
openmmapi/src/GBSAOBCForceImpl.cpp
+1
-1
openmmapi/src/GBVIForceImpl.cpp
openmmapi/src/GBVIForceImpl.cpp
+1
-1
openmmapi/src/NonbondedForceImpl.cpp
openmmapi/src/NonbondedForceImpl.cpp
+3
-3
openmmapi/src/System.cpp
openmmapi/src/System.cpp
+2
-2
platforms/cuda/src/CudaKernels.cpp
platforms/cuda/src/CudaKernels.cpp
+14
-6
platforms/cuda/tests/TestCudaCustomNonbondedForce.cpp
platforms/cuda/tests/TestCudaCustomNonbondedForce.cpp
+1
-1
platforms/cuda/tests/TestCudaEwald.cpp
platforms/cuda/tests/TestCudaEwald.cpp
+3
-3
platforms/cuda/tests/TestCudaGBSAOBCForce.cpp
platforms/cuda/tests/TestCudaGBSAOBCForce.cpp
+2
-2
platforms/cuda/tests/TestCudaNonbondedForce.cpp
platforms/cuda/tests/TestCudaNonbondedForce.cpp
+3
-3
platforms/cuda/tests/TstCudaUsingParameterFile.cpp
platforms/cuda/tests/TstCudaUsingParameterFile.cpp
+2
-2
platforms/opencl/src/OpenCLContext.cpp
platforms/opencl/src/OpenCLContext.cpp
+0
-1
platforms/opencl/src/OpenCLContext.h
platforms/opencl/src/OpenCLContext.h
+21
-0
No files found.
examples/HelloWaterBox.cpp
View file @
bcc6216d
...
@@ -248,7 +248,7 @@ myInitializeOpenMM( int numWatersAlongEdge,
...
@@ -248,7 +248,7 @@ myInitializeOpenMM( int numWatersAlongEdge,
// Create periodic box
// Create periodic box
nonbond
.
setNonbondedMethod
(
OpenMM
::
NonbondedForce
::
CutoffPeriodic
);
nonbond
.
setNonbondedMethod
(
OpenMM
::
NonbondedForce
::
CutoffPeriodic
);
nonbond
.
setCutoffDistance
(
CutoffDistanceInAng
*
OpenMM
::
NmPerAngstrom
);
nonbond
.
setCutoffDistance
(
CutoffDistanceInAng
*
OpenMM
::
NmPerAngstrom
);
system
.
setPeriodicBoxVectors
(
Vec3
(
boxEdgeLengthInNm
,
0
,
0
),
system
.
set
Default
PeriodicBoxVectors
(
Vec3
(
boxEdgeLengthInNm
,
0
,
0
),
Vec3
(
0
,
boxEdgeLengthInNm
,
0
),
Vec3
(
0
,
boxEdgeLengthInNm
,
0
),
Vec3
(
0
,
0
,
boxEdgeLengthInNm
));
Vec3
(
0
,
0
,
boxEdgeLengthInNm
));
...
...
libraries/validate/src/ValidateOpenMM.cpp
View file @
bcc6216d
...
@@ -387,8 +387,8 @@ System* ValidateOpenMM::copySystemExcludingForces( const System& systemToCopy )
...
@@ -387,8 +387,8 @@ System* ValidateOpenMM::copySystemExcludingForces( const System& systemToCopy )
}
}
Vec3
a
,
b
,
c
;
Vec3
a
,
b
,
c
;
systemToCopy
.
getPeriodicBoxVectors
(
a
,
b
,
c
);
systemToCopy
.
get
Default
PeriodicBoxVectors
(
a
,
b
,
c
);
system
->
setPeriodicBoxVectors
(
a
,
b
,
c
);
system
->
set
Default
PeriodicBoxVectors
(
a
,
b
,
c
);
copyConstraints
(
systemToCopy
,
system
);
copyConstraints
(
systemToCopy
,
system
);
...
@@ -490,7 +490,7 @@ void ValidateOpenMM::writeMasses( FILE* filePtr, const System& system ) const {
...
@@ -490,7 +490,7 @@ void ValidateOpenMM::writeMasses( FILE* filePtr, const System& system ) const {
}
}
Vec3
a
,
b
,
c
;
Vec3
a
,
b
,
c
;
system
.
getPeriodicBoxVectors
(
a
,
b
,
c
);
system
.
get
Default
PeriodicBoxVectors
(
a
,
b
,
c
);
(
void
)
fprintf
(
filePtr
,
"Box %14.6f %14.6f %14.6f %14.6f %14.6f %14.6f %14.6f %14.6f %14.6f
\n
"
,
(
void
)
fprintf
(
filePtr
,
"Box %14.6f %14.6f %14.6f %14.6f %14.6f %14.6f %14.6f %14.6f %14.6f
\n
"
,
a
[
0
],
a
[
1
],
a
[
2
],
b
[
0
],
b
[
1
],
b
[
2
],
c
[
0
],
c
[
1
],
c
[
2
]
);
a
[
0
],
a
[
1
],
a
[
2
],
b
[
0
],
b
[
1
],
b
[
2
],
c
[
0
],
c
[
1
],
c
[
2
]
);
}
}
...
...
openmmapi/include/openmm/Context.h
View file @
bcc6216d
...
@@ -153,6 +153,30 @@ public:
...
@@ -153,6 +153,30 @@ public:
* @param value the value of the parameter
* @param value the value of the parameter
*/
*/
void
setParameter
(
const
std
::
string
&
name
,
double
value
);
void
setParameter
(
const
std
::
string
&
name
,
double
value
);
/**
* Get the vectors defining the axes of the periodic box (measured in nm). They will affect
* any Force that uses periodic boundary conditions.
*
* Currently, only rectangular boxes are supported. This means that a, b, and c must be aligned with the
* x, y, and z axes respectively. Future releases may support arbitrary triclinic boxes.
*
* @param a on exit, this contains the vector defining the first edge of the periodic box
* @param b on exit, this contains the vector defining the second edge of the periodic box
* @param c on exit, this contains the vector defining the third edge of the periodic box
*/
void
getPeriodicBoxVectors
(
Vec3
&
a
,
Vec3
&
b
,
Vec3
&
c
)
const
;
/**
* Set the vectors defining the axes of the periodic box (measured in nm). They will affect
* any Force that uses periodic boundary conditions.
*
* Currently, only rectangular boxes are supported. This means that a, b, and c must be aligned with the
* x, y, and z axes respectively. Future releases may support arbitrary triclinic boxes.
*
* @param a the vector defining the first edge of the periodic box
* @param b the vector defining the second edge of the periodic box
* @param c the vector defining the third edge of the periodic box
*/
void
setPeriodicBoxVectors
(
Vec3
a
,
Vec3
b
,
Vec3
c
);
/**
/**
* When a Context is created, it may cache information about the System being simulated
* When a Context is created, it may cache information about the System being simulated
* and the Force objects contained in it. This means that, if the System or Forces are then
* and the Force objects contained in it. This means that, if the System or Forces are then
...
@@ -167,6 +191,7 @@ private:
...
@@ -167,6 +191,7 @@ private:
friend
class
Platform
;
friend
class
Platform
;
ContextImpl
*
impl
;
ContextImpl
*
impl
;
std
::
map
<
std
::
string
,
std
::
string
>
properties
;
std
::
map
<
std
::
string
,
std
::
string
>
properties
;
Vec3
periodicBoxVectors
[
3
];
};
};
}
// namespace OpenMM
}
// namespace OpenMM
...
...
openmmapi/include/openmm/System.h
View file @
bcc6216d
...
@@ -165,7 +165,8 @@ public:
...
@@ -165,7 +165,8 @@ public:
return
*
forces
[
index
];
return
*
forces
[
index
];
}
}
/**
/**
* Get the vectors which define the axes of the periodic box (measured in nm). These will affect
* Get the default values of the vectors defining the axes of the periodic box (measured in nm). Any newly
* created Context will have its box vectors set to these. They will affect
* any Force added to the System that uses periodic boundary conditions.
* any Force added to the System that uses periodic boundary conditions.
*
*
* Currently, only rectangular boxes are supported. This means that a, b, and c must be aligned with the
* Currently, only rectangular boxes are supported. This means that a, b, and c must be aligned with the
...
@@ -175,9 +176,10 @@ public:
...
@@ -175,9 +176,10 @@ public:
* @param b on exit, this contains the vector defining the second edge of the periodic box
* @param b on exit, this contains the vector defining the second edge of the periodic box
* @param c on exit, this contains the vector defining the third edge of the periodic box
* @param c on exit, this contains the vector defining the third edge of the periodic box
*/
*/
void
getPeriodicBoxVectors
(
Vec3
&
a
,
Vec3
&
b
,
Vec3
&
c
)
const
;
void
get
Default
PeriodicBoxVectors
(
Vec3
&
a
,
Vec3
&
b
,
Vec3
&
c
)
const
;
/**
/**
* Set the vectors which define the axes of the periodic box (measured in nm). These will affect
* Set the default values of the vectors defining the axes of the periodic box (measured in nm). Any newly
* created Context will have its box vectors set to these. They will affect
* any Force added to the System that uses periodic boundary conditions.
* any Force added to the System that uses periodic boundary conditions.
*
*
* Currently, only rectangular boxes are supported. This means that a, b, and c must be aligned with the
* Currently, only rectangular boxes are supported. This means that a, b, and c must be aligned with the
...
@@ -187,7 +189,7 @@ public:
...
@@ -187,7 +189,7 @@ public:
* @param b the vector defining the second edge of the periodic box
* @param b the vector defining the second edge of the periodic box
* @param c the vector defining the third edge of the periodic box
* @param c the vector defining the third edge of the periodic box
*/
*/
void
setPeriodicBoxVectors
(
Vec3
a
,
Vec3
b
,
Vec3
c
);
void
set
Default
PeriodicBoxVectors
(
Vec3
a
,
Vec3
b
,
Vec3
c
);
private:
private:
class
ConstraintInfo
;
class
ConstraintInfo
;
Vec3
periodicBoxVectors
[
3
];
Vec3
periodicBoxVectors
[
3
];
...
...
openmmapi/src/Context.cpp
View file @
bcc6216d
...
@@ -38,14 +38,17 @@ using namespace std;
...
@@ -38,14 +38,17 @@ using namespace std;
Context
::
Context
(
System
&
system
,
Integrator
&
integrator
)
:
properties
(
map
<
string
,
string
>
())
{
Context
::
Context
(
System
&
system
,
Integrator
&
integrator
)
:
properties
(
map
<
string
,
string
>
())
{
impl
=
new
ContextImpl
(
*
this
,
system
,
integrator
,
0
,
properties
);
impl
=
new
ContextImpl
(
*
this
,
system
,
integrator
,
0
,
properties
);
system
.
getDefaultPeriodicBoxVectors
(
periodicBoxVectors
[
0
],
periodicBoxVectors
[
1
],
periodicBoxVectors
[
2
]);
}
}
Context
::
Context
(
System
&
system
,
Integrator
&
integrator
,
Platform
&
platform
)
:
properties
(
map
<
string
,
string
>
())
{
Context
::
Context
(
System
&
system
,
Integrator
&
integrator
,
Platform
&
platform
)
:
properties
(
map
<
string
,
string
>
())
{
impl
=
new
ContextImpl
(
*
this
,
system
,
integrator
,
&
platform
,
properties
);
impl
=
new
ContextImpl
(
*
this
,
system
,
integrator
,
&
platform
,
properties
);
system
.
getDefaultPeriodicBoxVectors
(
periodicBoxVectors
[
0
],
periodicBoxVectors
[
1
],
periodicBoxVectors
[
2
]);
}
}
Context
::
Context
(
System
&
system
,
Integrator
&
integrator
,
Platform
&
platform
,
const
map
<
string
,
string
>&
properties
)
:
properties
(
properties
)
{
Context
::
Context
(
System
&
system
,
Integrator
&
integrator
,
Platform
&
platform
,
const
map
<
string
,
string
>&
properties
)
:
properties
(
properties
)
{
impl
=
new
ContextImpl
(
*
this
,
system
,
integrator
,
&
platform
,
properties
);
impl
=
new
ContextImpl
(
*
this
,
system
,
integrator
,
&
platform
,
properties
);
system
.
getDefaultPeriodicBoxVectors
(
periodicBoxVectors
[
0
],
periodicBoxVectors
[
1
],
periodicBoxVectors
[
2
]);
}
}
Context
::~
Context
()
{
Context
::~
Context
()
{
...
@@ -120,10 +123,29 @@ void Context::setParameter(const string& name, double value) {
...
@@ -120,10 +123,29 @@ void Context::setParameter(const string& name, double value) {
impl
->
setParameter
(
name
,
value
);
impl
->
setParameter
(
name
,
value
);
}
}
void
Context
::
getPeriodicBoxVectors
(
Vec3
&
a
,
Vec3
&
b
,
Vec3
&
c
)
const
{
a
=
periodicBoxVectors
[
0
];
b
=
periodicBoxVectors
[
1
];
c
=
periodicBoxVectors
[
2
];
}
void
Context
::
setPeriodicBoxVectors
(
Vec3
a
,
Vec3
b
,
Vec3
c
)
{
if
(
a
[
1
]
!=
0.0
||
a
[
2
]
!=
0.0
)
throw
OpenMMException
(
"First periodic box vector must be parallel to x."
);
if
(
b
[
0
]
!=
0.0
||
b
[
2
]
!=
0.0
)
throw
OpenMMException
(
"Second periodic box vector must be parallel to y."
);
if
(
c
[
0
]
!=
0.0
||
c
[
1
]
!=
0.0
)
throw
OpenMMException
(
"Third periodic box vector must be parallel to z."
);
periodicBoxVectors
[
0
]
=
a
;
periodicBoxVectors
[
1
]
=
b
;
periodicBoxVectors
[
2
]
=
c
;
}
void
Context
::
reinitialize
()
{
void
Context
::
reinitialize
()
{
System
&
system
=
impl
->
getSystem
();
System
&
system
=
impl
->
getSystem
();
Integrator
&
integrator
=
impl
->
getIntegrator
();
Integrator
&
integrator
=
impl
->
getIntegrator
();
Platform
&
platform
=
impl
->
getPlatform
();
Platform
&
platform
=
impl
->
getPlatform
();
system
.
getDefaultPeriodicBoxVectors
(
periodicBoxVectors
[
0
],
periodicBoxVectors
[
1
],
periodicBoxVectors
[
2
]);
delete
impl
;
delete
impl
;
impl
=
new
ContextImpl
(
*
this
,
system
,
integrator
,
&
platform
,
properties
);
impl
=
new
ContextImpl
(
*
this
,
system
,
integrator
,
&
platform
,
properties
);
}
}
openmmapi/src/CustomGBForceImpl.cpp
View file @
bcc6216d
...
@@ -97,7 +97,7 @@ void CustomGBForceImpl::initialize(ContextImpl& context) {
...
@@ -97,7 +97,7 @@ void CustomGBForceImpl::initialize(ContextImpl& context) {
}
}
if
(
owner
.
getNonbondedMethod
()
==
CustomGBForce
::
CutoffPeriodic
)
{
if
(
owner
.
getNonbondedMethod
()
==
CustomGBForce
::
CutoffPeriodic
)
{
Vec3
boxVectors
[
3
];
Vec3
boxVectors
[
3
];
system
.
getPeriodicBoxVectors
(
boxVectors
[
0
],
boxVectors
[
1
],
boxVectors
[
2
]);
system
.
get
Default
PeriodicBoxVectors
(
boxVectors
[
0
],
boxVectors
[
1
],
boxVectors
[
2
]);
double
cutoff
=
owner
.
getCutoffDistance
();
double
cutoff
=
owner
.
getCutoffDistance
();
if
(
cutoff
>
0.5
*
boxVectors
[
0
][
0
]
||
cutoff
>
0.5
*
boxVectors
[
1
][
1
]
||
cutoff
>
0.5
*
boxVectors
[
2
][
2
])
if
(
cutoff
>
0.5
*
boxVectors
[
0
][
0
]
||
cutoff
>
0.5
*
boxVectors
[
1
][
1
]
||
cutoff
>
0.5
*
boxVectors
[
2
][
2
])
throw
OpenMMException
(
"CustomGBForce: The cutoff distance cannot be greater than half the periodic box size."
);
throw
OpenMMException
(
"CustomGBForce: The cutoff distance cannot be greater than half the periodic box size."
);
...
...
openmmapi/src/CustomHbondForceImpl.cpp
View file @
bcc6216d
...
@@ -170,7 +170,7 @@ void CustomHbondForceImpl::initialize(ContextImpl& context) {
...
@@ -170,7 +170,7 @@ void CustomHbondForceImpl::initialize(ContextImpl& context) {
}
}
if
(
owner
.
getNonbondedMethod
()
==
CustomHbondForce
::
CutoffPeriodic
)
{
if
(
owner
.
getNonbondedMethod
()
==
CustomHbondForce
::
CutoffPeriodic
)
{
Vec3
boxVectors
[
3
];
Vec3
boxVectors
[
3
];
system
.
getPeriodicBoxVectors
(
boxVectors
[
0
],
boxVectors
[
1
],
boxVectors
[
2
]);
system
.
get
Default
PeriodicBoxVectors
(
boxVectors
[
0
],
boxVectors
[
1
],
boxVectors
[
2
]);
double
cutoff
=
owner
.
getCutoffDistance
();
double
cutoff
=
owner
.
getCutoffDistance
();
if
(
cutoff
>
0.5
*
boxVectors
[
0
][
0
]
||
cutoff
>
0.5
*
boxVectors
[
1
][
1
]
||
cutoff
>
0.5
*
boxVectors
[
2
][
2
])
if
(
cutoff
>
0.5
*
boxVectors
[
0
][
0
]
||
cutoff
>
0.5
*
boxVectors
[
1
][
1
]
||
cutoff
>
0.5
*
boxVectors
[
2
][
2
])
throw
OpenMMException
(
"CustomHbondForce: The cutoff distance cannot be greater than half the periodic box size."
);
throw
OpenMMException
(
"CustomHbondForce: The cutoff distance cannot be greater than half the periodic box size."
);
...
...
openmmapi/src/CustomNonbondedForceImpl.cpp
View file @
bcc6216d
...
@@ -97,7 +97,7 @@ void CustomNonbondedForceImpl::initialize(ContextImpl& context) {
...
@@ -97,7 +97,7 @@ void CustomNonbondedForceImpl::initialize(ContextImpl& context) {
}
}
if
(
owner
.
getNonbondedMethod
()
==
CustomNonbondedForce
::
CutoffPeriodic
)
{
if
(
owner
.
getNonbondedMethod
()
==
CustomNonbondedForce
::
CutoffPeriodic
)
{
Vec3
boxVectors
[
3
];
Vec3
boxVectors
[
3
];
system
.
getPeriodicBoxVectors
(
boxVectors
[
0
],
boxVectors
[
1
],
boxVectors
[
2
]);
system
.
get
Default
PeriodicBoxVectors
(
boxVectors
[
0
],
boxVectors
[
1
],
boxVectors
[
2
]);
double
cutoff
=
owner
.
getCutoffDistance
();
double
cutoff
=
owner
.
getCutoffDistance
();
if
(
cutoff
>
0.5
*
boxVectors
[
0
][
0
]
||
cutoff
>
0.5
*
boxVectors
[
1
][
1
]
||
cutoff
>
0.5
*
boxVectors
[
2
][
2
])
if
(
cutoff
>
0.5
*
boxVectors
[
0
][
0
]
||
cutoff
>
0.5
*
boxVectors
[
1
][
1
]
||
cutoff
>
0.5
*
boxVectors
[
2
][
2
])
throw
OpenMMException
(
"CustomNonbondedForce: The cutoff distance cannot be greater than half the periodic box size."
);
throw
OpenMMException
(
"CustomNonbondedForce: The cutoff distance cannot be greater than half the periodic box size."
);
...
...
openmmapi/src/GBSAOBCForceImpl.cpp
View file @
bcc6216d
...
@@ -47,7 +47,7 @@ void GBSAOBCForceImpl::initialize(ContextImpl& context) {
...
@@ -47,7 +47,7 @@ void GBSAOBCForceImpl::initialize(ContextImpl& context) {
throw
OpenMMException
(
"GBSAOBCForce must have exactly as many particles as the System it belongs to."
);
throw
OpenMMException
(
"GBSAOBCForce must have exactly as many particles as the System it belongs to."
);
if
(
owner
.
getNonbondedMethod
()
==
GBSAOBCForce
::
CutoffPeriodic
)
{
if
(
owner
.
getNonbondedMethod
()
==
GBSAOBCForce
::
CutoffPeriodic
)
{
Vec3
boxVectors
[
3
];
Vec3
boxVectors
[
3
];
context
.
getSystem
().
getPeriodicBoxVectors
(
boxVectors
[
0
],
boxVectors
[
1
],
boxVectors
[
2
]);
context
.
getSystem
().
get
Default
PeriodicBoxVectors
(
boxVectors
[
0
],
boxVectors
[
1
],
boxVectors
[
2
]);
double
cutoff
=
owner
.
getCutoffDistance
();
double
cutoff
=
owner
.
getCutoffDistance
();
if
(
cutoff
>
0.5
*
boxVectors
[
0
][
0
]
||
cutoff
>
0.5
*
boxVectors
[
1
][
1
]
||
cutoff
>
0.5
*
boxVectors
[
2
][
2
])
if
(
cutoff
>
0.5
*
boxVectors
[
0
][
0
]
||
cutoff
>
0.5
*
boxVectors
[
1
][
1
]
||
cutoff
>
0.5
*
boxVectors
[
2
][
2
])
throw
OpenMMException
(
"GBSAOBCForce: The cutoff distance cannot be greater than half the periodic box size."
);
throw
OpenMMException
(
"GBSAOBCForce: The cutoff distance cannot be greater than half the periodic box size."
);
...
...
openmmapi/src/GBVIForceImpl.cpp
View file @
bcc6216d
...
@@ -96,7 +96,7 @@ void GBVIForceImpl::initialize(ContextImpl& context) {
...
@@ -96,7 +96,7 @@ void GBVIForceImpl::initialize(ContextImpl& context) {
}
}
if
(
owner
.
getNonbondedMethod
()
==
GBVIForce
::
CutoffPeriodic
)
{
if
(
owner
.
getNonbondedMethod
()
==
GBVIForce
::
CutoffPeriodic
)
{
Vec3
boxVectors
[
3
];
Vec3
boxVectors
[
3
];
system
.
getPeriodicBoxVectors
(
boxVectors
[
0
],
boxVectors
[
1
],
boxVectors
[
2
]);
system
.
get
Default
PeriodicBoxVectors
(
boxVectors
[
0
],
boxVectors
[
1
],
boxVectors
[
2
]);
double
cutoff
=
owner
.
getCutoffDistance
();
double
cutoff
=
owner
.
getCutoffDistance
();
if
(
cutoff
>
0.5
*
boxVectors
[
0
][
0
]
||
cutoff
>
0.5
*
boxVectors
[
1
][
1
]
||
cutoff
>
0.5
*
boxVectors
[
2
][
2
])
if
(
cutoff
>
0.5
*
boxVectors
[
0
][
0
]
||
cutoff
>
0.5
*
boxVectors
[
1
][
1
]
||
cutoff
>
0.5
*
boxVectors
[
2
][
2
])
throw
OpenMMException
(
"GBVIForce: The cutoff distance cannot be greater than half the periodic box size."
);
throw
OpenMMException
(
"GBVIForce: The cutoff distance cannot be greater than half the periodic box size."
);
...
...
openmmapi/src/NonbondedForceImpl.cpp
View file @
bcc6216d
...
@@ -89,7 +89,7 @@ void NonbondedForceImpl::initialize(ContextImpl& context) {
...
@@ -89,7 +89,7 @@ void NonbondedForceImpl::initialize(ContextImpl& context) {
owner
.
getNonbondedMethod
()
==
NonbondedForce
::
Ewald
||
owner
.
getNonbondedMethod
()
==
NonbondedForce
::
Ewald
||
owner
.
getNonbondedMethod
()
==
NonbondedForce
::
PME
)
{
owner
.
getNonbondedMethod
()
==
NonbondedForce
::
PME
)
{
Vec3
boxVectors
[
3
];
Vec3
boxVectors
[
3
];
system
.
getPeriodicBoxVectors
(
boxVectors
[
0
],
boxVectors
[
1
],
boxVectors
[
2
]);
system
.
get
Default
PeriodicBoxVectors
(
boxVectors
[
0
],
boxVectors
[
1
],
boxVectors
[
2
]);
double
cutoff
=
owner
.
getCutoffDistance
();
double
cutoff
=
owner
.
getCutoffDistance
();
if
(
cutoff
>
0.5
*
boxVectors
[
0
][
0
]
||
cutoff
>
0.5
*
boxVectors
[
1
][
1
]
||
cutoff
>
0.5
*
boxVectors
[
2
][
2
])
if
(
cutoff
>
0.5
*
boxVectors
[
0
][
0
]
||
cutoff
>
0.5
*
boxVectors
[
1
][
1
]
||
cutoff
>
0.5
*
boxVectors
[
2
][
2
])
throw
OpenMMException
(
"NonbondedForce: The cutoff distance cannot be greater than half the periodic box size."
);
throw
OpenMMException
(
"NonbondedForce: The cutoff distance cannot be greater than half the periodic box size."
);
...
@@ -130,7 +130,7 @@ private:
...
@@ -130,7 +130,7 @@ private:
void
NonbondedForceImpl
::
calcEwaldParameters
(
const
System
&
system
,
const
NonbondedForce
&
force
,
double
&
alpha
,
int
&
kmaxx
,
int
&
kmaxy
,
int
&
kmaxz
)
{
void
NonbondedForceImpl
::
calcEwaldParameters
(
const
System
&
system
,
const
NonbondedForce
&
force
,
double
&
alpha
,
int
&
kmaxx
,
int
&
kmaxy
,
int
&
kmaxz
)
{
Vec3
boxVectors
[
3
];
Vec3
boxVectors
[
3
];
system
.
getPeriodicBoxVectors
(
boxVectors
[
0
],
boxVectors
[
1
],
boxVectors
[
2
]);
system
.
get
Default
PeriodicBoxVectors
(
boxVectors
[
0
],
boxVectors
[
1
],
boxVectors
[
2
]);
double
tol
=
force
.
getEwaldErrorTolerance
();
double
tol
=
force
.
getEwaldErrorTolerance
();
alpha
=
(
1.0
/
force
.
getCutoffDistance
())
*
std
::
sqrt
(
-
log
(
2.0
*
tol
));
alpha
=
(
1.0
/
force
.
getCutoffDistance
())
*
std
::
sqrt
(
-
log
(
2.0
*
tol
));
kmaxx
=
findZero
(
EwaldErrorFunction
(
boxVectors
[
0
][
0
],
alpha
,
tol
),
10
);
kmaxx
=
findZero
(
EwaldErrorFunction
(
boxVectors
[
0
][
0
],
alpha
,
tol
),
10
);
...
@@ -146,7 +146,7 @@ void NonbondedForceImpl::calcEwaldParameters(const System& system, const Nonbond
...
@@ -146,7 +146,7 @@ void NonbondedForceImpl::calcEwaldParameters(const System& system, const Nonbond
void
NonbondedForceImpl
::
calcPMEParameters
(
const
System
&
system
,
const
NonbondedForce
&
force
,
double
&
alpha
,
int
&
xsize
,
int
&
ysize
,
int
&
zsize
)
{
void
NonbondedForceImpl
::
calcPMEParameters
(
const
System
&
system
,
const
NonbondedForce
&
force
,
double
&
alpha
,
int
&
xsize
,
int
&
ysize
,
int
&
zsize
)
{
Vec3
boxVectors
[
3
];
Vec3
boxVectors
[
3
];
system
.
getPeriodicBoxVectors
(
boxVectors
[
0
],
boxVectors
[
1
],
boxVectors
[
2
]);
system
.
get
Default
PeriodicBoxVectors
(
boxVectors
[
0
],
boxVectors
[
1
],
boxVectors
[
2
]);
double
tol
=
force
.
getEwaldErrorTolerance
();
double
tol
=
force
.
getEwaldErrorTolerance
();
alpha
=
(
1.0
/
force
.
getCutoffDistance
())
*
std
::
sqrt
(
-
log
(
2.0
*
tol
));
alpha
=
(
1.0
/
force
.
getCutoffDistance
())
*
std
::
sqrt
(
-
log
(
2.0
*
tol
));
xsize
=
(
int
)
ceil
(
alpha
*
boxVectors
[
0
][
0
]
/
pow
(
0.5
*
tol
,
0.2
));
xsize
=
(
int
)
ceil
(
alpha
*
boxVectors
[
0
][
0
]
/
pow
(
0.5
*
tol
,
0.2
));
...
...
openmmapi/src/System.cpp
View file @
bcc6216d
...
@@ -63,13 +63,13 @@ void System::setConstraintParameters(int index, int particle1, int particle2, do
...
@@ -63,13 +63,13 @@ void System::setConstraintParameters(int index, int particle1, int particle2, do
constraints
[
index
].
distance
=
distance
;
constraints
[
index
].
distance
=
distance
;
}
}
void
System
::
getPeriodicBoxVectors
(
Vec3
&
a
,
Vec3
&
b
,
Vec3
&
c
)
const
{
void
System
::
get
Default
PeriodicBoxVectors
(
Vec3
&
a
,
Vec3
&
b
,
Vec3
&
c
)
const
{
a
=
periodicBoxVectors
[
0
];
a
=
periodicBoxVectors
[
0
];
b
=
periodicBoxVectors
[
1
];
b
=
periodicBoxVectors
[
1
];
c
=
periodicBoxVectors
[
2
];
c
=
periodicBoxVectors
[
2
];
}
}
void
System
::
setPeriodicBoxVectors
(
Vec3
a
,
Vec3
b
,
Vec3
c
)
{
void
System
::
set
Default
PeriodicBoxVectors
(
Vec3
a
,
Vec3
b
,
Vec3
c
)
{
if
(
a
[
1
]
!=
0.0
||
a
[
2
]
!=
0.0
)
if
(
a
[
1
]
!=
0.0
||
a
[
2
]
!=
0.0
)
throw
OpenMMException
(
"First periodic box vector must be parallel to x."
);
throw
OpenMMException
(
"First periodic box vector must be parallel to x."
);
if
(
b
[
0
]
!=
0.0
||
b
[
2
]
!=
0.0
)
if
(
b
[
0
]
!=
0.0
||
b
[
2
]
!=
0.0
)
...
...
platforms/cuda/src/CudaKernels.cpp
View file @
bcc6216d
...
@@ -45,6 +45,13 @@ void CudaCalcForcesAndEnergyKernel::initialize(const System& system) {
...
@@ -45,6 +45,13 @@ void CudaCalcForcesAndEnergyKernel::initialize(const System& system) {
void
CudaCalcForcesAndEnergyKernel
::
beginForceComputation
(
ContextImpl
&
context
)
{
void
CudaCalcForcesAndEnergyKernel
::
beginForceComputation
(
ContextImpl
&
context
)
{
_gpuContext
*
gpu
=
data
.
gpu
;
_gpuContext
*
gpu
=
data
.
gpu
;
Vec3
boxVectors
[
3
];
context
.
getOwner
().
getPeriodicBoxVectors
(
boxVectors
[
0
],
boxVectors
[
1
],
boxVectors
[
2
]);
float
boxx
=
boxVectors
[
0
][
0
],
boxy
=
boxVectors
[
1
][
1
],
boxz
=
boxVectors
[
2
][
2
];
if
(
boxx
!=
gpu
->
sim
.
periodicBoxSizeX
||
boxy
!=
gpu
->
sim
.
periodicBoxSizeY
||
boxz
!=
gpu
->
sim
.
periodicBoxSizeZ
)
{
gpuSetPeriodicBoxSize
(
gpu
,
boxx
,
boxy
,
boxz
);
gpuSetConstants
(
gpu
);
}
if
(
data
.
nonbondedMethod
!=
NO_CUTOFF
&&
data
.
computeForceCount
%
100
==
0
)
if
(
data
.
nonbondedMethod
!=
NO_CUTOFF
&&
data
.
computeForceCount
%
100
==
0
)
gpuReorderAtoms
(
gpu
);
gpuReorderAtoms
(
gpu
);
data
.
computeForceCount
++
;
data
.
computeForceCount
++
;
...
@@ -77,6 +84,13 @@ void CudaCalcForcesAndEnergyKernel::finishForceComputation(ContextImpl& context)
...
@@ -77,6 +84,13 @@ void CudaCalcForcesAndEnergyKernel::finishForceComputation(ContextImpl& context)
void
CudaCalcForcesAndEnergyKernel
::
beginEnergyComputation
(
ContextImpl
&
context
)
{
void
CudaCalcForcesAndEnergyKernel
::
beginEnergyComputation
(
ContextImpl
&
context
)
{
_gpuContext
*
gpu
=
data
.
gpu
;
_gpuContext
*
gpu
=
data
.
gpu
;
Vec3
boxVectors
[
3
];
context
.
getOwner
().
getPeriodicBoxVectors
(
boxVectors
[
0
],
boxVectors
[
1
],
boxVectors
[
2
]);
float
boxx
=
boxVectors
[
0
][
0
],
boxy
=
boxVectors
[
1
][
1
],
boxz
=
boxVectors
[
2
][
2
];
if
(
boxx
!=
gpu
->
sim
.
periodicBoxSizeX
||
boxy
!=
gpu
->
sim
.
periodicBoxSizeY
||
boxz
!=
gpu
->
sim
.
periodicBoxSizeZ
)
{
gpuSetPeriodicBoxSize
(
gpu
,
boxx
,
boxy
,
boxz
);
gpuSetConstants
(
gpu
);
}
if
(
data
.
nonbondedMethod
!=
NO_CUTOFF
&&
data
.
stepCount
%
100
==
0
)
if
(
data
.
nonbondedMethod
!=
NO_CUTOFF
&&
data
.
stepCount
%
100
==
0
)
gpuReorderAtoms
(
gpu
);
gpuReorderAtoms
(
gpu
);
data
.
stepCount
++
;
data
.
stepCount
++
;
...
@@ -490,9 +504,6 @@ void CudaCalcNonbondedForceKernel::initialize(const System& system, const Nonbon
...
@@ -490,9 +504,6 @@ void CudaCalcNonbondedForceKernel::initialize(const System& system, const Nonbon
exclusionList
[
exclusions
[
i
].
first
].
push_back
(
exclusions
[
i
].
second
);
exclusionList
[
exclusions
[
i
].
first
].
push_back
(
exclusions
[
i
].
second
);
exclusionList
[
exclusions
[
i
].
second
].
push_back
(
exclusions
[
i
].
first
);
exclusionList
[
exclusions
[
i
].
second
].
push_back
(
exclusions
[
i
].
first
);
}
}
Vec3
boxVectors
[
3
];
system
.
getPeriodicBoxVectors
(
boxVectors
[
0
],
boxVectors
[
1
],
boxVectors
[
2
]);
gpuSetPeriodicBoxSize
(
gpu
,
(
float
)
boxVectors
[
0
][
0
],
(
float
)
boxVectors
[
1
][
1
],
(
float
)
boxVectors
[
2
][
2
]);
CudaNonbondedMethod
method
=
NO_CUTOFF
;
CudaNonbondedMethod
method
=
NO_CUTOFF
;
if
(
force
.
getNonbondedMethod
()
!=
NonbondedForce
::
NoCutoff
)
{
if
(
force
.
getNonbondedMethod
()
!=
NonbondedForce
::
NoCutoff
)
{
gpuSetNonbondedCutoff
(
gpu
,
(
float
)
force
.
getCutoffDistance
(),
(
float
)
force
.
getReactionFieldDielectric
());
gpuSetNonbondedCutoff
(
gpu
,
(
float
)
force
.
getCutoffDistance
(),
(
float
)
force
.
getReactionFieldDielectric
());
...
@@ -583,9 +594,6 @@ void CudaCalcCustomNonbondedForceKernel::initialize(const System& system, const
...
@@ -583,9 +594,6 @@ void CudaCalcCustomNonbondedForceKernel::initialize(const System& system, const
exclusionList
[
particle1
].
push_back
(
particle2
);
exclusionList
[
particle1
].
push_back
(
particle2
);
exclusionList
[
particle2
].
push_back
(
particle1
);
exclusionList
[
particle2
].
push_back
(
particle1
);
}
}
Vec3
boxVectors
[
3
];
system
.
getPeriodicBoxVectors
(
boxVectors
[
0
],
boxVectors
[
1
],
boxVectors
[
2
]);
gpuSetPeriodicBoxSize
(
gpu
,
(
float
)
boxVectors
[
0
][
0
],
(
float
)
boxVectors
[
1
][
1
],
(
float
)
boxVectors
[
2
][
2
]);
CudaNonbondedMethod
method
=
NO_CUTOFF
;
CudaNonbondedMethod
method
=
NO_CUTOFF
;
if
(
force
.
getNonbondedMethod
()
!=
CustomNonbondedForce
::
NoCutoff
)
if
(
force
.
getNonbondedMethod
()
!=
CustomNonbondedForce
::
NoCutoff
)
method
=
CUTOFF
;
method
=
CUTOFF
;
...
...
platforms/cuda/tests/TestCudaCustomNonbondedForce.cpp
View file @
bcc6216d
...
@@ -187,7 +187,7 @@ void testPeriodic() {
...
@@ -187,7 +187,7 @@ void testPeriodic() {
forceField
->
addParticle
(
vector
<
double
>
());
forceField
->
addParticle
(
vector
<
double
>
());
forceField
->
setNonbondedMethod
(
CustomNonbondedForce
::
CutoffPeriodic
);
forceField
->
setNonbondedMethod
(
CustomNonbondedForce
::
CutoffPeriodic
);
forceField
->
setCutoffDistance
(
2.0
);
forceField
->
setCutoffDistance
(
2.0
);
system
.
setPeriodicBoxVectors
(
Vec3
(
4
,
0
,
0
),
Vec3
(
0
,
4
,
0
),
Vec3
(
0
,
0
,
4
));
system
.
set
Default
PeriodicBoxVectors
(
Vec3
(
4
,
0
,
0
),
Vec3
(
0
,
4
,
0
),
Vec3
(
0
,
0
,
4
));
system
.
addForce
(
forceField
);
system
.
addForce
(
forceField
);
Context
context
(
system
,
integrator
,
platform
);
Context
context
(
system
,
integrator
,
platform
);
vector
<
Vec3
>
positions
(
3
);
vector
<
Vec3
>
positions
(
3
);
...
...
platforms/cuda/tests/TestCudaEwald.cpp
View file @
bcc6216d
...
@@ -79,7 +79,7 @@ void testEwaldPME(bool includeExceptions) {
...
@@ -79,7 +79,7 @@ void testEwaldPME(bool includeExceptions) {
nonbonded
->
addParticle
(
1.0
,
1.0
,
0.0
);
nonbonded
->
addParticle
(
1.0
,
1.0
,
0.0
);
for
(
int
i
=
0
;
i
<
numParticles
/
2
;
i
++
)
for
(
int
i
=
0
;
i
<
numParticles
/
2
;
i
++
)
nonbonded
->
addParticle
(
-
1.0
,
1.0
,
0.0
);
nonbonded
->
addParticle
(
-
1.0
,
1.0
,
0.0
);
system
.
setPeriodicBoxVectors
(
Vec3
(
boxSize
,
0
,
0
),
Vec3
(
0
,
boxSize
,
0
),
Vec3
(
0
,
0
,
boxSize
));
system
.
set
Default
PeriodicBoxVectors
(
Vec3
(
boxSize
,
0
,
0
),
Vec3
(
0
,
boxSize
,
0
),
Vec3
(
0
,
0
,
boxSize
));
system
.
addForce
(
nonbonded
);
system
.
addForce
(
nonbonded
);
vector
<
Vec3
>
positions
(
numParticles
);
vector
<
Vec3
>
positions
(
numParticles
);
...
@@ -184,7 +184,7 @@ void testEwald2Ions() {
...
@@ -184,7 +184,7 @@ void testEwald2Ions() {
const
double
cutoff
=
2.0
;
const
double
cutoff
=
2.0
;
nonbonded
->
setCutoffDistance
(
cutoff
);
nonbonded
->
setCutoffDistance
(
cutoff
);
nonbonded
->
setEwaldErrorTolerance
(
TOL
);
nonbonded
->
setEwaldErrorTolerance
(
TOL
);
system
.
setPeriodicBoxVectors
(
Vec3
(
6
,
0
,
0
),
Vec3
(
0
,
6
,
0
),
Vec3
(
0
,
0
,
6
));
system
.
set
Default
PeriodicBoxVectors
(
Vec3
(
6
,
0
,
0
),
Vec3
(
0
,
6
,
0
),
Vec3
(
0
,
0
,
6
));
system
.
addForce
(
nonbonded
);
system
.
addForce
(
nonbonded
);
Context
context
(
system
,
integrator
,
platform
);
Context
context
(
system
,
integrator
,
platform
);
vector
<
Vec3
>
positions
(
2
);
vector
<
Vec3
>
positions
(
2
);
...
@@ -205,7 +205,7 @@ void testErrorTolerance(NonbondedForce::NonbondedMethod method) {
...
@@ -205,7 +205,7 @@ void testErrorTolerance(NonbondedForce::NonbondedMethod method) {
const
int
numParticles
=
51
;
const
int
numParticles
=
51
;
const
double
boxWidth
=
5.0
;
const
double
boxWidth
=
5.0
;
System
system
;
System
system
;
system
.
setPeriodicBoxVectors
(
Vec3
(
boxWidth
,
0
,
0
),
Vec3
(
0
,
boxWidth
,
0
),
Vec3
(
0
,
0
,
boxWidth
));
system
.
set
Default
PeriodicBoxVectors
(
Vec3
(
boxWidth
,
0
,
0
),
Vec3
(
0
,
boxWidth
,
0
),
Vec3
(
0
,
0
,
boxWidth
));
NonbondedForce
*
force
=
new
NonbondedForce
();
NonbondedForce
*
force
=
new
NonbondedForce
();
system
.
addForce
(
force
);
system
.
addForce
(
force
);
vector
<
Vec3
>
positions
(
numParticles
);
vector
<
Vec3
>
positions
(
numParticles
);
...
...
platforms/cuda/tests/TestCudaGBSAOBCForce.cpp
View file @
bcc6216d
...
@@ -91,7 +91,7 @@ void testCutoffAndPeriodic() {
...
@@ -91,7 +91,7 @@ void testCutoffAndPeriodic() {
const
double
boxSize
=
10.0
;
const
double
boxSize
=
10.0
;
nonbonded
->
setCutoffDistance
(
cutoffDistance
);
nonbonded
->
setCutoffDistance
(
cutoffDistance
);
gbsa
->
setCutoffDistance
(
cutoffDistance
);
gbsa
->
setCutoffDistance
(
cutoffDistance
);
system
.
setPeriodicBoxVectors
(
Vec3
(
boxSize
,
0
,
0
),
Vec3
(
0
,
boxSize
,
0
),
Vec3
(
0
,
0
,
boxSize
));
system
.
set
Default
PeriodicBoxVectors
(
Vec3
(
boxSize
,
0
,
0
),
Vec3
(
0
,
boxSize
,
0
),
Vec3
(
0
,
0
,
boxSize
));
system
.
addForce
(
gbsa
);
system
.
addForce
(
gbsa
);
system
.
addForce
(
nonbonded
);
system
.
addForce
(
nonbonded
);
vector
<
Vec3
>
positions
(
2
);
vector
<
Vec3
>
positions
(
2
);
...
@@ -152,7 +152,7 @@ void testForce(int numParticles, NonbondedForce::NonbondedMethod method, GBSAOBC
...
@@ -152,7 +152,7 @@ void testForce(int numParticles, NonbondedForce::NonbondedMethod method, GBSAOBC
int
grid
=
(
int
)
floor
(
0.5
+
pow
(
numParticles
,
1.0
/
3.0
));
int
grid
=
(
int
)
floor
(
0.5
+
pow
(
numParticles
,
1.0
/
3.0
));
if
(
method
==
NonbondedForce
::
CutoffPeriodic
)
{
if
(
method
==
NonbondedForce
::
CutoffPeriodic
)
{
double
boxSize
=
(
grid
+
1
)
*
1.1
;
double
boxSize
=
(
grid
+
1
)
*
1.1
;
system
.
setPeriodicBoxVectors
(
Vec3
(
boxSize
,
0
,
0
),
Vec3
(
0
,
boxSize
,
0
),
Vec3
(
0
,
0
,
boxSize
));
system
.
set
Default
PeriodicBoxVectors
(
Vec3
(
boxSize
,
0
,
0
),
Vec3
(
0
,
boxSize
,
0
),
Vec3
(
0
,
0
,
boxSize
));
}
}
system
.
addForce
(
gbsa
);
system
.
addForce
(
gbsa
);
system
.
addForce
(
nonbonded
);
system
.
addForce
(
nonbonded
);
...
...
platforms/cuda/tests/TestCudaNonbondedForce.cpp
View file @
bcc6216d
...
@@ -343,7 +343,7 @@ void testPeriodic() {
...
@@ -343,7 +343,7 @@ void testPeriodic() {
nonbonded
->
setNonbondedMethod
(
NonbondedForce
::
CutoffPeriodic
);
nonbonded
->
setNonbondedMethod
(
NonbondedForce
::
CutoffPeriodic
);
const
double
cutoff
=
2.0
;
const
double
cutoff
=
2.0
;
nonbonded
->
setCutoffDistance
(
cutoff
);
nonbonded
->
setCutoffDistance
(
cutoff
);
system
.
setPeriodicBoxVectors
(
Vec3
(
4
,
0
,
0
),
Vec3
(
0
,
4
,
0
),
Vec3
(
0
,
0
,
4
));
system
.
set
Default
PeriodicBoxVectors
(
Vec3
(
4
,
0
,
0
),
Vec3
(
0
,
4
,
0
),
Vec3
(
0
,
0
,
4
));
system
.
addForce
(
nonbonded
);
system
.
addForce
(
nonbonded
);
Context
context
(
system
,
integrator
,
platform
);
Context
context
(
system
,
integrator
,
platform
);
vector
<
Vec3
>
positions
(
3
);
vector
<
Vec3
>
positions
(
3
);
...
@@ -423,7 +423,7 @@ void testLargeSystem() {
...
@@ -423,7 +423,7 @@ void testLargeSystem() {
// Now do the same thing with periodic boundary conditions.
// Now do the same thing with periodic boundary conditions.
nonbonded
->
setNonbondedMethod
(
NonbondedForce
::
CutoffPeriodic
);
nonbonded
->
setNonbondedMethod
(
NonbondedForce
::
CutoffPeriodic
);
system
.
setPeriodicBoxVectors
(
Vec3
(
boxSize
,
0
,
0
),
Vec3
(
0
,
boxSize
,
0
),
Vec3
(
0
,
0
,
boxSize
));
system
.
set
Default
PeriodicBoxVectors
(
Vec3
(
boxSize
,
0
,
0
),
Vec3
(
0
,
boxSize
,
0
),
Vec3
(
0
,
0
,
boxSize
));
cudaContext
.
reinitialize
();
cudaContext
.
reinitialize
();
referenceContext
.
reinitialize
();
referenceContext
.
reinitialize
();
cudaContext
.
setPositions
(
positions
);
cudaContext
.
setPositions
(
positions
);
...
@@ -461,7 +461,7 @@ void testBlockInteractions(bool periodic) {
...
@@ -461,7 +461,7 @@ void testBlockInteractions(bool periodic) {
}
}
nonbonded
->
setNonbondedMethod
(
periodic
?
NonbondedForce
::
CutoffPeriodic
:
NonbondedForce
::
CutoffNonPeriodic
);
nonbonded
->
setNonbondedMethod
(
periodic
?
NonbondedForce
::
CutoffPeriodic
:
NonbondedForce
::
CutoffNonPeriodic
);
nonbonded
->
setCutoffDistance
(
cutoff
);
nonbonded
->
setCutoffDistance
(
cutoff
);
system
.
setPeriodicBoxVectors
(
Vec3
(
boxSize
,
0
,
0
),
Vec3
(
0
,
boxSize
,
0
),
Vec3
(
0
,
0
,
boxSize
));
system
.
set
Default
PeriodicBoxVectors
(
Vec3
(
boxSize
,
0
,
0
),
Vec3
(
0
,
boxSize
,
0
),
Vec3
(
0
,
0
,
boxSize
));
system
.
addForce
(
nonbonded
);
system
.
addForce
(
nonbonded
);
Context
context
(
system
,
integrator
,
cuda
);
Context
context
(
system
,
integrator
,
cuda
);
context
.
setPositions
(
positions
);
context
.
setPositions
(
positions
);
...
...
platforms/cuda/tests/TstCudaUsingParameterFile.cpp
View file @
bcc6216d
...
@@ -3848,9 +3848,9 @@ Integrator* readParameterFile( const std::string& inputParameterFile, MapStringI
...
@@ -3848,9 +3848,9 @@ Integrator* readParameterFile( const std::string& inputParameterFile, MapStringI
boxIndex
++
;
boxIndex
++
;
}
}
}
}
system
.
setPeriodicBoxVectors
(
box
[
0
],
box
[
1
],
box
[
2
]
);
system
.
set
Default
PeriodicBoxVectors
(
box
[
0
],
box
[
1
],
box
[
2
]
);
Vec3
a
,
b
,
c
;
Vec3
a
,
b
,
c
;
system
.
getPeriodicBoxVectors
(
a
,
b
,
c
);
system
.
get
Default
PeriodicBoxVectors
(
a
,
b
,
c
);
if
(
log
){
if
(
log
){
(
void
)
fprintf
(
log
,
"Box [%14.7f %14.7f %14.7f]
\n
[%14.7f %14.7f %14.7f]
\n
[%14.7f %14.7f %14.7f]
\n
"
,
(
void
)
fprintf
(
log
,
"Box [%14.7f %14.7f %14.7f]
\n
[%14.7f %14.7f %14.7f]
\n
[%14.7f %14.7f %14.7f]
\n
"
,
a
[
0
],
a
[
1
],
a
[
2
],
b
[
0
],
b
[
1
],
b
[
2
],
c
[
0
],
c
[
1
],
c
[
2
]
);
a
[
0
],
a
[
1
],
a
[
2
],
b
[
0
],
b
[
1
],
b
[
2
],
c
[
0
],
c
[
1
],
c
[
2
]
);
...
...
platforms/opencl/src/OpenCLContext.cpp
View file @
bcc6216d
...
@@ -408,7 +408,6 @@ void OpenCLContext::reorderAtoms() {
...
@@ -408,7 +408,6 @@ void OpenCLContext::reorderAtoms() {
posq
->
download
();
posq
->
download
();
velm
->
download
();
velm
->
download
();
mm_float4
periodicBoxSize
=
nonbonded
->
getPeriodicBoxSize
();
float
minx
=
posq
->
get
(
0
).
x
,
maxx
=
posq
->
get
(
0
).
x
;
float
minx
=
posq
->
get
(
0
).
x
,
maxx
=
posq
->
get
(
0
).
x
;
float
miny
=
posq
->
get
(
0
).
y
,
maxy
=
posq
->
get
(
0
).
y
;
float
miny
=
posq
->
get
(
0
).
y
,
maxy
=
posq
->
get
(
0
).
y
;
float
minz
=
posq
->
get
(
0
).
z
,
maxz
=
posq
->
get
(
0
).
z
;
float
minz
=
posq
->
get
(
0
).
z
,
maxz
=
posq
->
get
(
0
).
z
;
...
...
platforms/opencl/src/OpenCLContext.h
View file @
bcc6216d
...
@@ -315,6 +315,25 @@ public:
...
@@ -315,6 +315,25 @@ public:
int
getSIMDWidth
()
const
{
int
getSIMDWidth
()
const
{
return
simdWidth
;
return
simdWidth
;
}
}
/**
* Get the size of the periodic box.
*/
mm_float4
getPeriodicBoxSize
()
const
{
return
periodicBoxSize
;
}
/**
* Set the size of the periodic box.
*/
void
setPeriodicBoxSize
(
double
xsize
,
double
ysize
,
double
zsize
)
{
periodicBoxSize
=
mm_float4
((
float
)
xsize
,
(
float
)
ysize
,
(
float
)
zsize
,
0
);
invPeriodicBoxSize
=
mm_float4
((
float
)
(
1.0
/
xsize
),
(
float
)
(
1.0
/
ysize
),
(
float
)
(
1.0
/
zsize
),
0
);
}
/**
* Get the inverse of the size of the periodic box.
*/
mm_float4
getInvPeriodicBoxSize
()
const
{
return
invPeriodicBoxSize
;
}
/**
/**
* Get the OpenCLIntegrationUtilities for this context.
* Get the OpenCLIntegrationUtilities for this context.
*/
*/
...
@@ -347,6 +366,8 @@ private:
...
@@ -347,6 +366,8 @@ private:
int
numThreadBlocks
;
int
numThreadBlocks
;
int
numForceBuffers
;
int
numForceBuffers
;
int
simdWidth
;
int
simdWidth
;
mm_float4
periodicBoxSize
;
mm_float4
invPeriodicBoxSize
;
std
::
string
compilationOptions
;
std
::
string
compilationOptions
;
cl
::
Context
context
;
cl
::
Context
context
;
cl
::
Device
device
;
cl
::
Device
device
;
...
...
Prev
1
2
3
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