comparison +rv/+time/RungekuttaExteriorRvBdf.m @ 1154:3108963cc42c feature/rv

Improve efficiency of diffOps in Burgers2d, the artificial diffusion operator in rv.constructDiffOps and the RungekuttaExteriorRv time-steppers
author Vidar Stiernström <vidar.stiernstrom@it.uu.se>
date Wed, 06 Mar 2019 09:45:52 +0100
parents 010bb2677230
children
comparison
equal deleted inserted replaced
1153:635386c073b9 1154:3108963cc42c
3 F % RHS of the ODE 3 F % RHS of the ODE
4 k % Time step 4 k % Time step
5 t % Time point 5 t % Time point
6 v % Solution vector 6 v % Solution vector
7 n % Time level 7 n % Time level
8 coeffs % The coefficents used for the RK time integration 8 rkScheme % The particular RK scheme used for time integration
9
9 10
10 % Properties related to the residual viscositys 11 % Properties related to the residual viscositys
11 RV % Residual Viscosity operator 12 RV % Residual Viscosity operator
12 v_prev % Solution vector at previous time levels, used for the RV evaluation 13 v_prev % Solution vector at previous time levels, used for the RV evaluation
13 DvDt % Function for computing the time deriative used for the RV evaluation 14 DvDt % Function for computing the time deriative used for the RV evaluation
14 lowerBdfOrder % Orders of the approximation of the time deriative, used for the RV evaluation. 15 lowerBdfOrder % Orders of the approximation of the time deriative, used for the RV evaluation.
15 % dictates which accuracy the boot-strapping should start from. 16 % dictates which accuracy the boot-strapping should start from.
16 upperBdfOrder % Orders of the approximation of the time deriative, used for the RV evaluation. 17 upperBdfOrder % Orders of the approximation of the time deriative, used for the RV evaluation.
17 % Dictates the order of accuracy used once the boot-strapping is complete. 18 % Dictates the order of accuracy used once the boot-strapping is complete.
19
20
18 end 21 end
19 methods 22 methods
20 function obj = RungekuttaExteriorRvBdf(F, k, t0, v0, RV, rkOrder, bdfOrders) 23 function obj = RungekuttaExteriorRvBdf(F, k, t0, v0, RV, rkOrder, bdfOrders)
21 obj.F = F; 24 obj.F = F;
22 obj.k = k; 25 obj.k = k;
23 obj.t = t0; 26 obj.t = t0;
24 obj.v = v0; 27 obj.v = v0;
25 obj.n = 0; 28 obj.n = 0;
26 % Extract the coefficients for the specified rkOrder
27 % used for the RK updates from the Butcher tableua.
28 [s,a,b,c] = time.rk.butcherTableau(rkOrder);
29 obj.coeffs = struct('s',s,'a',a,'b',b,'c',c);
30
31 obj.RV = RV; 29 obj.RV = RV;
32 obj.lowerBdfOrder = bdfOrders.lowerBdfOrder; 30 obj.lowerBdfOrder = bdfOrders.lowerBdfOrder;
33 obj.upperBdfOrder = bdfOrders.upperBdfOrder; 31 obj.upperBdfOrder = bdfOrders.upperBdfOrder;
34 assert((obj.lowerBdfOrder >= 1) && (obj.upperBdfOrder <= 6)); 32 assert((obj.lowerBdfOrder >= 1) && (obj.upperBdfOrder <= 6));
35 obj.v_prev = []; 33 obj.v_prev = [];
36 obj.DvDt = rv.time.BdfDerivative(); 34 obj.DvDt = rv.time.BdfDerivative();
35
36 if (rkOrder == 4) % Use specialized RK4 scheme
37 obj.rkScheme = @time.rk.rungekutta_4;
38 else
39 % Extract the coefficients for the specified order
40 % used for the RK updates from the Butcher tableua.
41 [s,a,b,c] = time.rk.butcherTableau(rkOrder);
42 coeffs = struct('s',s,'a',a,'b',b,'c',c);
43 obj.rkScheme = @(v,t,dt,F) time.rk.rungekutta(v, t , dt, F, coeffs);
44 end
45
37 end 46 end
38 47
39 function [v, t] = getV(obj) 48 function [v, t] = getV(obj)
40 v = obj.v; 49 v = obj.v;
41 t = obj.t; 50 t = obj.t;
72 obj.v_prev(:,2:end) = obj.v_prev(:,1:end-1); 81 obj.v_prev(:,2:end) = obj.v_prev(:,1:end-1);
73 obj.v_prev(:,1) = obj.v; 82 obj.v_prev(:,1) = obj.v;
74 end 83 end
75 84
76 % Fix the viscosity of the RHS function F 85 % Fix the viscosity of the RHS function F
77 F_visc = @(v,t) obj.F(v, t, viscosity); 86 m = length(viscosity);
78 obj.v = time.rk.rungekutta(obj.v, obj.t, obj.k, F_visc, obj.coeffs); 87 F_visc = @(v,t) obj.F(v, t, spdiags(viscosity,0,m,m));
88 obj.v = obj.rkScheme(obj.v, obj.t, obj.k, F_visc);
79 obj.t = obj.t + obj.k; 89 obj.t = obj.t + obj.k;
80 obj.n = obj.n + 1; 90 obj.n = obj.n + 1;
81 end 91 end
82 end 92 end
83 end 93 end