annotate src/SimpleTimeSteppers/SimpleTimeSteppers.jl @ 862:a382942e5437 feature/subpackage_simple_timesteppers

Add a few simple timesteppers
author Jonatan Werpers <jonatan@werpers.com>
date Tue, 18 Jan 2022 15:29:54 +0100
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
862
a382942e5437 Add a few simple timesteppers
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
1 """
a382942e5437 Add a few simple timesteppers
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
2 SimpleTimeSteppers
a382942e5437 Add a few simple timesteppers
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
3
a382942e5437 Add a few simple timesteppers
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
4 Implements a few simple time integration schemes useful for testing the accuracy of spatial discretisations.
a382942e5437 Add a few simple timesteppers
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
5 """
a382942e5437 Add a few simple timesteppers
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
6 module SimpleTimeSteppers
a382942e5437 Add a few simple timesteppers
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
7
a382942e5437 Add a few simple timesteppers
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
8 export rk4
a382942e5437 Add a few simple timesteppers
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
9 export rkn4
a382942e5437 Add a few simple timesteppers
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
10 export centered_2nd_order_fd
a382942e5437 Add a few simple timesteppers
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
11
a382942e5437 Add a few simple timesteppers
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
12 """
a382942e5437 Add a few simple timesteppers
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
13 rk4(F, vₙ, tₙ, Δtₙ)
a382942e5437 Add a few simple timesteppers
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
14
a382942e5437 Add a few simple timesteppers
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
15 Solves ``vₜ = F(v,t)`` using the standard 4th order RK-method.
a382942e5437 Add a few simple timesteppers
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
16 """
a382942e5437 Add a few simple timesteppers
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
17 function rk4(F, vₙ, tₙ, Δtₙ)
a382942e5437 Add a few simple timesteppers
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
18 k₁ = F(vₙ,tₙ)
a382942e5437 Add a few simple timesteppers
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
19 k₂ = F(vₙ + Δtₙ/2*k₁, tₙ + Δtₙ/2)
a382942e5437 Add a few simple timesteppers
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
20 k₃ = F(vₙ + Δtₙ/2*k₂, tₙ + Δtₙ/2)
a382942e5437 Add a few simple timesteppers
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
21 k₄ = F(vₙ + Δtₙ *k₃, tₙ + Δtₙ )
a382942e5437 Add a few simple timesteppers
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
22
a382942e5437 Add a few simple timesteppers
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
23 vₙ₊₁ = vₙ + (1/6)*(k₁+2*(k₂+k₃)+k₄)*Δtₙ
a382942e5437 Add a few simple timesteppers
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
24
a382942e5437 Add a few simple timesteppers
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
25 return vₙ₊₁
a382942e5437 Add a few simple timesteppers
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
26 end
a382942e5437 Add a few simple timesteppers
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
27
a382942e5437 Add a few simple timesteppers
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
28 """
a382942e5437 Add a few simple timesteppers
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
29 rkn4(F, vₙ, v̇ₙ, tₙ, Δtₙ)
a382942e5437 Add a few simple timesteppers
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
30
a382942e5437 Add a few simple timesteppers
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
31 Solves ``vₜₜ = F(v,v̇,t)`` using the Runge-Kutta-Nyström method based on the
a382942e5437 Add a few simple timesteppers
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
32 standard 4th order RK-method.
a382942e5437 Add a few simple timesteppers
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
33 """
a382942e5437 Add a few simple timesteppers
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
34 function rkn4(F, vₙ, v̇ₙ, tₙ, Δtₙ)
a382942e5437 Add a few simple timesteppers
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
35 k₁ = F(vₙ, v̇ₙ, tₙ )
a382942e5437 Add a few simple timesteppers
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
36 k₂ = F(vₙ + Δtₙ/2*v̇ₙ, v̇ₙ + Δtₙ/2*k₁, tₙ + Δtₙ/2)
a382942e5437 Add a few simple timesteppers
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
37 k₃ = F(vₙ + Δtₙ/2*v̇ₙ + Δtₙ^2/4*k₁, v̇ₙ + Δtₙ/2*k₂, tₙ + Δtₙ/2)
a382942e5437 Add a few simple timesteppers
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
38 k₄ = F(vₙ + Δtₙ *v̇ₙ + Δtₙ^2/2*k₂, v̇ₙ + Δtₙ *k₃, tₙ + Δtₙ )
a382942e5437 Add a few simple timesteppers
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
39
a382942e5437 Add a few simple timesteppers
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
40 vₙ₊₁ = vₙ + Δtₙ*v̇ₙ + Δtₙ^2*(1/6)*(k₁ + k₂ + k₃);
a382942e5437 Add a few simple timesteppers
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
41 v̇ₙ₊₁ = v̇ₙ + Δtₙ*(k₁ + 2*k₂ + 2*k₃ + k₄)/6;
a382942e5437 Add a few simple timesteppers
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
42
a382942e5437 Add a few simple timesteppers
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
43 return vₙ₊₁, v̇ₙ₊₁
a382942e5437 Add a few simple timesteppers
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
44 end
a382942e5437 Add a few simple timesteppers
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
45
a382942e5437 Add a few simple timesteppers
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
46 """
a382942e5437 Add a few simple timesteppers
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
47 centered_2nd_order_fd(F, vₙ, vₙ₋₁, Δtₙ)
a382942e5437 Add a few simple timesteppers
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
48
a382942e5437 Add a few simple timesteppers
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
49 Solves ``vₜₜ = F(v,t)`` using the 2nd order discretization
a382942e5437 Add a few simple timesteppers
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
50 ``(vₙ₊₁ - 2vₙ + vₙ₋₁)/Δt² = F(vₙ,tₙ)``.
a382942e5437 Add a few simple timesteppers
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
51 """
a382942e5437 Add a few simple timesteppers
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
52 function centered_2nd_order_fd(F, vₙ, vₙ₋₁, tₙ, Δt)
a382942e5437 Add a few simple timesteppers
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
53 vₙ₊₁ = Δt^2*F(vₙ,tₙ) + 2vₙ - vₙ₋₁
a382942e5437 Add a few simple timesteppers
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
54
a382942e5437 Add a few simple timesteppers
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
55 return vₙ₊₁, vₙ
a382942e5437 Add a few simple timesteppers
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
56 end
a382942e5437 Add a few simple timesteppers
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
57
a382942e5437 Add a few simple timesteppers
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
58 # TODO: Rewrite without allocations
a382942e5437 Add a few simple timesteppers
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
59
a382942e5437 Add a few simple timesteppers
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
60
a382942e5437 Add a few simple timesteppers
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
61 # TODO: Add euler forward and try a local error estimate for testing
a382942e5437 Add a few simple timesteppers
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
62 end # module