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;