Mercurial > repos > public > sbplib
comparison +scheme/bcSetup.m @ 790:6afd3dd3ed96 bcSetupExperiment
Add function for parsing each entry in bcs to a struct
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Wed, 25 Jul 2018 09:34:19 -0700 |
parents | 1a6095bed6d6 |
children | 8e4b9a5d7c50 5cf9fdf4c98f |
comparison
equal
deleted
inserted
replaced
789:1a6095bed6d6 | 790:6afd3dd3ed96 |
---|---|
26 % Collect closures, penalties and data | 26 % Collect closures, penalties and data |
27 for i = 1:length(bcs) | 27 for i = 1:length(bcs) |
28 [localClosure, penalty] = diffOp.boundary_condition(bcs{i}.boundary, bcs{i}.type); | 28 [localClosure, penalty] = diffOp.boundary_condition(bcs{i}.boundary, bcs{i}.type); |
29 closure = closure + localClosure; | 29 closure = closure + localClosure; |
30 | 30 |
31 if ~isfield(bcs{i},'data') || isempty(bcs{i}.data) | 31 [ok, isSym, data] = parseData(bcs{i}, penalty, diffOp.grid) |
32 % Skip to next loop if there is no data | 32 |
33 if ~ok | |
34 % There was no data | |
33 continue | 35 continue |
34 end | 36 end |
35 | 37 |
36 if nargin(bcs{i}.data) == 1 | 38 if isSym |
37 % Grid data | 39 gridData{end+1} = data; |
38 gridData{end+1}.penalty = penalty; | 40 else |
39 gridData{end}.func = bcs{i}.data; | 41 symbolicData{end+1} = data; |
40 elseif nargin(bcs{i}.data) > 1 | |
41 % Symbolic data | |
42 coord = diffOp.grid.getBoundary(bcs{i}.boundary); | |
43 symbolicData{end+1}.penalty = penalty; | |
44 symbolicData{end}.func = bcs{i}.data; | |
45 symbolicData{end}.coords = num2cell(coord ,1); | |
46 end | 42 end |
47 end | 43 end |
48 | 44 |
49 % Setup penalty function | 45 % Setup penalty function |
50 O = spzeros(size(diffOp),1); | 46 O = spzeros(size(diffOp),1); |
86 elseif nargin(bc.data) ~= 1+dim | 82 elseif nargin(bc.data) ~= 1+dim |
87 error('sbplib:scheme:bcSetup:DataWrongNumberOfArguments', 'bcs{%d}.data has the wrong number of input arguments. Must be either only time or time and space.', i); | 83 error('sbplib:scheme:bcSetup:DataWrongNumberOfArguments', 'bcs{%d}.data has the wrong number of input arguments. Must be either only time or time and space.', i); |
88 end | 84 end |
89 end | 85 end |
90 end | 86 end |
87 | |
88 function [ok, isSym, dataStruct] = parseData(bc, penalty, grid) | |
89 if ~isfield(bc,'data') || isempty(bc.data) | |
90 ok = false; | |
91 return | |
92 end | |
93 ok = true; | |
94 | |
95 nArg = nargin(bc.data); | |
96 | |
97 if nArg > 1 | |
98 % Symbolic data | |
99 isSym = true; | |
100 coord = grid.getBoundary(bc.boundary); | |
101 dataStruct.penalty = penalty; | |
102 dataStruct.func = bc.data; | |
103 dataStruct.coords = num2cell(coord, 1); | |
104 else | |
105 % Grid data | |
106 isSym = false; | |
107 dataStruct.penalty = penalty; | |
108 dataStruct.func = bcs{i}.data; | |
109 end | |
110 end |