Mercurial > repos > public > sbplib
changeset 866:dda1caa55eaf bcSetupExperiment
Merge with feature/grids
author | Jonatan Werpers <jonatan@werpers.com> |
---|---|
date | Thu, 26 Jul 2018 09:27:17 -0700 |
parents | 1cc5a0d26453 (diff) c7c622e26a53 (current diff) |
children | d634d4deb263 |
files | +multiblock/multiblockgrid.m +multiblock/stitchSchemes.m |
diffstat | 4 files changed, 32 insertions(+), 27 deletions(-) [+] |
line wrap: on
line diff
diff -r c7c622e26a53 -r dda1caa55eaf +multiblock/DiffOp.m --- a/+multiblock/DiffOp.m Wed Jul 25 18:36:57 2018 -0700 +++ b/+multiblock/DiffOp.m Thu Jul 26 09:27:17 2018 -0700 @@ -197,33 +197,8 @@ [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 - % TODO: used by beam equation, should be eliminated. SHould only set one BC per call - 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 = multiblock.local2globalClosure(blockClosure, obj.blockmatrixDiv, I); + penalty = multiblock.local2globalPenalty(blockPenalty, obj.blockmatrixDiv, I); end function [closure, penalty] = interface(obj,boundary,neighbour_scheme,neighbour_boundary)
diff -r c7c622e26a53 -r dda1caa55eaf +multiblock/local2globalClosure.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/+multiblock/local2globalClosure.m Thu Jul 26 09:27:17 2018 -0700 @@ -0,0 +1,11 @@ + +% Takes the local closure for ice or water and turns it into a closure for the whole system +% local -- The local closure +% div -- block matrix division for the diffOp +% I -- Index of blockmatrix block +function closure = local2globalClosure(local, div, I) + closure_bm = blockmatrix.zero(div); + closure_bm{I,I} = local; + + closure = blockmatrix.toMatrix(closure_bm); +end
diff -r c7c622e26a53 -r dda1caa55eaf +multiblock/local2globalPenalty.m --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/+multiblock/local2globalPenalty.m Thu Jul 26 09:27:17 2018 -0700 @@ -0,0 +1,11 @@ +% Takes the local penalty for ice or water and turns it into a penalty for the whole system +% local -- The local penalty +% div -- block matrix division for the diffOp +% I -- Index of blockmatrix block +function penalty = local2globalPenalty(local, div, I) + penaltyDiv = {div{1}, size(local,2)}; + penalty_bm = blockmatrix.zero(penaltyDiv); + penalty_bm{I,1} = local; + + penalty = blockmatrix.toMatrix(penalty_bm); +end
diff -r c7c622e26a53 -r dda1caa55eaf +scheme/bcSetup.m --- a/+scheme/bcSetup.m Wed Jul 25 18:36:57 2018 -0700 +++ b/+scheme/bcSetup.m Thu Jul 26 09:27:17 2018 -0700 @@ -59,6 +59,14 @@ S = @S_fun; end +% Borde man använda eval on här?? +% Borde man dela upp bcSetup i bcSetupSymbolic(name?) och bcSetupGridData +% och sen skriva en wrapper som sorterar och wrappar de två andra?? + +% Erbjuda en separat function for att validera en bc specifikation? +% alltid kräva alla fields? +% literal struct improvement? + function verifyBcFormat(bcs, diffOp) for i = 1:length(bcs) assertType(bcs{i}, 'struct');