Mercurial > repos > public > sbplib
comparison +scheme/+bc/forcingSetup.m @ 870:fb91d12093f8 bcSetupExperiment
Change some naming of functions
| author | Jonatan Werpers <jonatan@werpers.com> |
|---|---|
| date | Thu, 01 Nov 2018 10:41:36 +0100 |
| parents | +scheme/+bc/bcForcingSetup.m@d356f1a22d4f |
| children | 93489ddb73e8 |
comparison
equal
deleted
inserted
replaced
| 869:d356f1a22d4f | 870:fb91d12093f8 |
|---|---|
| 1 function S = forcingSetup(diffOp, penalties, bcs, S_sign) | |
| 2 default_arg('S_sign', 1); | |
| 3 | |
| 4 assertType(bcs, 'cell'); | |
| 5 assertIsMember(S_sign, [1, -1]); | |
| 6 | |
| 7 scheme.bc.verifyFormat(bcs, diffOp); | |
| 8 | |
| 9 % % Setup storage arrays | |
| 10 % closure = spzeros(size(diffOp)); | |
| 11 % gridData = {}; | |
| 12 % symbolicData = {}; | |
| 13 | |
| 14 % Loop over bcs and collect data | |
| 15 for i = 1:length(bcs) | |
| 16 % [ok, isSym, data] = parseData(bcs{i}, penalties{i}, diffOp.grid) | |
| 17 | |
| 18 % if ~ok | |
| 19 % % There was no data | |
| 20 % continue | |
| 21 % end | |
| 22 | |
| 23 % if isSym | |
| 24 % gridData{end+1} = data; | |
| 25 % else | |
| 26 % symbolicData{end+1} = data; | |
| 27 % end | |
| 28 end | |
| 29 | |
| 30 | |
| 31 % Setup penalty function | |
| 32 O = spzeros(size(diffOp),1); | |
| 33 function v = S_fun(t) | |
| 34 v = O; | |
| 35 for i = 1:length(gridData) | |
| 36 v = v + gridData{i}.penalty*gridData{i}.func(t); | |
| 37 end | |
| 38 | |
| 39 for i = 1:length(symbolicData) | |
| 40 v = v + symbolicData{i}.penalty*symbolicData{i}.func(t, symbolicData{i}.coords{:}); | |
| 41 end | |
| 42 | |
| 43 v = S_sign * v; | |
| 44 end | |
| 45 S = @S_fun; | |
| 46 end | |
| 47 | |
| 48 function [ok, isSym, dataStruct] = parseData(bc, penalty, grid) | |
| 49 if ~isfield(bc,'data') || isempty(bc.data) | |
| 50 ok = false; | |
| 51 return | |
| 52 end | |
| 53 ok = true; | |
| 54 | |
| 55 nArg = nargin(bc.data); | |
| 56 | |
| 57 if nArg > 1 | |
| 58 % Symbolic data | |
| 59 isSym = true; | |
| 60 coord = grid.getBoundary(bc.boundary); | |
| 61 dataStruct.penalty = penalty; | |
| 62 dataStruct.func = bc.data; | |
| 63 dataStruct.coords = num2cell(coord, 1); | |
| 64 else | |
| 65 % Grid data | |
| 66 isSym = false; | |
| 67 dataStruct.penalty = penalty; | |
| 68 dataStruct.func = bcs{i}.data; | |
| 69 end | |
| 70 end |
