Skip to content

Commit 7addd8c

Browse files
authored
Merge pull request algorithm-archivists#298 from berquist/verlet-c
Update C implementations for Verlet algorithms
2 parents f9f7977 + 0b14eac commit 7addd8c

File tree

2 files changed

+36
-31
lines changed

2 files changed

+36
-31
lines changed

contents/verlet_integration/code/c/verlet.c

+33-27
Original file line numberDiff line numberDiff line change
@@ -1,55 +1,61 @@
11
#include <stdio.h>
22

3-
void verlet(double pos, double acc, double dt) {
4-
double prev_pos, temp_pos, time;
3+
void verlet(double *time, double pos, double acc, double dt) {
4+
double prev_pos, temp_pos;
55
prev_pos = pos;
6-
time = 0;
6+
*time = 0.0;
77

88
while (pos > 0) {
9-
time += dt;
9+
*time += dt;
1010
temp_pos = pos;
1111
pos = pos * 2 - prev_pos + acc * dt * dt;
1212
prev_pos = temp_pos;
1313
}
14-
15-
printf("%f\n", time);
1614
}
1715

18-
void stormer_verlet(double pos, double acc, double dt) {
19-
double prev_pos, temp_pos, time, vel;
16+
void stormer_verlet(double *time, double *vel,
17+
double pos, double acc, double dt) {
18+
double prev_pos, temp_pos;
2019
prev_pos = pos;
21-
vel = 0;
22-
time = 0;
20+
*vel = 0.0;
21+
*time = 0.0;
22+
2323
while (pos > 0) {
24-
time += dt;
24+
*time += dt;
2525
temp_pos = pos;
2626
pos = pos * 2 - prev_pos + acc * dt * dt;
2727
prev_pos = temp_pos;
2828

29-
vel += acc * dt;
29+
*vel += acc * dt;
3030
}
31-
32-
printf("%f\n", time);
3331
}
3432

35-
void velocity_verlet(double pos, double acc, double dt) {
36-
double time, vel;
37-
vel = 0;
38-
time = 0;
33+
void velocity_verlet(double *time, double *vel,
34+
double pos, double acc, double dt) {
35+
*vel = 0.0;
36+
*time = 0.0;
37+
3938
while (pos > 0) {
40-
time += dt;
41-
pos += vel * dt + 0.5 * acc * dt * dt;
42-
vel += acc * dt;
39+
*time += dt;
40+
pos += (*vel) * dt + 0.5 * acc * dt * dt;
41+
*vel += acc * dt;
4342
}
44-
45-
printf("%f\n", time);
4643
}
4744

4845
int main() {
49-
verlet(5.0, -10, 0.01);
50-
stormer_verlet(5.0, -10, 0.01);
51-
velocity_verlet(5.0, -10, 0.01);
46+
double time, vel;
47+
48+
verlet(&time, 5.0, -10, 0.01);
49+
printf("Time for Verlet integration is: %lf\n",
50+
time);
51+
52+
stormer_verlet(&time, &vel, 5.0, -10, 0.01);
53+
printf("Time and velocity for Stormer Verlet integration is: %lf, %lf\n",
54+
time, vel);
55+
56+
velocity_verlet(&time, &vel, 5.0, -10, 0.01);
57+
printf("Time and velocity for velocity Verlet integration is: %lf, %lf\n",
58+
time, vel);
5259

5360
return 0;
5461
}
55-

contents/verlet_integration/verlet_integration.md

+3-4
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ Here is what it looks like in code:
3535
{% sample lang="cpp" %}
3636
[import:4-17, lang:"c_cpp"](code/c++/verlet.cpp)
3737
{% sample lang="c" %}
38-
[import:3-16, lang:"c_cpp"](code/c/verlet.c)
38+
[import:3-14, lang:"c_cpp"](code/c/verlet.c)
3939
{% sample lang="java" %}
4040
[import:2-18, lang:"java"](code/java/verlet.java)
4141
{% sample lang="py" %}
@@ -81,7 +81,7 @@ Here's what it looks like in code:
8181
{% sample lang="cpp" %}
8282
[import:20-36, lang:"c_cpp"](code/c++/verlet.cpp)
8383
{% sample lang="c" %}
84-
[import:18-33, lang:"c_cpp"](code/c/verlet.c)
84+
[import:16-31, lang:"c_cpp"](code/c/verlet.c)
8585
{% sample lang="java" %}
8686
[import:21-40, lang:"java"](code/java/verlet.java)
8787
{% sample lang="py" %}
@@ -138,7 +138,7 @@ Here is the velocity Verlet method in code:
138138
{% sample lang="cpp" %}
139139
[import:38-49, lang:"c_cpp"](code/c++/verlet.cpp)
140140
{% sample lang="c" %}
141-
[import:35-46, lang:"c_cpp"](code/c/verlet.c)
141+
[import:33-43, lang:"c_cpp"](code/c/verlet.c)
142142
{% sample lang="java" %}
143143
[import:43-57, lang:"java"](code/java/verlet.java)
144144
{% sample lang="py" %}
@@ -223,4 +223,3 @@ $$
223223
\newcommand{\bfomega}{\boldsymbol{\omega}}
224224
\newcommand{\bftau}{\boldsymbol{\tau}}
225225
$$
226-

0 commit comments

Comments
 (0)