annotate TimeStepper.jl @ 877:dd2ab001a7b6 feature/equidistant_grid/refine

Implement refine function, move exports to the top of the file, change location of constuctors. The constructors were changed have only one inner constructor and simpler outer constructors.
author Jonatan Werpers <jonatan@werpers.com>
date Mon, 14 Feb 2022 09:39:58 +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