Skip to content

Commit 610566d

Browse files
committed
Adding C to Verlet
1 parent e76e4f9 commit 610566d

File tree

1 file changed

+69
-0
lines changed

1 file changed

+69
-0
lines changed

chapters/computational_physics/verlet.md

Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -432,3 +432,72 @@ xlabel('Time (s)'); ylabel('Height (m)');
432432
Submitted by P. Mekhail
433433

434434
![Verlet LabVIEW](verlet_labview.png)
435+
436+
#### C
437+
438+
```
439+
#include <stdio.h>
440+
441+
// Simple function for velocity-verlet
442+
void verlet(double pos, double acc, double dt){
443+
444+
// Note that we are using a temp variable for the previous position
445+
double prev_pos, temp_pos, time;
446+
prev_pos = pos;
447+
time = 0;
448+
449+
while (pos > 0){
450+
time += dt;
451+
temp_pos = pos;
452+
pos = pos*2 - prev_pos + acc * dt * dt;
453+
prev_pos = temp_pos;
454+
}
455+
456+
printf("%f\n", time);
457+
458+
}
459+
460+
// Simple function for stormer-verlet
461+
void stormer_verlet(double pos, double acc, double dt){
462+
463+
double prev_pos, temp_pos, time, vel;
464+
prev_pos = pos;
465+
vel = 0;
466+
time = 0;
467+
while (pos > 0){
468+
time += dt;
469+
temp_pos = pos;
470+
pos = pos*2 - prev_pos + acc * dt * dt;
471+
prev_pos = temp_pos;
472+
473+
// The acceleration is constant, so the velocity is straightforward
474+
vel += acc*dt;
475+
}
476+
477+
printf("%f\n", time);
478+
479+
}
480+
481+
// Simple function for velocity-verlet
482+
void velocity_verlet(double pos, double acc, double dt){
483+
484+
double time, vel;
485+
vel = 0;
486+
time = 0;
487+
while (pos > 0){
488+
time += dt;
489+
pos += vel*dt + 0.5*acc * dt * dt;
490+
vel += acc*dt;
491+
}
492+
493+
printf("%f\n", time);
494+
495+
}
496+
497+
int main(){
498+
verlet(5.0, -10, 0.01);
499+
stormer_verlet(5.0, -10, 0.01);
500+
velocity_verlet(5.0, -10, 0.01);
501+
502+
}
503+
```

0 commit comments

Comments
 (0)