Mercurial > repos > public > sbplib
annotate +time/SBPInTimeSecondOrderForm.m @ 1347:ac54767ae1fb feature/poroelastic tip
Add interface, not fully compatible.
author | Martin Almquist <martin.almquist@it.uu.se> |
---|---|
date | Tue, 30 Apr 2024 14:58:35 +0200 |
parents | c92d2f8319c2 |
children | b5e5b195da1e |
rev | line source |
---|---|
399
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
1 classdef SBPInTimeSecondOrderForm < time.Timestepper |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
2 properties |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
3 A,B,C |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
4 M, f |
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 |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
14 % Solves u_tt = Au + Bu_t + C |
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. |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
17 function obj = SBPInTimeSecondOrderForm(A, B, C, k, t0, v0, v0t, TYPE, order, blockSize) |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
18 default_arg('TYPE', []); |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
19 default_arg('order', []); |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
20 default_arg('blockSize',[]); |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
21 |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
22 m = length(v0); |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
23 |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
24 default_arg('A', sparse(m, m)); |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
25 default_arg('B', sparse(m, m)); |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
26 default_arg('C', sparse(m, 1)); |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
27 |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
28 I = speye(m); |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
29 O = sparse(m,m); |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
30 |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
31 obj.M = [ |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
32 O, I; |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
33 A, B; |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
34 ]; |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
35 obj.f = @(t)[ |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
36 sparse(m,1); |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
37 C; |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
38 ]; |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
39 |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
40 w0 = [v0; v0t]; |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
41 |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
42 obj.k = k; |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
43 obj.t = t0; |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
44 obj.n = 0; |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
45 |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
46 obj.firstOrderTimeStepper = time.SBPInTime(obj.M, obj.f, obj.k, obj.t, w0, TYPE, order, blockSize); |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
47 end |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
48 |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
49 function [v,t] = getV(obj) |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
50 w = obj.firstOrderTimeStepper.getV(); |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
51 v = w(1:end/2); |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
52 t = obj.t; |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
53 end |
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 function [vt,t] = getVt(obj) |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
56 w = obj.firstOrderTimeStepper.getV(); |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
57 vt = w(end/2+1:end); |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
58 t = obj.t; |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
59 end |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
60 |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
61 function obj = step(obj) |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
62 obj.firstOrderTimeStepper.step(); |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
63 obj.t = obj.firstOrderTimeStepper.t; |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
64 obj.n = obj.firstOrderTimeStepper.n; |
c92d2f8319c2
Add wrapper for time stepping second order problems.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
65 end |
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 end |