Mercurial > repos > public > sbplib
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 |