comparison +scheme/+bc/bcForcingSetup.m @ 869:d356f1a22d4f bcSetupExperiment

Start organizing the code
author Jonatan Werpers <jonatan@werpers.com>
date Fri, 07 Sep 2018 09:19:03 +0200
parents
children
comparison
equal deleted inserted replaced
868:57760d7088ad 869:d356f1a22d4f
1 function S = bcForcingSetup(diffOp, penalties, bcs, S_sign) %% SETUP in the name!!
2 default_arg('S_sign', 1);
3
4 assertType(bcs, 'cell');
5 assertIsMember(S_sign, [1, -1]);
6
7 verifyBcFormat(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