annotate +time/CdiffTimeDep.m @ 1037:2d7ba44340d0 feature/burgers1d

Pass scheme specific parameters as cell array. This will enabale constructDiffOps to be more general. In addition, allow for schemes returning function handles as diffOps, which is currently how non-linear schemes such as Burgers1d are implemented.
author Vidar Stiernström <vidar.stiernstrom@it.uu.se>
date Fri, 18 Jan 2019 09:02:02 +0100
parents 151ab2b5a686
children 8894e9c49e40
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
227
151ab2b5a686 Added a timedependent version of Cdiff.
Jonatan Werpers <jonatan@werpers.com>
parents: 142
diff changeset
1 classdef CdiffTimeDep < time.Timestepper
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
2 properties
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
3 D
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
4 E
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
5 S
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
6 k
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
7 t
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
8 v
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
9 v_prev
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
10 n
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
11 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
12
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
13
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
14 methods
227
151ab2b5a686 Added a timedependent version of Cdiff.
Jonatan Werpers <jonatan@werpers.com>
parents: 142
diff changeset
15 % Solves u_tt = Du + E(t)u_t + S(t)
151ab2b5a686 Added a timedependent version of Cdiff.
Jonatan Werpers <jonatan@werpers.com>
parents: 142
diff changeset
16 % D, E, S can either all be constants or all be function handles,
151ab2b5a686 Added a timedependent version of Cdiff.
Jonatan Werpers <jonatan@werpers.com>
parents: 142
diff changeset
17 % They can also be omitted by setting them equal to the empty matrix.
151ab2b5a686 Added a timedependent version of Cdiff.
Jonatan Werpers <jonatan@werpers.com>
parents: 142
diff changeset
18 % CdiffTimeDep(D, E, S, k, t0, n0, v, v_prev)
151ab2b5a686 Added a timedependent version of Cdiff.
Jonatan Werpers <jonatan@werpers.com>
parents: 142
diff changeset
19 function obj = CdiffTimeDep(D, E, S, k, t0, n0, v, v_prev)
151ab2b5a686 Added a timedependent version of Cdiff.
Jonatan Werpers <jonatan@werpers.com>
parents: 142
diff changeset
20 m = length(v);
151ab2b5a686 Added a timedependent version of Cdiff.
Jonatan Werpers <jonatan@werpers.com>
parents: 142
diff changeset
21 default_arg('E', @(t)sparse(m,m));
151ab2b5a686 Added a timedependent version of Cdiff.
Jonatan Werpers <jonatan@werpers.com>
parents: 142
diff changeset
22 default_arg('S', @(t)sparse(m,1));
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
23
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
24 obj.D = D;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
25 obj.E = E;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
26 obj.S = S;
227
151ab2b5a686 Added a timedependent version of Cdiff.
Jonatan Werpers <jonatan@werpers.com>
parents: 142
diff changeset
27
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
28 obj.k = k;
1
5ae4f23d9130 Added CdiffNonlin timestepper. Probably fixed a bug with Cdiff. Added default arguments to Rk4SecondOrderNonlin.
Jonatan Werpers <jonatan@werpers.com>
parents: 0
diff changeset
29 obj.t = t0;
13
b18d3d201a71 Fixed initialization of step counter in timesteppers.
Jonatan Werpers <jonatan@werpers.com>
parents: 1
diff changeset
30 obj.n = n0;
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
31 obj.v = v;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
32 obj.v_prev = v_prev;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
33 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
34
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
35 function [v,t] = getV(obj)
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
36 v = obj.v;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
37 t = obj.t;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
38 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
39
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
40 function [vt,t] = getVt(obj)
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
41 vt = (obj.v-obj.v_prev)/obj.k; % Could be improved using u_tt = f(u))
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
42 t = obj.t;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
43 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
44
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
45 function obj = step(obj)
227
151ab2b5a686 Added a timedependent version of Cdiff.
Jonatan Werpers <jonatan@werpers.com>
parents: 142
diff changeset
46 [obj.v, obj.v_prev] = time.cdiff.cdiff(obj.v, obj.v_prev, obj.k, obj.D, obj.E(obj.t), obj.S(obj.t));
0
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
47 obj.t = obj.t + obj.k;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
48 obj.n = obj.n + 1;
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
49 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
50 end
48b6fb693025 Initial commit.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
51 end