Mercurial > repos > public > sbplib
changeset 533:06d1606d6977 feature/boundaryGroup
Factor out function for handling a single boundary condition
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Thu, 03 Aug 2017 17:45:06 +0200 |
parents | b29f04ab5d99 |
children | 55a7777dfcd0 |
files | +multiblock/DiffOp.m |
diffstat | 1 files changed, 37 insertions(+), 33 deletions(-) [+] |
line wrap: on
line diff
--- a/+multiblock/DiffOp.m Thu Aug 03 17:38:05 2017 +0200 +++ b/+multiblock/DiffOp.m Thu Aug 03 17:45:06 2017 +0200 @@ -151,39 +151,7 @@ function [closure, penalty] = boundary_condition(obj, boundary, type) switch class(boundary) case 'cell' - I = boundary{1}; - name = boundary{2}; - - % Get the closure and penaly matrices - [blockClosure, blockPenalty] = obj.diffOps{I}.boundary_condition(name, type); - - % Expand to matrix for full domain. - div = obj.blockmatrixDiv; - if ~iscell(blockClosure) - temp = blockmatrix.zero(div); - temp{I,I} = blockClosure; - closure = blockmatrix.toMatrix(temp); - else - for i = 1:length(blockClosure) - temp = blockmatrix.zero(div); - temp{I,I} = blockClosure{i}; - closure{i} = blockmatrix.toMatrix(temp); - end - end - - if ~iscell(blockPenalty) - div{2} = size(blockPenalty, 2); % Penalty is a column vector - p = blockmatrix.zero(div); - p{I} = blockPenalty; - penalty = blockmatrix.toMatrix(p); - else - for i = 1:length(blockPenalty) - div{2} = size(blockPenalty{i}, 2); % Penalty is a column vector - p = blockmatrix.zero(div); - p{I} = blockPenalty{i}; - penalty{i} = blockmatrix.toMatrix(p); - end - end + [closure, penalty] = singleBoundaryCondition(obj, boundary, type); case 'multiblock.BoundaryGroup' error('not implemented') otherwise @@ -192,6 +160,42 @@ end + function [closure, penalty] = singleBoundaryCondition(obj, boundary, type) + I = boundary{1}; + name = boundary{2}; + + % Get the closure and penaly matrices + [blockClosure, blockPenalty] = obj.diffOps{I}.boundary_condition(name, type); + + % Expand to matrix for full domain. + div = obj.blockmatrixDiv; + if ~iscell(blockClosure) + temp = blockmatrix.zero(div); + temp{I,I} = blockClosure; + closure = blockmatrix.toMatrix(temp); + else + for i = 1:length(blockClosure) + temp = blockmatrix.zero(div); + temp{I,I} = blockClosure{i}; + closure{i} = blockmatrix.toMatrix(temp); + end + end + + if ~iscell(blockPenalty) + div{2} = size(blockPenalty, 2); % Penalty is a column vector + p = blockmatrix.zero(div); + p{I} = blockPenalty; + penalty = blockmatrix.toMatrix(p); + else + for i = 1:length(blockPenalty) + div{2} = size(blockPenalty{i}, 2); % Penalty is a column vector + p = blockmatrix.zero(div); + p{I} = blockPenalty{i}; + penalty{i} = blockmatrix.toMatrix(p); + end + end + end + function [closure, penalty] = interface(obj,boundary,neighbour_scheme,neighbour_boundary) error('not implemented') end