diff --git a/contents/verlet_integration/code/swift/verlet.swift b/contents/verlet_integration/code/swift/verlet.swift new file mode 100644 index 000000000..a241660a9 --- /dev/null +++ b/contents/verlet_integration/code/swift/verlet.swift @@ -0,0 +1,64 @@ +func verlet(pos: Double, acc: Double, dt: Double) -> Double { + var pos = pos + var temp_pos, time: Double + var prev_pos = pos + time = 0.0 + + while (pos > 0) { + time += dt + temp_pos = pos + pos = pos*2 - prev_pos + acc * dt * dt + prev_pos = temp_pos + } + + return time +} + +func stormerVerlet(pos: Double, acc: Double, dt: Double) -> (time: Double, vel: Double) { + var pos = pos + var temp_pos, time, vel: Double + var prev_pos = pos + vel = 0 + time = 0 + + while (pos > 0) { + time += dt + temp_pos = pos + pos = pos*2 - prev_pos + acc * dt * dt + prev_pos = temp_pos + + vel += acc*dt + } + + return (time:time, vel:vel) +} + +func velocityVerlet(pos: Double, acc: Double, dt: Double) -> (time: Double, vel: Double) { + var pos = pos + var time, vel : Double + vel = 0 + time = 0 + + while (pos > 0) { + time += dt + pos += vel*dt + 0.5*acc * dt * dt + vel += acc*dt + } + + return (time:time, vel:vel) +} + +func main() { + let verletTime = verlet(pos: 5.0, acc: -10.0, dt: 0.01) + print("Time for Verlet integration is: \(verletTime)") + + let stormer = stormerVerlet(pos: 5.0, acc: -10.0, dt: 0.01); + print("Time for Stormer Verlet integration is: \(stormer.time)") + print("Velocity for Stormer Verlet integration is: \(stormer.vel)") + + let velVerlet = velocityVerlet(pos: 5.0, acc: -10, dt: 0.01) + print("Time for velocity Verlet integration is: \(velVerlet.time)") + print("Velocity for velocity Verlet integration is: \(velVerlet.vel)") +} + +main() diff --git a/contents/verlet_integration/verlet_integration.md b/contents/verlet_integration/verlet_integration.md index da97169a0..1f49e4909 100644 --- a/contents/verlet_integration/verlet_integration.md +++ b/contents/verlet_integration/verlet_integration.md @@ -56,6 +56,8 @@ Unfortunately, this has not yet been implemented in LabVIEW, so here's Julia cod [import:1-16, lang:"javascript"](code/javascript/verlet.js) {% sample lang="rs" %} [import:1-13, lang:"rust"](code/rust/verlet.rs) +{% sample lang="swift" %} +[import:1-15, lang:"swift"](code/swift/verlet.swift) {% endmethod %} @@ -102,6 +104,8 @@ Unfortunately, this has not yet been implemented in LabVIEW, so here's Julia cod [import:18-35, lang:"javascript"](code/javascript/verlet.js) {% sample lang="rs" %} [import:15-27, lang:"rust"](code/rust/verlet.rs) +{% sample lang="swift" %} +[import:17-34, lang:"swift"](code/swift/verlet.swift) {% endmethod %} @@ -159,6 +163,8 @@ Unfortunately, this has not yet been implemented in LabVIEW, so here's Julia cod [import:37-50, lang:"javascript"](code/javascript/verlet.js) {% sample lang="rs" %} [import:29-40, lang:"rust"](code/rust/verlet.rs) +{% sample lang="swift" %} +[import:36-49, lang:"swift"](code/swift/verlet.swift) {% endmethod %} @@ -198,6 +204,8 @@ Submitted by P. Mekhail [import, lang:"javascript"](code/javascript/verlet.js) {% sample lang="rs" %} [import, lang:"rust"](code/rust/verlet.rs) +{% sample lang="swift" %} +[import, lang:"swift"](code/swift/verlet.swift) {% endmethod %}