annotate +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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
869
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
1 function S = bcForcingSetup(diffOp, penalties, bcs, S_sign) %% SETUP in the name!!
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
2 default_arg('S_sign', 1);
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
3
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
4 assertType(bcs, 'cell');
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
5 assertIsMember(S_sign, [1, -1]);
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
6
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
7 verifyBcFormat(bcs, diffOp);
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
8
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
9 % % Setup storage arrays
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
10 % closure = spzeros(size(diffOp));
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
11 % gridData = {};
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
12 % symbolicData = {};
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
13
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
14 % Loop over bcs and collect data
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
15 for i = 1:length(bcs)
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
16 % [ok, isSym, data] = parseData(bcs{i}, penalties{i}, diffOp.grid)
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
17
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
18 % if ~ok
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
19 % % There was no data
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
20 % continue
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
21 % end
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
22
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
23 % if isSym
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
24 % gridData{end+1} = data;
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
25 % else
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
26 % symbolicData{end+1} = data;
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
27 % end
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
28 end
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
29
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
30
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
31 % Setup penalty function
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
32 O = spzeros(size(diffOp),1);
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
33 function v = S_fun(t)
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
34 v = O;
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
35 for i = 1:length(gridData)
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
36 v = v + gridData{i}.penalty*gridData{i}.func(t);
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
37 end
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
38
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
39 for i = 1:length(symbolicData)
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
40 v = v + symbolicData{i}.penalty*symbolicData{i}.func(t, symbolicData{i}.coords{:});
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
41 end
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
42
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
43 v = S_sign * v;
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
44 end
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
45 S = @S_fun;
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
46 end
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
47
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
48 function [ok, isSym, dataStruct] = parseData(bc, penalty, grid)
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
49 if ~isfield(bc,'data') || isempty(bc.data)
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
50 ok = false;
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
51 return
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
52 end
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
53 ok = true;
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
54
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
55 nArg = nargin(bc.data);
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
56
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
57 if nArg > 1
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
58 % Symbolic data
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
59 isSym = true;
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
60 coord = grid.getBoundary(bc.boundary);
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
61 dataStruct.penalty = penalty;
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
62 dataStruct.func = bc.data;
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
63 dataStruct.coords = num2cell(coord, 1);
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
64 else
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
65 % Grid data
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
66 isSym = false;
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
67 dataStruct.penalty = penalty;
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
68 dataStruct.func = bcs{i}.data;
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
69 end
d356f1a22d4f Start organizing the code
Jonatan Werpers <jonatan@werpers.com>
parents:
diff changeset
70 end