Mercurial > repos > public > sbplib
changeset 886:8894e9c49e40 feature/timesteppers
Merge with default for latest changes
author | Vidar Stiernström <vidar.stiernstrom@it.uu.se> |
---|---|
date | Thu, 15 Nov 2018 16:36:21 -0800 |
parents | b5e5b195da1e (diff) 9be370486d36 (current diff) |
children | 50d5a3843099 |
files | +grid/Curve.m +grid/Ti.m +grid/Ti3D.m +grid/equal_step_size.m +grid/old/concat_curve.m +grid/old/curve_discretise.m +grid/old/curve_interp.m +grid/old/max_h.m +grid/old/min_h.m +grid/old/plot_shape.m +grid/old/shape.m +grid/old/shape_discretise.m +grid/old/shape_linesegments.m +grid/old/triang_interp.m +grid/old/triang_interp_pts.m +grid/old/triang_map.m +grid/old/triang_plot_interp.m +grid/old/triang_show.m +grid/place_label.m +multiblock/gridVector1d.m +multiblock/gridVector2d.m +multiblock/multiblockgrid.m +multiblock/solutionVector2cell.m +multiblock/stitchSchemes.m +sbp/+implementations/d4_compatible_halfvariable_2.m +sbp/+implementations/d4_compatible_halfvariable_4.m +sbp/+implementations/d4_compatible_halfvariable_6.m +sbp/D4CompatibleVariable.m +time/Cdiff.m +time/CdiffTimeDep.m +time/Rungekutta4SecondOrder.m +time/Rungekutta4proper.m +time/SBPInTime.m +time/SBPInTimeSecondOrderFormImplicit.m +time/Timestepper.m cell2sparse.m cell2vector.m vector2cell.m |
diffstat | 12 files changed, 72 insertions(+), 5 deletions(-) [+] |
line wrap: on
line diff
diff -r 9be370486d36 -r 8894e9c49e40 +time/Cdiff.m --- a/+time/Cdiff.m Fri Nov 02 11:13:51 2018 +0100 +++ b/+time/Cdiff.m Thu Nov 15 16:36:21 2018 -0800 @@ -43,6 +43,10 @@ t = obj.t; end + function state = getState(obj) + state = struct('v', obj.v, 'v_prev', obj.v_prev, 't', obj.t, 'k', obj.k); + end + function obj = step(obj) [obj.v, obj.v_prev] = time.cdiff.cdiff(obj.v, obj.v_prev, obj.k, obj.D, obj.E, obj.S); obj.t = obj.t + obj.k;
diff -r 9be370486d36 -r 8894e9c49e40 +time/CdiffNonlin.m --- a/+time/CdiffNonlin.m Fri Nov 02 11:13:51 2018 +0100 +++ b/+time/CdiffNonlin.m Thu Nov 15 16:36:21 2018 -0800 @@ -50,6 +50,12 @@ t = obj.t; end + function state = getState(obj) + [v, t] = obj.getV(); + [vt] = obj.getVt(); + state = struct('v', v, 'vt', vt, 't', t, 'k', obj.k); + end + function obj = step(obj) D = obj.D(obj.v); E = obj.E(obj.v);
diff -r 9be370486d36 -r 8894e9c49e40 +time/CdiffTimeDep.m --- a/+time/CdiffTimeDep.m Fri Nov 02 11:13:51 2018 +0100 +++ b/+time/CdiffTimeDep.m Thu Nov 15 16:36:21 2018 -0800 @@ -42,6 +42,10 @@ t = obj.t; end + function state = getState(obj) + state = struct('v', obj.v, 'v_prev', obj.v_prev, 't', obj.t, 'k', obj.k); + end + function obj = step(obj) [obj.v, obj.v_prev] = time.cdiff.cdiff(obj.v, obj.v_prev, obj.k, obj.D, obj.E(obj.t), obj.S(obj.t)); obj.t = obj.t + obj.k;
diff -r 9be370486d36 -r 8894e9c49e40 +time/Ode45.m --- a/+time/Ode45.m Fri Nov 02 11:13:51 2018 +0100 +++ b/+time/Ode45.m Thu Nov 15 16:36:21 2018 -0800 @@ -48,6 +48,12 @@ t = obj.t; end + function state = getState(obj) + [v, t] = obj.getV(); + [vt] = obj.getVt(); + state = struct('v', v, 'vt', vt, 't', t, 'k', obj.k); + end + function obj = step(obj) [t,w] = ode45(@(t,w)(obj.F(w,t)),[obj.t obj.t+obj.k],obj.w);
diff -r 9be370486d36 -r 8894e9c49e40 +time/Rk4SecondOrderNonlin.m --- a/+time/Rk4SecondOrderNonlin.m Fri Nov 02 11:13:51 2018 +0100 +++ b/+time/Rk4SecondOrderNonlin.m Thu Nov 15 16:36:21 2018 -0800 @@ -60,6 +60,12 @@ t = obj.t; end + function state = getState(obj) + [v, t] = obj.getV(); + [vt] = obj.getVt(); + state = struct('v', v, 'vt', vt, 't', t, 'k', obj.k); + end + function obj = step(obj) obj.w = time.rk4.rungekutta_4(obj.w, obj.t, obj.k, obj.F); obj.t = obj.t + obj.k;
diff -r 9be370486d36 -r 8894e9c49e40 +time/Rungekutta4.m --- a/+time/Rungekutta4.m Fri Nov 02 11:13:51 2018 +0100 +++ b/+time/Rungekutta4.m Thu Nov 15 16:36:21 2018 -0800 @@ -38,6 +38,10 @@ t = obj.t; end + function state = getState(obj) + state = struct('v', obj.v, 't', obj.t, 'k', obj.k); + end + function obj = step(obj) obj.v = time.rk4.rungekutta_4(obj.v, obj.t, obj.k, obj.F); obj.t = obj.t + obj.k;
diff -r 9be370486d36 -r 8894e9c49e40 +time/Rungekutta4SecondOrder.m --- a/+time/Rungekutta4SecondOrder.m Fri Nov 02 11:13:51 2018 +0100 +++ b/+time/Rungekutta4SecondOrder.m Thu Nov 15 16:36:21 2018 -0800 @@ -98,6 +98,12 @@ t = obj.t; end + function state = getState(obj) + [v, t] = obj.getV(); + [vt] = obj.getVt(); + state = struct('v', v, 'vt', vt, 't', t, 'k', obj.k); + end + function obj = step(obj) obj.w = time.rk4.rungekutta_4(obj.w, obj.t, obj.k, obj.F); obj.t = obj.t + obj.k;
diff -r 9be370486d36 -r 8894e9c49e40 +time/Rungekutta4proper.m --- a/+time/Rungekutta4proper.m Fri Nov 02 11:13:51 2018 +0100 +++ b/+time/Rungekutta4proper.m Thu Nov 15 16:36:21 2018 -0800 @@ -19,10 +19,15 @@ obj.m = length(v0); obj.n = 0; end + + function [v, t] = getV(obj) + v = obj.v; + t = obj.t - function [v,t] = getV(obj) - v = obj.v; - t = obj.t; + end + + function state = getState(obj) + state = struct('v', obj.v, 't', obj.t, 'k', obj.k); end function obj = step(obj)
diff -r 9be370486d36 -r 8894e9c49e40 +time/SBPInTime.m --- a/+time/SBPInTime.m Fri Nov 02 11:13:51 2018 +0100 +++ b/+time/SBPInTime.m Thu Nov 15 16:36:21 2018 -0800 @@ -94,6 +94,11 @@ t = obj.t; end + function state = getState(obj) + [v, t] = getV(obj); + state = struct('v', v, 't', t, 'k', obj.k); + end + function obj = step(obj) obj.v = time.sbp.sbpintime(obj.v, obj.t, obj.nodes,... obj.penalty, obj.f, obj.blockSize,...
diff -r 9be370486d36 -r 8894e9c49e40 +time/SBPInTimeSecondOrderForm.m --- a/+time/SBPInTimeSecondOrderForm.m Fri Nov 02 11:13:51 2018 +0100 +++ b/+time/SBPInTimeSecondOrderForm.m Thu Nov 15 16:36:21 2018 -0800 @@ -58,6 +58,12 @@ t = obj.t; end + function state = getState(obj) + [v, t] = obj.getV(); + [vt] = obj.getVt(); + state = struct('v', v, 'vt', vt, 't', t, 'k', obj.k); + end + function obj = step(obj) obj.firstOrderTimeStepper.step(); obj.t = obj.firstOrderTimeStepper.t;
diff -r 9be370486d36 -r 8894e9c49e40 +time/SBPInTimeSecondOrderFormImplicit.m --- a/+time/SBPInTimeSecondOrderFormImplicit.m Fri Nov 02 11:13:51 2018 +0100 +++ b/+time/SBPInTimeSecondOrderFormImplicit.m Thu Nov 15 16:36:21 2018 -0800 @@ -77,6 +77,12 @@ t = obj.t; end + function state = getState(obj) + [v, t] = obj.getV(); + [vt] = obj.getVt(); + state = struct('v', v, 'vt', vt, 't', t, 'k', obj.k); + end + function obj = step(obj) obj.firstOrderTimeStepper.step(); obj.t = obj.firstOrderTimeStepper.t;
diff -r 9be370486d36 -r 8894e9c49e40 +time/Timestepper.m --- a/+time/Timestepper.m Fri Nov 02 11:13:51 2018 +0100 +++ b/+time/Timestepper.m Thu Nov 15 16:36:21 2018 -0800 @@ -3,11 +3,20 @@ t k n + % TBD: Decide on accessibility of properties. + % Properties that are not intended to be modified from the outside + % should ideally be made private and the specialized classes should be extended with + % getter functions for their relevant members, e.g v, t, k, etc. end methods (Abstract) - [v,t] = getV(obj) - obj = step(obj) + % Returns the solution vector v at timestep t. + % TBD: Replace with getters for the separate members if the above suggestion is implemented? + [v,t] = getV(obj) + % Returns struct holding relevant state properties for the specialized timestepper. + % E.g [v, t, k]. + state = getState(obj) + obj = step(obj) end