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
bb42a5dd
Commit
bb42a5dd
authored
Jul 08, 2011
by
Mark Friedrichs
Browse files
Update for getState()
parent
aff7f7bd
Changes
2
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
19 additions
and
451 deletions
+19
-451
examples/HelloArgonInC.c
examples/HelloArgonInC.c
+9
-116
examples/HelloSodiumChlorideInC.c
examples/HelloSodiumChlorideInC.c
+10
-335
No files found.
examples/HelloArgonInC.c
View file @
bb42a5dd
/* -----------------------------------------------------------------------------
Vim:
Warning:
Output
is
not
to
a
terminal
* OpenMM(tm) HelloArgon example in C (June 2009)
[
?
1049
h
[
?
1
h
=
[
1
;
36
r
[
?
12
;
25
h
[
?
12l
[
?
25
h
[
27
m
[
m
[
H
[
2
J
[
?
25l
[
36
;
1
H
"svn-commit.2.tmp"
5L
,
119
C
[
1
;
1
H
[
33
m
1
* -----------------------------------------------------------------------------
2
[
m
[
32
m
--
This
line
,
and
those
below
,
will
be
ignored
--
[
m
* This program demonstrates a simple molecular simulation using the OpenMM
[
33
m
3
* API for GPU-accelerated molecular dynamics simulation. The primary goal is
4
[
m
[
1
m
[
35
mM
examples
/
HelloArgonInC
.
c
[
m
* to make sure you can compile, link, and run with OpenMM and view the output.
[
33
m
5
[
m
[
1
m
[
35
mM
examples
/
HelloSodiumChlorideInC
.
c
[
m
* The example is available in C++, C, and Fortran 95.
[
1
m
[
34
m
~
[
7
;
1
H
~
[
8
;
1
H
~
[
9
;
1
H
~
[
10
;
1
H
~
[
11
;
1
H
~
[
12
;
1
H
~
[
13
;
1
H
~
[
14
;
1
H
~
[
15
;
1
H
~
[
16
;
1
H
~
[
17
;
1
H
~
[
18
;
1
H
~
[
19
;
1
H
~
[
20
;
1
H
~
[
21
;
1
H
~
[
22
;
1
H
~
[
23
;
1
H
~
[
24
;
1
H
~
[
25
;
1
H
~
[
26
;
1
H
~
[
27
;
1
H
~
[
28
;
1
H
~
[
29
;
1
H
~
[
30
;
1
H
~
[
31
;
1
H
~
[
32
;
1
H
~
[
33
;
1
H
~
[
34
;
1
H
~
[
35
;
1
H
~
[
m
[
36
;
181
H1
,
0
-
1
[
9
CAll
[
1
;
5
H
[
?
12l
[
?
25
h
[
?
25l
[
36
;
181
H2
,
1
[
2
;
5
H
[
?
12l
[
?
25
h
[
?
25l
[
36
;
181
H1
,
0
-
1
[
1
;
5
H
[
?
12l
[
?
25
h
[
?
25l
[
36
;
1
H
[
1
m
--
INSERT
--
[
m
[
36
;
13
H
[
K
[
36
;
181
H1
,
1
[
11
CAll
[
1
;
5
H
[
?
12l
[
?
25
h
[
?
25l
M
[
36
;
183
H2
[
1
;
6
H
[
?
12l
[
?
25
h
[
?
25l
[
1
;
5
H
[
K
[
36
;
183
H1
[
1
;
5
H
[
?
12l
[
?
25
h
[
?
25lU
[
36
;
183
H2
[
1
;
6
H
[
?
12l
[
?
25
h
[
?
25l
p
[
36
;
183
H3
[
1
;
7
H
[
?
12l
[
?
25
h
[
?
25l
d
[
36
;
183
H4
[
1
;
8
H
[
?
12l
[
?
25
h
[
?
25l
a
[
36
;
183
H5
[
1
;
9
H
[
?
12l
[
?
25
h
[
?
25l
t
[
36
;
183
H6
[
1
;
10
H
[
?
12l
[
?
25
h
[
?
25l
e
[
36
;
183
H7
[
1
;
11
H
[
?
12l
[
?
25
h
[
?
25l
[
36
;
183
H8
[
1
;
12
H
[
?
12l
[
?
25
h
[
?
25l
f
[
36
;
183
H9
[
1
;
13
H
[
?
12l
[
?
25
h
[
?
25l
o
[
36
;
183
H10
[
1
;
14
H
[
?
12l
[
?
25
h
[
?
25l
r
[
36
;
184
H1
[
1
;
15
H
[
?
12l
[
?
25
h
[
?
25l
[
36
;
184
H2
[
1
;
16
H
[
?
12l
[
?
25
h
[
?
25l
g
[
36
;
184
H3
[
1
;
17
H
[
?
12l
[
?
25
h
[
?
25l
e
[
36
;
184
H4
[
1
;
18
H
[
?
12l
[
?
25
h
[
?
25l
t
[
36
;
184
H5
[
1
;
19
H
[
?
12l
[
?
25
h
[
?
25l
S
[
36
;
184
H6
[
1
;
20
H
[
?
12l
[
?
25
h
[
?
25l
t
[
36
;
184
H7
[
1
;
21
H
[
?
12l
[
?
25
h
[
?
25l
a
[
36
;
184
H8
[
1
;
22
H
[
?
12l
[
?
25
h
[
?
25l
t
[
36
;
184
H9
[
1
;
23
H
[
?
12l
[
?
25
h
[
?
25l
e
[
36
;
183
H20
[
1
;
24
H
[
?
12l
[
?
25
h
[
?
25l
(
[
36
;
184
H1
[
1
;
25
H
[
?
12l
[
?
25
h
[
?
25l
)
[
36
;
184
H0
[
1
;
24
H
[
?
12l
[
?
25
h
[
36
;
1
H
[
K
[
1
;
25
H
[
?
25l
[
46
m
()
[
m
[
36
;
181
H1
,
21
[
10
CAll
[
1
;
25
H
[
?
12l
[
?
25
h
[
?
25l
[
36
;
181
H
[
K
[
36
;
1
H
:
[
?
12l
[
?
25
hwq
[
?
25l
"svn-commit.2.tmp"
5L
,
140
C
written
*
[
?
1l
>
[
?
12l
[
?
25
h
[
?
1049l
Sending
examples
/
HelloArgonInC
.
c
* The system modeled here is a small number of argon atoms in a vacuum.
Sending
examples
/
HelloSodiumChlorideInC
.
c
* A multi-frame PDB file is written to stdout which can be read by VMD or
* other visualization tool to produce an animation of the resulting trajectory.
* -------------------------------------------------------------------------- */
#include "OpenMMCWrapper.h"
#include <stdio.h>
/* Forward declaration of routine for printing one frame of the
trajectory, defined later in this source file. */
void
writePdbFrame
(
int
frameNum
,
const
OpenMM_State
*
);
void
simulateArgon
()
{
OpenMM_System
*
system
;
OpenMM_Integrator
*
integrator
;
OpenMM_Context
*
context
;
OpenMM_Platform
*
platform
;
OpenMM_NonbondedForce
*
nonbond
;
OpenMM_Vec3Array
*
initPosInNm
;
OpenMM_StringArray
*
pluginList
;
int
a
,
frameNum
;
/* Load any shared libraries containing GPU implementations. */
pluginList
=
OpenMM_Platform_loadPluginsFromDirectory
(
OpenMM_Platform_getDefaultPluginsDirectory
());
OpenMM_StringArray_destroy
(
pluginList
);
/* Create a system with nonbonded forces. System takes ownership
of Force; don't destroy it yourself. */
system
=
OpenMM_System_create
();
nonbond
=
OpenMM_NonbondedForce_create
();
OpenMM_System_addForce
(
system
,
(
OpenMM_Force
*
)
nonbond
);
/* Create three atoms. */
initPosInNm
=
OpenMM_Vec3Array_create
(
3
);
for
(
a
=
0
;
a
<
3
;
++
a
)
{
const
OpenMM_Vec3
posNm
=
{
0
.
5
*
a
,
0
,
0
};
/*location, nm*/
OpenMM_Vec3Array_set
(
initPosInNm
,
a
,
posNm
);
OpenMM_System_addParticle
(
system
,
39
.
95
);
/*mass of Ar, grams/mole*/
/* charge, L-J sigma (nm), well depth (kJ) */
OpenMM_NonbondedForce_addParticle
(
nonbond
,
0
.
0
,
0
.
3350
,
0
.
996
);
/*vdWRad(Ar)=.188 nm*/
}
/* Create particular integrator, and recast to generic one. */
integrator
=
(
OpenMM_Integrator
*
)
OpenMM_VerletIntegrator_create
(
0
.
004
);
/*step size in ps*/
/* Let OpenMM Context choose best platform. */
context
=
OpenMM_Context_create
(
system
,
integrator
);
platform
=
OpenMM_Context_getPlatform
(
context
);
printf
(
"REMARK Using OpenMM platform %s
\n
"
,
OpenMM_Platform_getName
(
platform
));
/* Set starting positions of the atoms. Leave time and velocity zero. */
OpenMM_Context_setPositions
(
context
,
initPosInNm
);
/* Simulate. */
for
(
frameNum
=
1
;
;
++
frameNum
)
{
/* Output current state information. */
OpenMM_State
*
state
=
OpenMM_Context_getState
(
context
,
OpenMM_State_Positions
,
0
);
const
double
timeInPs
=
OpenMM_State_getTime
(
state
);
writePdbFrame
(
frameNum
,
state
);
/*output coordinates*/
OpenMM_State_destroy
(
state
);
if
(
timeInPs
>=
10
.)
break
;
/* Advance state many steps at a time, for efficient use of OpenMM. */
OpenMM_Integrator_step
(
integrator
,
10
);
/*(use a lot more than this normally)*/
}
/* Free heap space for all the objects created above. */
OpenMM_Vec3Array_destroy
(
initPosInNm
);
OpenMM_Context_destroy
(
context
);
OpenMM_Integrator_destroy
(
integrator
);
OpenMM_System_destroy
(
system
);
}
int
main
()
{
simulateArgon
();
return
0
;
}
/* Handy homebrew PDB writer for quick-and-dirty trajectory output. */
void
writePdbFrame
(
int
frameNum
,
const
OpenMM_State
*
state
)
{
int
a
;
/* Reference atomic positions in the OpenMM State. */
const
OpenMM_Vec3Array
*
posInNm
=
OpenMM_State_getPositions
(
state
);
/* Use PDB MODEL cards to number trajectory frames. */
printf
(
"MODEL %d
\n
"
,
frameNum
);
/*start of frame*/
for
(
a
=
0
;
a
<
OpenMM_Vec3Array_getSize
(
posInNm
);
++
a
)
{
OpenMM_Vec3
posInAng
;
/* "10" here converts nanometers to Angstroms */
posInAng
=
OpenMM_Vec3_scale
(
*
OpenMM_Vec3Array_get
(
posInNm
,
a
),
10
.);
printf
(
"ATOM %5d AR AR 1 "
,
a
+
1
);
/*atom number*/
printf
(
"%8.3f%8.3f%8.3f 1.00 0.00
\n
"
,
/*coordinates*/
posInAng
.
x
,
posInAng
.
y
,
posInAng
.
z
);
}
printf
(
"ENDMDL
\n
"
);
/*end of frame*/
}
...
...
examples/HelloSodiumChlorideInC.c
View file @
bb42a5dd
This diff is collapsed.
Click to expand it.
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