changeset 31:d1f9dd55a2b0

Fixed bug in step() for CdiffNonlin.
author Jonatan Werpers <jonatan@werpers.com>
date Mon, 28 Sep 2015 21:56:02 +0200
parents cd2e28c5ecd2
children ddfb98209aa2
files +time/CdiffNonlin.m
diffstat 1 files changed, 10 insertions(+), 3 deletions(-) [+]
line wrap: on
line diff
--- a/+time/CdiffNonlin.m	Mon Sep 28 13:23:52 2015 +0200
+++ b/+time/CdiffNonlin.m	Mon Sep 28 21:56:02 2015 +0200
@@ -67,16 +67,23 @@
             %% Calculate matrices need for the timestep
             % Before optimization:  A =  1/k^2 * I - 1/(2*k)*E;
             k = obj.k;
+
             Aj = 1/k^2 * I(j,j) - 1/(2*k)*E(j,j);
             B =  2/k^2 * I + D;
             C = -1/k^2 * I - 1/(2*k)*E;
 
             %% Take the timestep
             v = obj.v;
+            v_prev = obj.v_prev;
 
-            % Before optimization:  obj.v = A\(B*v + C*v_prev + S);
-            obj.v(i) = k^2*(B(i,i)*v(i)   -1/k^2*obj.v_prev(i) + S(i));
-            obj.v(j) =  Aj\(B(j,j)*v(j) + C(j,j)*obj.v_prev(j) + S(j));
+            % Want to solve the seq A*v_next = b where
+            b = (B*v + C*v_prev + S);
+
+            % Before optimization:  obj.v = A\b;
+
+            obj.v(i) = k^2*b(i);
+            obj.v(j) =  Aj\b(j);
+
             obj.v_prev = v;
 
             %% Update state of the timestepper