annotate TimeStepper.jl @ 1888:eb70a0941cd6 allocation_testing

Merge default
author Jonatan Werpers <jonatan@werpers.com>
date Fri, 03 Feb 2023 23:02:46 +0100
parents 1e845cd91cd3
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
12
c4bc1165fdf7 remove white space
Ylva Rydin <ylva.rydin@telia.com>
parents: 10
diff changeset
1 abstract type TimeStepper end
10
bed51234616b add timestepper
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
2
bed51234616b add timestepper
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
3 # Returns v and t
bed51234616b add timestepper
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
4 function getState(ts::TimeStepper)
bed51234616b add timestepper
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
5 error("not implemented")
bed51234616b add timestepper
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
6 end
bed51234616b add timestepper
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
7
bed51234616b add timestepper
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
8
25
1e845cd91cd3 Add Exclamation mark after sten in timeStepper
Ylva Rydin <ylva.rydin@telia.com>
parents: 12
diff changeset
9 function step!(ts::TimeStepper)
10
bed51234616b add timestepper
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
10 error("not implemented")
bed51234616b add timestepper
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
11 end
bed51234616b add timestepper
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
12
bed51234616b add timestepper
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
13 function stepN(ts::TimeStepper,N::Int)
bed51234616b add timestepper
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
14 for i ∈ 1:N
bed51234616b add timestepper
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
15 ts.step()
bed51234616b add timestepper
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
16 end
bed51234616b add timestepper
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
17 end
bed51234616b add timestepper
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
18
bed51234616b add timestepper
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
19 function stepTo(ts::TimeStepper)
bed51234616b add timestepper
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
20 error("Not yet implemented")
bed51234616b add timestepper
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
21 end
bed51234616b add timestepper
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
22
bed51234616b add timestepper
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
23 function evolve(ts::TimeStepper)
bed51234616b add timestepper
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
24 error("Not yet implemented")
bed51234616b add timestepper
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
25 end
bed51234616b add timestepper
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
26
bed51234616b add timestepper
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
27
bed51234616b add timestepper
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
28 mutable struct Rk4 <: TimeStepper
bed51234616b add timestepper
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
29 F::Function
bed51234616b add timestepper
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
30 k::Real
bed51234616b add timestepper
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
31 v::Vector
bed51234616b add timestepper
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
32 t::Real
bed51234616b add timestepper
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
33 n::UInt
bed51234616b add timestepper
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
34
bed51234616b add timestepper
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
35 function Rk4(F::Function,k::Real,v0::Vector,t0::Real)
bed51234616b add timestepper
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
36 # TODO: Check that F has two inputs and one output
bed51234616b add timestepper
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
37 v = v0
bed51234616b add timestepper
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
38 t = t0
bed51234616b add timestepper
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
39 n = 0
bed51234616b add timestepper
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
40 return new(F,k,v,t,n)
bed51234616b add timestepper
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
41 end
bed51234616b add timestepper
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
42 end
bed51234616b add timestepper
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
43
bed51234616b add timestepper
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
44 function getState(ts::Rk4)
bed51234616b add timestepper
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
45 return ts.t, ts.v
bed51234616b add timestepper
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
46 end
bed51234616b add timestepper
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
47
25
1e845cd91cd3 Add Exclamation mark after sten in timeStepper
Ylva Rydin <ylva.rydin@telia.com>
parents: 12
diff changeset
48 function step!(ts::Rk4)
10
bed51234616b add timestepper
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
49 k1 = ts.F(ts.v,ts.t)
bed51234616b add timestepper
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
50 k2 = ts.F(ts.v+0.5*ts.k*k1,ts.t+0.5*ts.k)
bed51234616b add timestepper
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
51 k3 = ts.F(ts.v+0.5*ts.k*k2,ts.t+0.5*ts.k)
bed51234616b add timestepper
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
52 k4 = ts.F(ts.v+ ts.k*k3,ts.t+ ts.k)
bed51234616b add timestepper
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
53 ts.v = ts.v + (1/6)*(k1+2*(k2+k3)+k4)*ts.k
12
c4bc1165fdf7 remove white space
Ylva Rydin <ylva.rydin@telia.com>
parents: 10
diff changeset
54
10
bed51234616b add timestepper
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
55 ts.n = ts.n + 1
bed51234616b add timestepper
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
56 ts.t = ts.t + ts.k
bed51234616b add timestepper
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
57
bed51234616b add timestepper
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
58 return nothing
bed51234616b add timestepper
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
59 end
bed51234616b add timestepper
Ylva Rydin <ylva.rydin@telia.com>
parents:
diff changeset
60