Mercurial > repos > public > sbplib
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 |