Mercurial > repos > public > sbplib
comparison +multiblock/DiffOp.m @ 958:72cd29107a9a feature/poroelastic
Temporary changes in multiblock.DiffOp. Change traction operators in Elastic2dvariable to be true boundary operators. But adjoint FD conv test fails for dirichlet BC so need to debug!
author | Martin Almquist <malmquist@stanford.edu> |
---|---|
date | Wed, 05 Dec 2018 18:58:10 -0800 |
parents | 7d4f57725192 |
children | 262b52c3f268 |
comparison
equal
deleted
inserted
replaced
919:e30aaa4a3e09 | 958:72cd29107a9a |
---|---|
168 otherwise | 168 otherwise |
169 error('Unknown boundary indentifier') | 169 error('Unknown boundary indentifier') |
170 end | 170 end |
171 end | 171 end |
172 | 172 |
173 % Get a boundary cell of operators, specified by opName for the given boundary/BoundaryGroup | |
174 function opCell = getBoundaryCellOperator(obj, opName, boundary, blockmatrixDiv) | |
175 default_arg('blockmatrixDiv', obj.blockmatrixDiv); | |
176 | |
177 % Get size of cell | |
178 switch class(boundary) | |
179 case 'cell' | |
180 blockId = boundary{1}; | |
181 localCell = obj.diffOps{blockId}.get_boundary_operator(opName, boundary{2}); | |
182 case 'multiblock.BoundaryGroup' | |
183 blockId = boundary{1}{1}; | |
184 localCell = obj.diffOps{blockId}.get_boundary_operator(opName, boundary{1}{2}); | |
185 otherwise | |
186 error('Unknown boundary indentifier') | |
187 end | |
188 | |
189 % Loop over cell elements and build the boundary operator in each cell | |
190 opCell = cell(size(localCell)); | |
191 for i = 1:numel(opCell) | |
192 switch class(boundary) | |
193 case 'cell' | |
194 blockId = boundary{1}; | |
195 localOpCell = obj.diffOps{blockId}.get_boundary_operator(opName, boundary{2}); | |
196 localOp = localOpCell{i}; | |
197 | |
198 div = {blockmatrixDiv, size(localOp,2)} | |
199 blockOp = blockmatrix.zero(div); | |
200 blockOp{blockId,1} = localOp; | |
201 op = blockmatrix.toMatrix(blockOp); | |
202 opCell{i} = op; | |
203 | |
204 case 'multiblock.BoundaryGroup' | |
205 op = sparse(size(obj.D,1),0); | |
206 for j = 1:length(boundary) | |
207 localCell = obj.getBoundaryCellOperator(opName, boundary{j}, blockmatrixDiv); | |
208 op = [op, localCell{i}]; | |
209 end | |
210 opCell{i} = op; | |
211 otherwise | |
212 error('Unknown boundary indentifier') | |
213 end | |
214 end | |
215 end | |
216 | |
173 function op = getBoundaryQuadrature(obj, boundary) | 217 function op = getBoundaryQuadrature(obj, boundary) |
174 opName = 'H'; | 218 opName = 'H'; |
175 switch class(boundary) | 219 switch class(boundary) |
176 case 'cell' | 220 case 'cell' |
177 localOpName = [opName '_' boundary{2}]; | 221 localOpName = [opName '_' boundary{2}]; |