Mercurial > repos > public > sbplib
changeset 240:46256fffa329 feature/beams
Added some stuff for default structs. Improved interface for beam.
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Wed, 03 Aug 2016 12:30:27 +0200 |
parents | ba56e0d621f2 |
children | 09d964b850ee |
files | +scheme/Beam.m copyWithDefault.m default_struct.m |
diffstat | 3 files changed, 80 insertions(+), 24 deletions(-) [+] |
line wrap: on
line diff
diff -r ba56e0d621f2 -r 46256fffa329 +scheme/Beam.m --- a/+scheme/Beam.m Thu Jul 28 12:50:43 2016 +0200 +++ b/+scheme/Beam.m Wed Aug 03 12:30:27 2016 +0200 @@ -15,15 +15,23 @@ d3_l, d3_r gamm delt - interface_tuning + + opt end methods - function obj = Beam(grid, order, alpha, opsGen, interface_tuning, alphaII, alphaIII) + function obj = Beam(grid, order, alpha, opsGen, opt) default_arg('alpha', -1); - default_arg('interface_tuning', 1.1); - default_arg('alphaII', []) - default_arg('alphaIII', []) + + + opt_default.interface_l.tuning = 1.1; + opt_default.interface_l.tau = []; + opt_default.interface_l.sig = []; + opt_default.interface_r.tuning = 1.1; + opt_default.interface_r.tau = []; + opt_default.interface_r.sig = []; + default_struct('opt', opt_default); + % default_arg('opsGen', @sbp.Higher); default_arg('opsGen', @sbp.HigherCompatibleVariable); % Supposed to be better @@ -57,14 +65,12 @@ obj.D = alpha*D4; - if isempty(alphaII) && isempty(alphaIII) - alphaII = ops.borrowing.N.S2/2; - alphaIII = ops.borrowing.N.S3/2; - end + alphaII = ops.borrowing.N.S2/2; + alphaIII = ops.borrowing.N.S3/2; obj.gamm = h*alphaII; obj.delt = h^3*alphaIII; - obj.interface_tuning = interface_tuning; + obj.opt = opt; end @@ -113,27 +119,37 @@ [e_u,d1_u,d2_u,d3_u,s_u] = obj.get_boundary_ops(boundary); [e_v,d1_v,d2_v,d3_v,s_v] = neighbour_scheme.get_boundary_ops(neighbour_boundary); - gamm_u = obj.gamm; - delt_u = obj.delt; - - gamm_v = neighbour_scheme.gamm; - delt_v = neighbour_scheme.delt; - - tuning = obj.interface_tuning; - alpha_u = obj.alpha; alpha_v = neighbour_scheme.alpha; - tau1 = ((alpha_u/2)/delt_u + (alpha_v/2)/delt_v)/2*tuning; - % tau1 = (alpha_u/2 + alpha_v/2)/(2*delt_u)*tuning; - tau4 = s_u*alpha_u/2; + switch boundary + case 'l' + interface_opt = obj.opt.interface_l; + case 'r' + interface_opt = obj.opt.interface_r; + end + + + if isempty(interface_opt.tau) && isempty(interface_opt.sig) + gamm_u = obj.gamm; + delt_u = obj.delt; - sig2 = ((alpha_u/2)/gamm_u + (alpha_v/2)/gamm_v)/2*tuning; - sig3 = -s_u*alpha_u/2; + gamm_v = neighbour_scheme.gamm; + delt_v = neighbour_scheme.delt; + + tuning = interface_opt.tuning; + tau1 = ((alpha_u/2)/delt_u + (alpha_v/2)/delt_v)/2*tuning; + sig2 = ((alpha_u/2)/gamm_u + (alpha_v/2)/gamm_v)/2*tuning; + else + tau1 = interface_opt.tau; + sig2 = interface_opt.sig; + end + + tau4 = s_u*alpha_u/2; + sig3 = -s_u*alpha_u/2; phi2 = s_u*1/2; - psi1 = -s_u*1/2; tau = tau1*e_u + tau4*d3_u;
diff -r ba56e0d621f2 -r 46256fffa329 copyWithDefault.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/copyWithDefault.m Wed Aug 03 12:30:27 2016 +0200 @@ -0,0 +1,30 @@ +% Copy the struct src to dest with default values from default +% dest = copyWithDefault(src, default) +function dest = copyWithDefault(src, default) + % src does not have a value => use default + if isempty(src) + dest = default; + return + end + + % src has a value and is not a struct => use src + if ~isstruct(src) + dest = src; + return + end + + + % src has a value and is a struct => add all default fields + dest = src; + + fn = fieldnames(default); + for i = 1:length(fn) + if isfield(src, fn{i}) + srcField = src.(fn{i}); + else + srcField = []; + end + + dest.(fn{i}) = copyWithDefault(srcField, default.(fn{i})); + end +end
diff -r ba56e0d621f2 -r 46256fffa329 default_struct.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/default_struct.m Wed Aug 03 12:30:27 2016 +0200 @@ -0,0 +1,10 @@ +function default_struct(s, val) + if evalin('caller',sprintf('~exist(''%s'',''var'')',s)) + given = []; + else + given = evalin('caller', s); + end + + final = copyWithDefault(given, val); + assignin('caller', s, final); +end