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
"devtools/packaging/install.sh" did not exist on "476ee9b515263742e3f92e6d4fb85c1df99fa2b1"
Commit
bb42a5dd
authored
Jul 08, 2011
by
Mark Friedrichs
Browse files
Update for getState()
parent
aff7f7bd
Changes
2
Expand all
Show 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
/* -----------------------------------------------------------------------------
* OpenMM(tm) HelloArgon example in C (June 2009)
* -----------------------------------------------------------------------------
* This program demonstrates a simple molecular simulation using the OpenMM
* API for GPU-accelerated molecular dynamics simulation. The primary goal is
* to make sure you can compile, link, and run with OpenMM and view the output.
* The example is available in C++, C, and Fortran 95.
*
* The system modeled here is a small number of argon atoms in a vacuum.
* 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*/
}
Vim:
Warning:
Output
is
not
to
a
terminal
[
?
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
[
33
m
3
4
[
m
[
1
m
[
35
mM
examples
/
HelloArgonInC
.
c
[
m
[
33
m
5
[
m
[
1
m
[
35
mM
examples
/
HelloSodiumChlorideInC
.
c
[
m
[
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
Sending
examples
/
HelloSodiumChlorideInC
.
c
...
...
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