comparison +rv/+time/RungekuttaInteriorRv.m @ 1031:2ef20d00b386 feature/advectionRV

For easier comparison, return both the first order and residual viscosity when evaluating the residual. Add the first order and residual viscosity to the state of the RungekuttaRV time steppers
author Vidar Stiernström <vidar.stiernstrom@it.uu.se>
date Thu, 17 Jan 2019 10:25:06 +0100
parents 78c75c95b7dd
children 010bb2677230
comparison
equal deleted inserted replaced
1030:78c75c95b7dd 1031:2ef20d00b386
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 coeffs % The coefficents used for the RK time integration
9 RV % Residual Viscosity 9 RV % Residual Viscosity
10 viscosity % Viscosity vector 10 DvDt % Function for computing the time deriative used for the RV evaluation
11 DvDt % Function for computing the time deriative used for the RV evaluation
12 11
13 residual 12 % Convenience properties. Only for plotting
14 dvdt 13 viscosity % Total viscosity
15 Df 14 residualViscosity % Residual viscosity
15 firstOrderViscosity % first order viscosity
16 dvdt % Evaluated time derivative in residual
17 Df % Evaluated flux in residual
16 end 18 end
17 19
18 methods 20 methods
19 function obj = RungekuttaInteriorRv(F, k, t0, v0, RV, DvDt, order) 21 function obj = RungekuttaInteriorRv(F, k, t0, v0, RV, DvDt, order)
20 obj.F = F; 22 obj.F = F;
27 [s,a,b,c] = time.rk.butcherTableau(order); 29 [s,a,b,c] = time.rk.butcherTableau(order);
28 obj.coeffs = struct('s',s,'a',a,'b',b,'c',c); 30 obj.coeffs = struct('s',s,'a',a,'b',b,'c',c);
29 obj.RV = RV; 31 obj.RV = RV;
30 obj.DvDt = DvDt; 32 obj.DvDt = DvDt;
31 obj.dvdt = obj.DvDt(obj.v); 33 obj.dvdt = obj.DvDt(obj.v);
32 [obj.viscosity, obj.Df] = obj.RV.evaluate(obj.v,obj.dvdt); 34 [obj.viscosity, obj.Df, obj.firstOrderViscosity, obj.residualViscosity] = obj.RV.evaluate(obj.v,obj.dvdt);
33 obj.residual = obj.dvdt + obj.Df;
34 end 35 end
35 36
36 function [v, t] = getV(obj) 37 function [v, t] = getV(obj)
37 v = obj.v; 38 v = obj.v;
38 t = obj.t; 39 t = obj.t;
39 end 40 end
40 41
41 function state = getState(obj) 42 function state = getState(obj)
42 state = struct('v', obj.v, 'residual', obj.residual, 'dvdt', obj.dvdt, 'Df', obj.Df, 'viscosity', obj.viscosity, 't', obj.t); 43 state = struct('v', obj.v, 'dvdt', obj.dvdt, 'Df', obj.Df, 'viscosity', obj.viscosity, 'residualViscosity', obj.residualViscosity, 'firstOrderViscosity', obj.firstOrderViscosity, 't', obj.t);
43 end 44 end
44 45
45 function obj = step(obj) 46 function obj = step(obj)
46 obj.v = rv.time.rungekuttaRV(obj.v, obj.t, obj.k, obj.F, obj.RV, obj.DvDt, obj.coeffs); 47 obj.v = rv.time.rungekuttaRV(obj.v, obj.t, obj.k, obj.F, obj.RV, obj.DvDt, obj.coeffs);
47 obj.t = obj.t + obj.k; 48 obj.t = obj.t + obj.k;
48 obj.n = obj.n + 1; 49 obj.n = obj.n + 1;
49 obj.dvdt = obj.DvDt(obj.v); 50 obj.dvdt = obj.DvDt(obj.v);
50 [obj.viscosity, obj.Df] = obj.RV.evaluate(obj.v,obj.dvdt); 51 [obj.viscosity, obj.Df, obj.firstOrderViscosity, obj.residualViscosity] = obj.RV.evaluate(obj.v,obj.dvdt);
51 obj.residual = obj.dvdt + obj.Df;
52 end 52 end
53 end 53 end
54 end 54 end