|
1 | 1 | #include <stdio.h>
|
2 | 2 |
|
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; |
5 | 5 | prev_pos = pos;
|
6 |
| - time = 0; |
| 6 | + *time = 0.0; |
7 | 7 |
|
8 | 8 | while (pos > 0) {
|
9 |
| - time += dt; |
| 9 | + (*time) += dt; |
10 | 10 | temp_pos = pos;
|
11 | 11 | pos = pos * 2 - prev_pos + acc * dt * dt;
|
12 | 12 | prev_pos = temp_pos;
|
13 | 13 | }
|
14 |
| - |
15 |
| - printf("%f\n", time); |
16 | 14 | }
|
17 | 15 |
|
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, double pos, double acc, double dt) { |
| 17 | + double prev_pos, temp_pos; |
20 | 18 | prev_pos = pos;
|
21 |
| - vel = 0; |
22 |
| - time = 0; |
| 19 | + *vel = 0.0; |
| 20 | + *time = 0.0; |
| 21 | + |
23 | 22 | while (pos > 0) {
|
24 |
| - time += dt; |
| 23 | + (*time) += dt; |
25 | 24 | temp_pos = pos;
|
26 | 25 | pos = pos * 2 - prev_pos + acc * dt * dt;
|
27 | 26 | prev_pos = temp_pos;
|
28 | 27 |
|
29 |
| - vel += acc * dt; |
| 28 | + (*vel) += acc * dt; |
30 | 29 | }
|
31 |
| - |
32 |
| - printf("%f\n", time); |
33 | 30 | }
|
34 | 31 |
|
35 |
| -void velocity_verlet(double pos, double acc, double dt) { |
36 |
| - double time, vel; |
37 |
| - vel = 0; |
38 |
| - time = 0; |
| 32 | +void velocity_verlet(double *time, double *vel, double pos, double acc, double dt) { |
| 33 | + *vel = 0.0; |
| 34 | + *time = 0.0; |
| 35 | + |
39 | 36 | while (pos > 0) {
|
40 |
| - time += dt; |
41 |
| - pos += vel * dt + 0.5 * acc * dt * dt; |
42 |
| - vel += acc * dt; |
| 37 | + (*time) += dt; |
| 38 | + pos += (*vel) * dt + 0.5 * acc * dt * dt; |
| 39 | + (*vel) += acc * dt; |
43 | 40 | }
|
44 |
| - |
45 |
| - printf("%f\n", time); |
46 | 41 | }
|
47 | 42 |
|
48 | 43 | 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); |
| 44 | + double time_v; |
| 45 | + double time_sv, vel_sv; |
| 46 | + double time_vv, vel_vv; |
| 47 | + |
| 48 | + verlet(&time_v, 5.0, -10, 0.01); |
| 49 | + stormer_verlet(&time_sv, &vel_sv, 5.0, -10, 0.01); |
| 50 | + velocity_verlet(&time_vv, &vel_vv, 5.0, -10, 0.01); |
| 51 | + |
| 52 | + printf("Time for Verlet integration is: %lf\n", |
| 53 | + time_v); |
| 54 | + printf("Time and velocity for Stormer Verlet integration is: %lf, %lf\n", |
| 55 | + time_sv, vel_sv); |
| 56 | + printf("Time and velocity for velocity Verlet integration is: %lf, %lf\n", |
| 57 | + time_vv, vel_vv); |
52 | 58 |
|
53 | 59 | return 0;
|
54 | 60 | }
|
55 |
| - |
|
0 commit comments