Mercurial > repos > public > sbplib
annotate +time/Cdiff.m @ 1113:47e86b5270ad feature/timesteppers
Change name of property k to dt in time.Timestepper
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Wed, 10 Apr 2019 22:40:55 +0200 |
parents | 7a5e770974ed |
children |
rev | line source |
---|---|
0 | 1 classdef Cdiff < time.Timestepper |
2 properties | |
977
c9009d5a3101
Refactor time.Cdiff and add getEnergyMethod
Jonatan Werpers <jonatan@werpers.com>
parents:
227
diff
changeset
|
3 A, B, C |
c9009d5a3101
Refactor time.Cdiff and add getEnergyMethod
Jonatan Werpers <jonatan@werpers.com>
parents:
227
diff
changeset
|
4 AA, BB, CC |
c9009d5a3101
Refactor time.Cdiff and add getEnergyMethod
Jonatan Werpers <jonatan@werpers.com>
parents:
227
diff
changeset
|
5 G |
1113
47e86b5270ad
Change name of property k to dt in time.Timestepper
Jonatan Werpers <jonatan@werpers.com>
parents:
979
diff
changeset
|
6 dt |
0 | 7 t |
978
1a30dbe99c7c
Refactor CdiffImplicit to take input arguments in the right order
Jonatan Werpers <jonatan@werpers.com>
parents:
977
diff
changeset
|
8 v, v_prev |
0 | 9 n |
10 end | |
11 | |
12 | |
13 methods | |
977
c9009d5a3101
Refactor time.Cdiff and add getEnergyMethod
Jonatan Werpers <jonatan@werpers.com>
parents:
227
diff
changeset
|
14 % Solves |
c9009d5a3101
Refactor time.Cdiff and add getEnergyMethod
Jonatan Werpers <jonatan@werpers.com>
parents:
227
diff
changeset
|
15 % A*v_tt + B*v_t + C*v = G(t) |
c9009d5a3101
Refactor time.Cdiff and add getEnergyMethod
Jonatan Werpers <jonatan@werpers.com>
parents:
227
diff
changeset
|
16 % v(t0) = v0 |
c9009d5a3101
Refactor time.Cdiff and add getEnergyMethod
Jonatan Werpers <jonatan@werpers.com>
parents:
227
diff
changeset
|
17 % v_t(t0) = v0t |
1113
47e86b5270ad
Change name of property k to dt in time.Timestepper
Jonatan Werpers <jonatan@werpers.com>
parents:
979
diff
changeset
|
18 % starting at time t0 with timestep dt |
977
c9009d5a3101
Refactor time.Cdiff and add getEnergyMethod
Jonatan Werpers <jonatan@werpers.com>
parents:
227
diff
changeset
|
19 % Using |
c9009d5a3101
Refactor time.Cdiff and add getEnergyMethod
Jonatan Werpers <jonatan@werpers.com>
parents:
227
diff
changeset
|
20 % A*Dp*Dm*v_n + B*D0*v_n + C*v_n = G(t_n) |
1113
47e86b5270ad
Change name of property k to dt in time.Timestepper
Jonatan Werpers <jonatan@werpers.com>
parents:
979
diff
changeset
|
21 function obj = Cdiff(A, B, C, G, v0, v0t, dt, t0) |
977
c9009d5a3101
Refactor time.Cdiff and add getEnergyMethod
Jonatan Werpers <jonatan@werpers.com>
parents:
227
diff
changeset
|
22 m = length(v0); |
c9009d5a3101
Refactor time.Cdiff and add getEnergyMethod
Jonatan Werpers <jonatan@werpers.com>
parents:
227
diff
changeset
|
23 default_arg('A', speye(m)); |
c9009d5a3101
Refactor time.Cdiff and add getEnergyMethod
Jonatan Werpers <jonatan@werpers.com>
parents:
227
diff
changeset
|
24 default_arg('B', sparse(m,m)); |
c9009d5a3101
Refactor time.Cdiff and add getEnergyMethod
Jonatan Werpers <jonatan@werpers.com>
parents:
227
diff
changeset
|
25 default_arg('G', @(t) sparse(m,1)); |
c9009d5a3101
Refactor time.Cdiff and add getEnergyMethod
Jonatan Werpers <jonatan@werpers.com>
parents:
227
diff
changeset
|
26 default_arg('t0', 0); |
0 | 27 |
977
c9009d5a3101
Refactor time.Cdiff and add getEnergyMethod
Jonatan Werpers <jonatan@werpers.com>
parents:
227
diff
changeset
|
28 obj.A = A; |
c9009d5a3101
Refactor time.Cdiff and add getEnergyMethod
Jonatan Werpers <jonatan@werpers.com>
parents:
227
diff
changeset
|
29 obj.B = B; |
c9009d5a3101
Refactor time.Cdiff and add getEnergyMethod
Jonatan Werpers <jonatan@werpers.com>
parents:
227
diff
changeset
|
30 obj.C = C; |
c9009d5a3101
Refactor time.Cdiff and add getEnergyMethod
Jonatan Werpers <jonatan@werpers.com>
parents:
227
diff
changeset
|
31 obj.G = G; |
227
151ab2b5a686
Added a timedependent version of Cdiff.
Jonatan Werpers <jonatan@werpers.com>
parents:
142
diff
changeset
|
32 |
977
c9009d5a3101
Refactor time.Cdiff and add getEnergyMethod
Jonatan Werpers <jonatan@werpers.com>
parents:
227
diff
changeset
|
33 % Rewrite as AA*v_(n+1) + BB*v_n + CC*v_(n-1) = G(t_n) |
1113
47e86b5270ad
Change name of property k to dt in time.Timestepper
Jonatan Werpers <jonatan@werpers.com>
parents:
979
diff
changeset
|
34 obj.AA = A/dt^2 + B/(2*dt); |
47e86b5270ad
Change name of property k to dt in time.Timestepper
Jonatan Werpers <jonatan@werpers.com>
parents:
979
diff
changeset
|
35 obj.BB = -2*A/dt^2 + C; |
47e86b5270ad
Change name of property k to dt in time.Timestepper
Jonatan Werpers <jonatan@werpers.com>
parents:
979
diff
changeset
|
36 obj.CC = A/dt^2 - B/(2*dt); |
227
151ab2b5a686
Added a timedependent version of Cdiff.
Jonatan Werpers <jonatan@werpers.com>
parents:
142
diff
changeset
|
37 |
1113
47e86b5270ad
Change name of property k to dt in time.Timestepper
Jonatan Werpers <jonatan@werpers.com>
parents:
979
diff
changeset
|
38 obj.dt = dt; |
977
c9009d5a3101
Refactor time.Cdiff and add getEnergyMethod
Jonatan Werpers <jonatan@werpers.com>
parents:
227
diff
changeset
|
39 obj.v_prev = v0; |
1113
47e86b5270ad
Change name of property k to dt in time.Timestepper
Jonatan Werpers <jonatan@werpers.com>
parents:
979
diff
changeset
|
40 obj.v = v0 + dt*v0t; |
47e86b5270ad
Change name of property k to dt in time.Timestepper
Jonatan Werpers <jonatan@werpers.com>
parents:
979
diff
changeset
|
41 obj.t = t0+dt; |
977
c9009d5a3101
Refactor time.Cdiff and add getEnergyMethod
Jonatan Werpers <jonatan@werpers.com>
parents:
227
diff
changeset
|
42 obj.n = 1; |
0 | 43 end |
44 | |
45 function [v,t] = getV(obj) | |
46 v = obj.v; | |
47 t = obj.t; | |
48 end | |
49 | |
50 function [vt,t] = getVt(obj) | |
1113
47e86b5270ad
Change name of property k to dt in time.Timestepper
Jonatan Werpers <jonatan@werpers.com>
parents:
979
diff
changeset
|
51 vt = (obj.v-obj.v_prev)/obj.dt; % Could be improved using u_tt = f(u)) |
0 | 52 t = obj.t; |
53 end | |
54 | |
977
c9009d5a3101
Refactor time.Cdiff and add getEnergyMethod
Jonatan Werpers <jonatan@werpers.com>
parents:
227
diff
changeset
|
55 function E = getEnergy(obj) |
c9009d5a3101
Refactor time.Cdiff and add getEnergyMethod
Jonatan Werpers <jonatan@werpers.com>
parents:
227
diff
changeset
|
56 v = obj.v; |
c9009d5a3101
Refactor time.Cdiff and add getEnergyMethod
Jonatan Werpers <jonatan@werpers.com>
parents:
227
diff
changeset
|
57 vp = obj.v_prev; |
1113
47e86b5270ad
Change name of property k to dt in time.Timestepper
Jonatan Werpers <jonatan@werpers.com>
parents:
979
diff
changeset
|
58 vt = (obj.v - obj.v_prev)/obj.dt; |
977
c9009d5a3101
Refactor time.Cdiff and add getEnergyMethod
Jonatan Werpers <jonatan@werpers.com>
parents:
227
diff
changeset
|
59 |
c9009d5a3101
Refactor time.Cdiff and add getEnergyMethod
Jonatan Werpers <jonatan@werpers.com>
parents:
227
diff
changeset
|
60 E = vt'*obj.A*vt + v'*obj.C*vp; |
c9009d5a3101
Refactor time.Cdiff and add getEnergyMethod
Jonatan Werpers <jonatan@werpers.com>
parents:
227
diff
changeset
|
61 end |
c9009d5a3101
Refactor time.Cdiff and add getEnergyMethod
Jonatan Werpers <jonatan@werpers.com>
parents:
227
diff
changeset
|
62 |
0 | 63 function obj = step(obj) |
977
c9009d5a3101
Refactor time.Cdiff and add getEnergyMethod
Jonatan Werpers <jonatan@werpers.com>
parents:
227
diff
changeset
|
64 v_next = obj.AA\(-obj.BB*obj.v - obj.CC*obj.v_prev + obj.G(obj.t)); |
c9009d5a3101
Refactor time.Cdiff and add getEnergyMethod
Jonatan Werpers <jonatan@werpers.com>
parents:
227
diff
changeset
|
65 |
c9009d5a3101
Refactor time.Cdiff and add getEnergyMethod
Jonatan Werpers <jonatan@werpers.com>
parents:
227
diff
changeset
|
66 obj.v_prev = obj.v; |
c9009d5a3101
Refactor time.Cdiff and add getEnergyMethod
Jonatan Werpers <jonatan@werpers.com>
parents:
227
diff
changeset
|
67 obj.v = v_next; |
1113
47e86b5270ad
Change name of property k to dt in time.Timestepper
Jonatan Werpers <jonatan@werpers.com>
parents:
979
diff
changeset
|
68 obj.t = obj.t + obj.dt; |
0 | 69 obj.n = obj.n + 1; |
70 end | |
71 end | |
978
1a30dbe99c7c
Refactor CdiffImplicit to take input arguments in the right order
Jonatan Werpers <jonatan@werpers.com>
parents:
977
diff
changeset
|
72 end |