comparison +multiblock/DiffOp.m @ 962:262b52c3f268 feature/poroelastic

Bugfix in multiblock.DiffOp/getBoundaryOperatorWrapper
author Martin Almquist <malmquist@stanford.edu>
date Wed, 19 Dec 2018 06:54:47 +0100
parents 72cd29107a9a
children 99c2ef883dc6
comparison
equal deleted inserted replaced
961:2efeedf8c34f 962:262b52c3f268
147 error('Unknown boundary indentifier') 147 error('Unknown boundary indentifier')
148 end 148 end
149 end 149 end
150 150
151 % Get a boundary operator specified by opName for the given boundary/BoundaryGroup 151 % Get a boundary operator specified by opName for the given boundary/BoundaryGroup
152 function op = getBoundaryOperatorWrapper(obj, opName, boundary) 152 function op = getBoundaryOperatorWrapper(obj, opName, boundary, blockmatrixDiv)
153 default_arg('blockmatrixDiv', obj.blockmatrixDiv);
154
153 switch class(boundary) 155 switch class(boundary)
154 case 'cell' 156 case 'cell'
155 blockId = boundary{1}; 157 blockId = boundary{1};
156 localOp = obj.diffOps{blockId}.get_boundary_operator(opName, boundary{2}); 158 localOp = obj.diffOps{blockId}.get_boundary_operator(opName, boundary{2});
157 159
158 div = {obj.blockmatrixDiv{1}, size(localOp,2)}; 160 div = {blockmatrixDiv, size(localOp,2)};
159 blockOp = blockmatrix.zero(div); 161 blockOp = blockmatrix.zero(div);
160 blockOp{blockId,1} = localOp; 162 blockOp{blockId,1} = localOp;
161 op = blockmatrix.toMatrix(blockOp); 163 op = blockmatrix.toMatrix(blockOp);
162 return 164 return
163 case 'multiblock.BoundaryGroup' 165 case 'multiblock.BoundaryGroup'
164 op = sparse(size(obj.D,1),0); 166 op = [];
165 for i = 1:length(boundary) 167 for i = 1:length(boundary)
166 op = [op, obj.getBoundaryOperatorWrapper(opName, boundary{i})]; 168 op = [op, obj.getBoundaryOperatorWrapper(opName, boundary{i}, blockmatrixDiv)];
167 end 169 end
168 otherwise 170 otherwise
169 error('Unknown boundary indentifier') 171 error('Unknown boundary indentifier')
170 end 172 end
171 end 173 end
193 case 'cell' 195 case 'cell'
194 blockId = boundary{1}; 196 blockId = boundary{1};
195 localOpCell = obj.diffOps{blockId}.get_boundary_operator(opName, boundary{2}); 197 localOpCell = obj.diffOps{blockId}.get_boundary_operator(opName, boundary{2});
196 localOp = localOpCell{i}; 198 localOp = localOpCell{i};
197 199
198 div = {blockmatrixDiv, size(localOp,2)} 200 div = {blockmatrixDiv, size(localOp,2)};
199 blockOp = blockmatrix.zero(div); 201 blockOp = blockmatrix.zero(div);
200 blockOp{blockId,1} = localOp; 202 blockOp{blockId,1} = localOp;
201 op = blockmatrix.toMatrix(blockOp); 203 op = blockmatrix.toMatrix(blockOp);
202 opCell{i} = op; 204 opCell{i} = op;
203 205