Mercurial > repos > public > sbplib
changeset 1:5ae4f23d9130
Added CdiffNonlin timestepper. Probably fixed a bug with Cdiff. Added default arguments to Rk4SecondOrderNonlin.
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Thu, 17 Sep 2015 19:19:58 +0200 |
parents | 48b6fb693025 |
children | bce9e28c1e26 |
files | +time/Cdiff.m +time/CdiffNonlin.m +time/Rk4SecondOrderNonlin.m |
diffstat | 3 files changed, 20 insertions(+), 13 deletions(-) [+] |
line wrap: on
line diff
--- a/+time/Cdiff.m Thu Sep 17 10:12:50 2015 +0200 +++ b/+time/Cdiff.m Thu Sep 17 19:19:58 2015 +0200 @@ -28,7 +28,7 @@ obj.E = E; obj.S = S; obj.k = k; - obj.t = t0+k; + obj.t = t0; obj.v = v; obj.v_prev = v_prev; end
--- a/+time/CdiffNonlin.m Thu Sep 17 10:12:50 2015 +0200 +++ b/+time/CdiffNonlin.m Thu Sep 17 19:19:58 2015 +0200 @@ -1,4 +1,4 @@ -classdef Cdiff < time.Timestepper +classdef CdiffNonlin < time.Timestepper properties D E @@ -12,23 +12,28 @@ methods - function obj = Cdiff(D, E, S, k, t0, v, v_prev) - m = size(D,1); - default_arg('E',sparse(m,m)); - default_arg('S',sparse(m,1)); + function obj = CdiffNonlin(D, E, S, k, t0, v, v_prev) + default_arg('S',0); + default_arg('E',0); + + if isnumeric(S) && S == 0 + S = @(v)0; + end - if ~(issparse(D) && issparse(E) && issparse(S)) - warning('One of the matrices D, E, S is not sparse!') - print_issparse(D) - print_issparse(E) - print_issparse(S) + if isnumeric(E) && E == 0 + E = @(v)0; end + + % m = size(D,1); + % default_arg('E',sparse(m,m)); + % default_arg('S',sparse(m,1)); + obj.D = D; obj.E = E; obj.S = S; obj.k = k; - obj.t = t0+k; + obj.t = t0; obj.v = v; obj.v_prev = v_prev; end @@ -44,7 +49,7 @@ 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.v, obj.v_prev] = time.cdiff.cdiff(obj.v, obj.v_prev, obj.k, obj.D(obj.v), obj.E(obj.v), obj.S(obj.v)); obj.t = obj.t + obj.k; obj.n = obj.n + 1; end