comparison +scheme/bcSetup.m @ 841:006defd0247b

Fix bug in +scheme.bcSetup outputs of parseDate(...) were not set correctly which caused a chrash in the case when no data was provided for the BC
author Jonatan Werpers <jonatan@werpers.com>
date Thu, 20 Sep 2018 11:45:40 +0200
parents 5cf9fdf4c98f
children 93489ddb73e8 c70131daaa6e ba7e442ea639
comparison
equal deleted inserted replaced
839:a4669d961d26 841:006defd0247b
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 [ok, isSym, data] = parseData(bcs{i}, penalty, diffOp.grid); 31 [ok, isSymbolic, data] = parseData(bcs{i}, penalty, diffOp.grid);
32 32
33 if ~ok 33 if ~ok
34 % There was no data 34 % There was no data
35 continue 35 continue
36 end 36 end
37 37
38 if isSym 38 if isSymbolic
39 symbolicData{end+1} = data; 39 symbolicData{end+1} = data;
40 else 40 else
41 gridData{end+1} = data; 41 gridData{end+1} = data;
42 end 42 end
43 end 43 end
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); 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);
84 end 84 end
85 end 85 end
86 end 86 end
87 87
88 function [ok, isSym, dataStruct] = parseData(bc, penalty, grid) 88 function [ok, isSymbolic, dataStruct] = parseData(bc, penalty, grid)
89 if ~isfield(bc,'data') || isempty(bc.data) 89 if ~isfield(bc,'data') || isempty(bc.data)
90 isSymbolic = [];
91 dataStruct = struct();
90 ok = false; 92 ok = false;
91 return 93 return
92 end 94 end
93 ok = true; 95 ok = true;
94 96
95 nArg = nargin(bc.data); 97 nArg = nargin(bc.data);
96 98
97 if nArg > 1 99 if nArg > 1
98 % Symbolic data 100 % Symbolic data
99 isSym = true; 101 isSymbolic = true;
100 coord = grid.getBoundary(bc.boundary); 102 coord = grid.getBoundary(bc.boundary);
101 dataStruct.penalty = penalty; 103 dataStruct.penalty = penalty;
102 dataStruct.func = bc.data; 104 dataStruct.func = bc.data;
103 dataStruct.coords = num2cell(coord, 1); 105 dataStruct.coords = num2cell(coord, 1);
104 else 106 else
105 % Grid data 107 % Grid data
106 isSym = false; 108 isSymbolic = false;
107 dataStruct.penalty = penalty; 109 dataStruct.penalty = penalty;
108 dataStruct.func = bcs{i}.data; 110 dataStruct.func = bcs{i}.data;
109 end 111 end
110 end 112 end