annotate +time/SBPInTimeSecondOrderFormImplicit.m @ 577:e45c9b56d50d feature/grids

Add an Empty grid class The need turned up for the flexural code when we may or may not have a grid for the open water and want to plot that solution. In case there is no open water we need an empty grid to plot the empty gridfunction against to avoid errors.
author Jonatan Werpers <jonatan@werpers.com>
date Thu, 07 Sep 2017 09:16:12 +0200
parents d4b999585af1
children 94bd0f3293c8
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
460
e0caae9ef6ed Add SBPinTime for linear DAE formulations (BUGS!)
Jonatan Werpers <jonatan@werpers.com>
parents: 399
diff changeset
1 classdef SBPInTimeSecondOrderFormImplicit < time.Timestepper
399
c92d2f8319c2 Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
2 properties
460
e0caae9ef6ed Add SBPinTime for linear DAE formulations (BUGS!)
Jonatan Werpers <jonatan@werpers.com>
parents: 399
diff changeset
3 A, B, C, f
e0caae9ef6ed Add SBPinTime for linear DAE formulations (BUGS!)
Jonatan Werpers <jonatan@werpers.com>
parents: 399
diff changeset
4 AA, BB, ff
399
c92d2f8319c2 Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
5
c92d2f8319c2 Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
6 n
c92d2f8319c2 Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
7 t
c92d2f8319c2 Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
8 k
c92d2f8319c2 Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
9
c92d2f8319c2 Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
10 firstOrderTimeStepper
c92d2f8319c2 Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
11 end
c92d2f8319c2 Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
12
c92d2f8319c2 Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
13 methods
463
45a3924140f4 Move f(t) to the RHS
Jonatan Werpers <jonatan@werpers.com>
parents: 460
diff changeset
14 % Solves A*u_tt + B*u_t + C*u = f(t)
399
c92d2f8319c2 Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
15 % A, B can either both be constants or both be function handles,
c92d2f8319c2 Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
16 % They can also be omitted by setting them equal to the empty matrix.
460
e0caae9ef6ed Add SBPinTime for linear DAE formulations (BUGS!)
Jonatan Werpers <jonatan@werpers.com>
parents: 399
diff changeset
17 function obj = SBPInTimeSecondOrderFormImplicit(A, B, C, f, k, t0, v0, v0t, TYPE, order, blockSize)
e0caae9ef6ed Add SBPinTime for linear DAE formulations (BUGS!)
Jonatan Werpers <jonatan@werpers.com>
parents: 399
diff changeset
18 default_arg('f', []);
399
c92d2f8319c2 Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
19 default_arg('TYPE', []);
c92d2f8319c2 Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
20 default_arg('order', []);
c92d2f8319c2 Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
21 default_arg('blockSize',[]);
c92d2f8319c2 Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
22
c92d2f8319c2 Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
23 m = length(v0);
c92d2f8319c2 Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
24
c92d2f8319c2 Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
25 default_arg('A', sparse(m, m));
c92d2f8319c2 Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
26 default_arg('B', sparse(m, m));
460
e0caae9ef6ed Add SBPinTime for linear DAE formulations (BUGS!)
Jonatan Werpers <jonatan@werpers.com>
parents: 399
diff changeset
27 default_arg('C', sparse(m, m));
399
c92d2f8319c2 Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
28
c92d2f8319c2 Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
29 I = speye(m);
c92d2f8319c2 Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
30 O = sparse(m,m);
c92d2f8319c2 Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
31
460
e0caae9ef6ed Add SBPinTime for linear DAE formulations (BUGS!)
Jonatan Werpers <jonatan@werpers.com>
parents: 399
diff changeset
32 % Rewrite to
e0caae9ef6ed Add SBPinTime for linear DAE formulations (BUGS!)
Jonatan Werpers <jonatan@werpers.com>
parents: 399
diff changeset
33 % AA*w_t = BB*w + ff(t);
e0caae9ef6ed Add SBPinTime for linear DAE formulations (BUGS!)
Jonatan Werpers <jonatan@werpers.com>
parents: 399
diff changeset
34
e0caae9ef6ed Add SBPinTime for linear DAE formulations (BUGS!)
Jonatan Werpers <jonatan@werpers.com>
parents: 399
diff changeset
35 obj.AA = [
e0caae9ef6ed Add SBPinTime for linear DAE formulations (BUGS!)
Jonatan Werpers <jonatan@werpers.com>
parents: 399
diff changeset
36 I, O;
e0caae9ef6ed Add SBPinTime for linear DAE formulations (BUGS!)
Jonatan Werpers <jonatan@werpers.com>
parents: 399
diff changeset
37 O, A;
399
c92d2f8319c2 Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
38 ];
460
e0caae9ef6ed Add SBPinTime for linear DAE formulations (BUGS!)
Jonatan Werpers <jonatan@werpers.com>
parents: 399
diff changeset
39 obj.BB = [
e0caae9ef6ed Add SBPinTime for linear DAE formulations (BUGS!)
Jonatan Werpers <jonatan@werpers.com>
parents: 399
diff changeset
40 O, I;
464
d4b999585af1 Fix math in conversion to first order form system
Jonatan Werpers <jonatan@werpers.com>
parents: 463
diff changeset
41 -C, -B;
399
c92d2f8319c2 Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
42 ];
c92d2f8319c2 Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
43
460
e0caae9ef6ed Add SBPinTime for linear DAE formulations (BUGS!)
Jonatan Werpers <jonatan@werpers.com>
parents: 399
diff changeset
44 if ~isempty(f)
e0caae9ef6ed Add SBPinTime for linear DAE formulations (BUGS!)
Jonatan Werpers <jonatan@werpers.com>
parents: 399
diff changeset
45 obj.ff = @(t)[
e0caae9ef6ed Add SBPinTime for linear DAE formulations (BUGS!)
Jonatan Werpers <jonatan@werpers.com>
parents: 399
diff changeset
46 sparse(m,1);
463
45a3924140f4 Move f(t) to the RHS
Jonatan Werpers <jonatan@werpers.com>
parents: 460
diff changeset
47 f(t);
460
e0caae9ef6ed Add SBPinTime for linear DAE formulations (BUGS!)
Jonatan Werpers <jonatan@werpers.com>
parents: 399
diff changeset
48 ];
e0caae9ef6ed Add SBPinTime for linear DAE formulations (BUGS!)
Jonatan Werpers <jonatan@werpers.com>
parents: 399
diff changeset
49 else
e0caae9ef6ed Add SBPinTime for linear DAE formulations (BUGS!)
Jonatan Werpers <jonatan@werpers.com>
parents: 399
diff changeset
50 obj.ff = @(t) sparse(2*m,1);
e0caae9ef6ed Add SBPinTime for linear DAE formulations (BUGS!)
Jonatan Werpers <jonatan@werpers.com>
parents: 399
diff changeset
51 end
e0caae9ef6ed Add SBPinTime for linear DAE formulations (BUGS!)
Jonatan Werpers <jonatan@werpers.com>
parents: 399
diff changeset
52
399
c92d2f8319c2 Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
53 w0 = [v0; v0t];
c92d2f8319c2 Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
54
c92d2f8319c2 Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
55 obj.k = k;
c92d2f8319c2 Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
56 obj.t = t0;
c92d2f8319c2 Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
57 obj.n = 0;
c92d2f8319c2 Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
58
460
e0caae9ef6ed Add SBPinTime for linear DAE formulations (BUGS!)
Jonatan Werpers <jonatan@werpers.com>
parents: 399
diff changeset
59 obj.firstOrderTimeStepper = time.SBPInTimeImplicitFormulation(obj.AA, obj.BB, obj.ff, obj.k, obj.t, w0, TYPE, order, blockSize);
399
c92d2f8319c2 Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
60 end
c92d2f8319c2 Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
61
c92d2f8319c2 Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
62 function [v,t] = getV(obj)
c92d2f8319c2 Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
63 w = obj.firstOrderTimeStepper.getV();
c92d2f8319c2 Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
64 v = w(1:end/2);
c92d2f8319c2 Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
65 t = obj.t;
c92d2f8319c2 Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
66 end
c92d2f8319c2 Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
67
c92d2f8319c2 Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
68 function [vt,t] = getVt(obj)
c92d2f8319c2 Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
69 w = obj.firstOrderTimeStepper.getV();
c92d2f8319c2 Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
70 vt = w(end/2+1:end);
c92d2f8319c2 Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
71 t = obj.t;
c92d2f8319c2 Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
72 end
c92d2f8319c2 Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
73
c92d2f8319c2 Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
74 function obj = step(obj)
c92d2f8319c2 Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
75 obj.firstOrderTimeStepper.step();
c92d2f8319c2 Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
76 obj.t = obj.firstOrderTimeStepper.t;
c92d2f8319c2 Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
77 obj.n = obj.firstOrderTimeStepper.n;
c92d2f8319c2 Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
78 end
c92d2f8319c2 Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
79 end
c92d2f8319c2 Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
80 end