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
--- 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;
--- 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);
--- 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;
--- 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);
 
--- 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;
--- 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;
--- 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;
--- 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)
--- 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,...
--- 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;
--- 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;
--- 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