Mercurial > repos > public > sbplib
diff +rv/+time/RungekuttaInteriorRV.m @ 1017:2d7c1333bd6c feature/advectionRV
Add support for using the ODE to approximate the time derivative in the residual
author | Vidar Stiernström <vidar.stiernstrom@it.uu.se> |
---|---|
date | Tue, 11 Dec 2018 16:29:21 +0100 |
parents | 1e437c9e5132 |
children |
line wrap: on
line diff
--- a/+rv/+time/RungekuttaInteriorRV.m Fri Dec 07 13:11:53 2018 +0100 +++ b/+rv/+time/RungekuttaInteriorRV.m Tue Dec 11 16:29:21 2018 +0100 @@ -7,20 +7,30 @@ n % Time level coeffs % The coefficents used for the RK time integration RV % Residual Viscosity + viscosity % Viscosity vector + DvDt % Function for computing the time deriative used for the RV evaluation + + residual + dvdt + Df end methods - function obj = RungekuttaInteriorRV(F, k, t0, v0, RV, order) + function obj = RungekuttaInteriorRV(F, k, t0, v0, RV, DvDt, order) obj.F = F; obj.k = k; obj.t = t0; obj.v = v0; obj.n = 0; - obj.RV = RV; % Extract the coefficients for the specified order % used for the RK updates from the Butcher tableua. [s,a,b,c] = time.rk.butcherTableau(order); obj.coeffs = struct('s',s,'a',a,'b',b,'c',c); + obj.RV = RV; + obj.DvDt = DvDt; + obj.dvdt = obj.DvDt(obj.v); + [obj.viscosity, obj.Df] = obj.RV.evaluate(obj.v,obj.dvdt); + obj.residual = obj.dvdt + obj.Df; end function [v, t] = getV(obj) @@ -29,14 +39,16 @@ end function state = getState(obj) - [residual, u_t, grad_f] = obj.RV.getResidual(); - state = struct('v', obj.v, 'residual', residual, 'u_t', u_t, 'grad_f', grad_f, 'viscosity', obj.RV.getViscosity(), 't', obj.t); + state = struct('v', obj.v, 'residual', obj.residual, 'dvdt', obj.dvdt, 'Df', obj.Df, 'viscosity', obj.viscosity, 't', obj.t); end function obj = step(obj) - obj.v = rv.time.rungekuttaRV(obj.v, obj.t, obj.k, obj.F, obj.RV, obj.coeffs); + obj.v = rv.time.rungekuttaRV(obj.v, obj.t, obj.k, obj.F, obj.RV, obj.DvDt, obj.coeffs); obj.t = obj.t + obj.k; obj.n = obj.n + 1; + obj.dvdt = obj.DvDt(obj.v); + [obj.viscosity, obj.Df] = obj.RV.evaluate(obj.v,obj.dvdt); + obj.residual = obj.dvdt + obj.Df; end end end \ No newline at end of file