Mercurial > repos > public > sbplib
comparison +scheme/bcSetup.m @ 789:1a6095bed6d6 bcSetupExperiment
Change to using structs for storing data functions and penalties
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Tue, 24 Jul 2018 16:53:35 -0700 |
parents | b3ea4cccaf15 |
children | 6afd3dd3ed96 |
comparison
equal
deleted
inserted
replaced
788:b3ea4cccaf15 | 789:1a6095bed6d6 |
---|---|
18 | 18 |
19 verifyBcFormat(bcs, diffOp); | 19 verifyBcFormat(bcs, diffOp); |
20 | 20 |
21 % Setup storage arrays | 21 % Setup storage arrays |
22 closure = spzeros(size(diffOp)); | 22 closure = spzeros(size(diffOp)); |
23 gridDataPenalties = {}; | 23 gridData = {}; |
24 gridDataFunctions = {}; | 24 symbolicData = {}; |
25 symbolicDataPenalties = {}; | |
26 symbolicDataFunctions = {}; | |
27 symbolicDataCoords = {}; | |
28 | 25 |
29 % Collect closures, penalties and data | 26 % Collect closures, penalties and data |
30 for i = 1:length(bcs) | 27 for i = 1:length(bcs) |
31 [localClosure, penalty] = diffOp.boundary_condition(bcs{i}.boundary, bcs{i}.type); | 28 [localClosure, penalty] = diffOp.boundary_condition(bcs{i}.boundary, bcs{i}.type); |
32 closure = closure + localClosure; | 29 closure = closure + localClosure; |
36 continue | 33 continue |
37 end | 34 end |
38 | 35 |
39 if nargin(bcs{i}.data) == 1 | 36 if nargin(bcs{i}.data) == 1 |
40 % Grid data | 37 % Grid data |
41 gridDataPenalties{end+1} = penalty; | 38 gridData{end+1}.penalty = penalty; |
42 gridDataFunctions{end+1} = bcs{i}.data; | 39 gridData{end}.func = bcs{i}.data; |
43 elseif nargin(bcs{i}.data) > 1 | 40 elseif nargin(bcs{i}.data) > 1 |
44 % Symbolic data | 41 % Symbolic data |
45 coord = diffOp.grid.getBoundary(bcs{i}.boundary); | 42 coord = diffOp.grid.getBoundary(bcs{i}.boundary); |
46 symbolicDataPenalties{end+1} = penalty; | 43 symbolicData{end+1}.penalty = penalty; |
47 symbolicDataFunctions{end+1} = bcs{i}.data; | 44 symbolicData{end}.func = bcs{i}.data; |
48 symbolicDataCoords{end+1} = num2cell(coord ,1); | 45 symbolicData{end}.coords = num2cell(coord ,1); |
49 end | 46 end |
50 end | 47 end |
51 | 48 |
52 % Setup penalty function | 49 % Setup penalty function |
53 O = spzeros(size(diffOp),1); | 50 O = spzeros(size(diffOp),1); |
54 function v = S_fun(t) | 51 function v = S_fun(t) |
55 v = O; | 52 v = O; |
56 for i = 1:length(gridDataFunctions) | 53 for i = 1:length(gridData) |
57 v = v + gridDataPenalties{i}*gridDataFunctions{i}(t); | 54 v = v + gridData{i}.penalty*gridData{i}.func(t); |
58 end | 55 end |
59 | 56 |
60 for i = 1:length(symbolicDataFunctions) | 57 for i = 1:length(symbolicData) |
61 v = v + symbolicDataPenalties{i}*symbolicDataFunctions{i}(t, symbolicDataCoords{i}{:}); | 58 v = v + symbolicData{i}.penalty*symbolicData{i}.func(t, symbolicData{i}.coords{:}); |
62 end | 59 end |
63 | 60 |
64 v = S_sign * v; | 61 v = S_sign * v; |
65 end | 62 end |
66 S = @S_fun; | 63 S = @S_fun; |