From bfead00e7cddb0b614abde3a286bc37747603822 Mon Sep 17 00:00:00 2001 From: CD Sigma Date: Fri, 20 Jul 2018 01:19:05 -0700 Subject: [PATCH 1/2] Adding Verlet in Swift --- .../code/swift/verlet.swift | 64 +++++++++++++++++++ .../verlet_integration/verlet_integration.md | 8 +++ 2 files changed, 72 insertions(+) create mode 100644 contents/verlet_integration/code/swift/verlet.swift diff --git a/contents/verlet_integration/code/swift/verlet.swift b/contents/verlet_integration/code/swift/verlet.swift new file mode 100644 index 000000000..a60409b5c --- /dev/null +++ b/contents/verlet_integration/code/swift/verlet.swift @@ -0,0 +1,64 @@ +func verlet(pos: Double, acc: Double, dt: Double) -> Double { + var temp_pos, time: Double + var paramPos = pos + var prev_pos = pos + time = 0.0 + + while (paramPos > 0){ + time += dt + temp_pos = paramPos + paramPos = paramPos*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 temp_pos, time, vel: Double + var paramPos = pos + var prev_pos = pos + vel = 0 + time = 0 + + while (paramPos > 0) { + time += dt + temp_pos = paramPos + paramPos = paramPos*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 time, vel : Double + var paramPos = pos + vel = 0 + time = 0 + + while (paramPos > 0){ + time += dt + paramPos += 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 %} From 442476132f570c781b98a8516137d952ddd7f04f Mon Sep 17 00:00:00 2001 From: CD Sigma Date: Sat, 21 Jul 2018 14:23:10 -0700 Subject: [PATCH 2/2] Swift Verlet Fixes --- .../code/swift/verlet.swift | 22 +++++++++---------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/contents/verlet_integration/code/swift/verlet.swift b/contents/verlet_integration/code/swift/verlet.swift index a60409b5c..a241660a9 100644 --- a/contents/verlet_integration/code/swift/verlet.swift +++ b/contents/verlet_integration/code/swift/verlet.swift @@ -1,13 +1,13 @@ func verlet(pos: Double, acc: Double, dt: Double) -> Double { + var pos = pos var temp_pos, time: Double - var paramPos = pos var prev_pos = pos time = 0.0 - while (paramPos > 0){ + while (pos > 0) { time += dt - temp_pos = paramPos - paramPos = paramPos*2 - prev_pos + acc * dt * dt + temp_pos = pos + pos = pos*2 - prev_pos + acc * dt * dt prev_pos = temp_pos } @@ -15,16 +15,16 @@ func verlet(pos: Double, acc: Double, dt: Double) -> Double { } func stormerVerlet(pos: Double, acc: Double, dt: Double) -> (time: Double, vel: Double) { + var pos = pos var temp_pos, time, vel: Double - var paramPos = pos var prev_pos = pos vel = 0 time = 0 - while (paramPos > 0) { + while (pos > 0) { time += dt - temp_pos = paramPos - paramPos = paramPos*2 - prev_pos + acc * dt * dt + temp_pos = pos + pos = pos*2 - prev_pos + acc * dt * dt prev_pos = temp_pos vel += acc*dt @@ -34,14 +34,14 @@ func stormerVerlet(pos: Double, acc: Double, dt: Double) -> (time: Double, vel: } func velocityVerlet(pos: Double, acc: Double, dt: Double) -> (time: Double, vel: Double) { + var pos = pos var time, vel : Double - var paramPos = pos vel = 0 time = 0 - while (paramPos > 0){ + while (pos > 0) { time += dt - paramPos += vel*dt + 0.5*acc * dt * dt + pos += vel*dt + 0.5*acc * dt * dt vel += acc*dt }