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
f62ba9d8
Commit
f62ba9d8
authored
Jun 12, 2009
by
Michael Sherman
Browse files
Minor tweaks and comments.
parent
f337005b
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
91 additions
and
92 deletions
+91
-92
examples/HelloArgon.cpp
examples/HelloArgon.cpp
+79
-79
examples/HelloSodiumChloride.cpp
examples/HelloSodiumChloride.cpp
+3
-3
examples/HelloSodiumChlorideInC.c
examples/HelloSodiumChlorideInC.c
+7
-8
examples/wrappers/OpenMM_CWrapper.cpp
examples/wrappers/OpenMM_CWrapper.cpp
+1
-1
examples/wrappers/OpenMM_CWrapper.h
examples/wrappers/OpenMM_CWrapper.h
+1
-1
No files found.
examples/HelloArgon.cpp
View file @
f62ba9d8
...
...
@@ -8,87 +8,87 @@
// other visualization tool to produce an animation of the resulting trajectory.
// -----------------------------------------------------------------------------
#include "OpenMM.h"
#include <cstdio>
// Forward declaration of writePdb() subroutine for printing atomic
// coordinates, defined later in this source file.
void
writePdb
(
const
OpenMM
::
OpenMMContext
&
context
);
void
simulateArgon
()
{
// Load any shared libraries containing GPU implementations
OpenMM
::
Platform
::
loadPluginsFromDirectory
(
OpenMM
::
Platform
::
getDefaultPluginsDirectory
());
// Create a system with nonbonded forces
OpenMM
::
System
system
;
OpenMM
::
NonbondedForce
*
nonbond
=
new
OpenMM
::
NonbondedForce
();
system
.
addForce
(
nonbond
);
// Create three atoms
std
::
vector
<
OpenMM
::
Vec3
>
initialPositions
(
3
);
for
(
int
a
=
0
;
a
<
3
;
++
a
)
{
system
.
addParticle
(
39.95
);
// mass, grams per mole
// charge, sigma, well depth
nonbond
->
addParticle
(
0.0
,
0.3350
,
0.996
);
initialPositions
[
a
]
=
OpenMM
::
Vec3
(
0.5
*
a
,
0
,
0
);
// location, nanometers
}
OpenMM
::
VerletIntegrator
integrator
(
0.004
);
// step size in picoseconds
// Let OpenMM Context choose best platform.
OpenMM
::
OpenMMContext
context
(
system
,
integrator
);
printf
(
"REMARK Using OpenMM platform %s
\n
"
,
context
.
getPlatform
().
getName
().
c_str
()
);
// Set the starting positions of the atoms. Velocities will be zero.
context
.
setPositions
(
initialPositions
);
// Simulate
while
(
context
.
getTime
()
<
10.0
)
{
// picoseconds
writePdb
(
context
);
// output coordinates
// Run 100 steps at a time, for efficient use of OpenMM
integrator
.
step
(
100
);
}
writePdb
(
context
);
// output final coordinates
}
int
main
()
{
try
{
simulateArgon
();
return
0
;
// success!
}
#include "OpenMM.h"
#include <cstdio>
// Forward declaration of writePdb() subroutine for printing atomic
// coordinates, defined later in this source file.
void
writePdb
(
const
OpenMM
::
OpenMMContext
&
context
);
void
simulateArgon
()
{
// Load any shared libraries containing GPU implementations
OpenMM
::
Platform
::
loadPluginsFromDirectory
(
OpenMM
::
Platform
::
getDefaultPluginsDirectory
());
// Create a system with nonbonded forces
OpenMM
::
System
system
;
OpenMM
::
NonbondedForce
*
nonbond
=
new
OpenMM
::
NonbondedForce
();
system
.
addForce
(
nonbond
);
// Create three atoms
std
::
vector
<
OpenMM
::
Vec3
>
initialPositions
(
3
);
for
(
int
a
=
0
;
a
<
3
;
++
a
)
{
system
.
addParticle
(
39.95
);
// mass, grams per mole
// charge, sigma, well depth
nonbond
->
addParticle
(
0.0
,
0.3350
,
0.996
);
initialPositions
[
a
]
=
OpenMM
::
Vec3
(
0.5
*
a
,
0
,
0
);
// location, nanometers
}
OpenMM
::
VerletIntegrator
integrator
(
0.004
);
// step size in picoseconds
// Let OpenMM Context choose best platform.
OpenMM
::
OpenMMContext
context
(
system
,
integrator
);
printf
(
"REMARK Using OpenMM platform %s
\n
"
,
context
.
getPlatform
().
getName
().
c_str
()
);
// Set the starting positions of the atoms. Velocities will be zero.
context
.
setPositions
(
initialPositions
);
// Simulate
while
(
context
.
getTime
()
<
10.0
)
{
// picoseconds
writePdb
(
context
);
// output coordinates
// Run 100 steps at a time, for efficient use of OpenMM
integrator
.
step
(
100
);
}
writePdb
(
context
);
// output final coordinates
}
int
main
()
{
try
{
simulateArgon
();
return
0
;
// success!
}
// Catch and report usage and runtime errors detected by OpenMM and fail.
catch
(
const
std
::
exception
&
e
)
{
printf
(
"EXCEPTION: %s
\n
"
,
e
.
what
());
return
1
;
// failure!
}
}
// writePdb() subroutine for quick-and-dirty trajectory output.
void
writePdb
(
const
OpenMM
::
OpenMMContext
&
context
)
{
// Request atomic positions from OpenMM
const
OpenMM
::
State
state
=
context
.
getState
(
OpenMM
::
State
::
Positions
);
const
std
::
vector
<
OpenMM
::
Vec3
>&
pos
=
state
.
getPositions
();
// write out in PDB format
// Use PDB MODEL cards to number trajectory frames
static
int
modelFrameNumber
=
0
;
modelFrameNumber
++
;
printf
(
"MODEL %d
\n
"
,
modelFrameNumber
);
// start of frame
for
(
int
a
=
0
;
a
<
context
.
getSystem
().
getNumParticles
();
++
a
)
{
printf
(
"ATOM %5d AR AR 1 "
,
a
+
1
);
// atom number
printf
(
"%8.3f%8.3f%8.3f 1.00 0.00 AR
\n
"
,
// coordinates
// "*10" converts nanometers to Angstroms
pos
[
a
][
0
]
*
10
,
pos
[
a
][
1
]
*
10
,
pos
[
a
][
2
]
*
10
);
}
printf
(
"ENDMDL
\n
"
);
// end of frame
}
}
// writePdb() subroutine for quick-and-dirty trajectory output.
void
writePdb
(
const
OpenMM
::
OpenMMContext
&
context
)
{
// Request atomic positions from OpenMM
const
OpenMM
::
State
state
=
context
.
getState
(
OpenMM
::
State
::
Positions
);
const
std
::
vector
<
OpenMM
::
Vec3
>&
pos
=
state
.
getPositions
();
// write out in PDB format
// Use PDB MODEL cards to number trajectory frames
static
int
modelFrameNumber
=
0
;
modelFrameNumber
++
;
printf
(
"MODEL %d
\n
"
,
modelFrameNumber
);
// start of frame
for
(
int
a
=
0
;
a
<
context
.
getSystem
().
getNumParticles
();
++
a
)
{
printf
(
"ATOM %5d AR AR 1 "
,
a
+
1
);
// atom number
printf
(
"%8.3f%8.3f%8.3f 1.00 0.00 AR
\n
"
,
// coordinates
// "*10" converts nanometers to Angstroms
pos
[
a
][
0
]
*
10
,
pos
[
a
][
1
]
*
10
,
pos
[
a
][
2
]
*
10
);
}
printf
(
"ENDMDL
\n
"
);
// end of frame
}
examples/HelloSodiumChloride.cpp
View file @
f62ba9d8
...
...
@@ -187,9 +187,9 @@ struct MyOpenMMData {
// INITIALIZE OpenMM DATA STRUCTURES
// -----------------------------------------------------------------------------
// We take these actions here:
// (1) Allocate a MyOpenMMData structure to hang on to OpenMM data structures
// (1) Load any available OpenMM plugins, e.g. Cuda and Brook.
// (2) Allocate a MyOpenMMData structure to hang on to OpenMM data structures
// in a manner which is opaque to the caller.
// (2) Allocate the OpenMM objects which persist from call to call.
// (3) Fill the OpenMM::System with the force field parameters we want to
// use and the particular set of atoms to be simulated.
// (4) Create an Integrator and a Context associating the Integrator with
...
...
@@ -232,7 +232,7 @@ myInitializeOpenMM( const MyAtomInfo atoms[],
// (1) System needs to know the masses.
// (2) NonbondedForce needs charges,van der Waals properties (in MD units!).
// (3) GBSA needs charge, radius, and scale factor.
// (
3
) Collect default positions for initializing the simulation later.
// (
4
) Collect default positions for initializing the simulation later.
std
::
vector
<
Vec3
>
initialPosInNm
;
for
(
int
n
=
0
;
*
atoms
[
n
].
pdb
;
++
n
)
{
const
MyAtomInfo
&
atom
=
atoms
[
n
];
...
...
examples/HelloSodiumChlorideInC.c
View file @
f62ba9d8
...
...
@@ -184,7 +184,7 @@ struct MyOpenMMData_s {
*
* Note that this function must understand the calling MD code's molecule and
* force field data structures so will need to be customized for each MD code.
*/
*/
static
MyOpenMMData
*
myInitializeOpenMM
(
const
MyAtomInfo
atoms
[],
double
temperature
,
...
...
@@ -274,7 +274,7 @@ myGetOpenMMState(MyOpenMMData* omm, int wantEnergy,
MyAtomInfo
atoms
[])
{
OpenMM_State
*
state
;
const
OpenMM_Vec3Array
*
posArray
;
const
OpenMM_Vec3Array
*
posArray
InNm
;
int
infoMask
;
int
n
;
...
...
@@ -291,12 +291,11 @@ myGetOpenMMState(MyOpenMMData* omm, int wantEnergy,
/* Positions are maintained as a Vec3Array inside the State. This will give
* us access, but don't destroy it yourself -- it will go away with the State. */
posArray
=
OpenMM_State_getPositions
(
state
);
for
(
n
=
0
;
*
atoms
[
n
].
pdb
;
++
n
)
{
double
posInNm
[
3
];
OpenMM_Vec3Array_get
(
posArray
,
n
,
posInNm
);
OpenMM_Vec3_scale
(
posInNm
,
OpenMM_AngstromsPerNm
,
atoms
[
n
].
posInAng
);
}
posArrayInNm
=
OpenMM_State_getPositions
(
state
);
for
(
n
=
0
;
*
atoms
[
n
].
pdb
;
++
n
)
/* Sets atoms[n].pos = posArray[n] * Angstroms/nm. */
OpenMM_Vec3Array_getScaled
(
posArrayInNm
,
n
,
OpenMM_AngstromsPerNm
,
atoms
[
n
].
posInAng
);
/* If energy has been requested, obtain it and convert from kJ to kcal. */
*
energyInKcal
=
0
;
...
...
examples/wrappers/OpenMM_CWrapper.cpp
View file @
f62ba9d8
...
...
@@ -299,7 +299,7 @@ void OpenMM_GBSAOBCForce_destroy(OpenMM_GBSAOBCForce* doomed)
void
openmm_gbsaobcforce_destroy_
(
OpenMM_GBSAOBCForce
*&
doomed
)
{
OpenMM_GBSAOBCForce_destroy
(
doomed
);
doomed
=
0
;}
// Fortran only: recast
Nonbonded
Force as a Force.
// Fortran only: recast
GBSAOBC
Force as a Force.
void
openmm_gbsaobcforce_asforce_
(
OpenMM_GBSAOBCForce
*
const
&
gbsa
,
OpenMM_Force
*&
force
)
{
force
=
(
OpenMM_Force
*
)
gbsa
;
}
...
...
examples/wrappers/OpenMM_CWrapper.h
View file @
f62ba9d8
...
...
@@ -129,7 +129,7 @@ extern void OpenMM_Vec3Array_get(const OpenMM_Vec3Array*, int i,
extern
void
OpenMM_Vec3Array_getScaled
(
const
OpenMM_Vec3Array
*
,
int
i
,
double
s
,
double
[
3
]);
extern
void
OpenMM_Vec3Array_set
(
OpenMM_Vec3Array
*
,
int
i
,
const
double
[
3
]);
extern
void
OpenMM_Vec3Array_setScaled
(
OpenMM_Vec3Array
*
,
int
i
,
const
double
[
3
],
double
s
);
extern
void
OpenMM_Vec3_scale
(
const
double
[
3
],
double
s
,
double
[
3
]);
extern
void
OpenMM_Vec3_scale
(
const
double
in
[
3
],
double
s
,
double
out
[
3
]);
/* OpenMM_String */
extern
OpenMM_String
*
OpenMM_String_create
(
const
char
*
init
);
...
...
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