Mercurial > repos > public > sbplib
annotate +multiblock/DiffOp.m @ 498:324c927d8b1d feature/quantumTriangles
chnaged sbp interfacein 1d among many things
author | Ylva Rydin <ylva.rydin@telia.com> |
---|---|
date | Fri, 03 Mar 2017 16:19:41 +0100 |
parents | 30ff8879162e |
children | 111fcbcff2e9 |
rev | line source |
---|---|
186
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
1 classdef DiffOp < scheme.Scheme |
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
2 properties |
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
3 grid |
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
4 order |
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
5 diffOps |
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
6 D |
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
7 H |
498
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
8 |
210
39b7dcb2c724
multiblock: Implemented boundary conditions.
Jonatan Werpers <jonatan@werpers.com>
parents:
202
diff
changeset
|
9 blockmatrixDiv |
186
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
10 end |
498
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
11 |
186
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
12 methods |
498
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
13 function obj = DiffOp(doHand, grid, order, doParam,timeDep) |
186
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
14 % doHand -- may either be a function handle or a cell array of |
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
15 % function handles for each grid. The function handle(s) |
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
16 % should be on the form do = doHand(grid, order, ...) |
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
17 % Additional parameters for each doHand may be provided in |
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
18 % the doParam input. |
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
19 % grid -- a multiblock grid |
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
20 % order -- integer specifying the order of accuracy |
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
21 % doParam -- may either be a cell array or a cell array of cell arrays |
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
22 % for each block. If it is a cell array with length equal |
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
23 % to the number of blocks then each element is sent to the |
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
24 % corresponding function handle as extra parameters: |
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
25 % doHand(..., doParam{i}{:}) Otherwise doParam is sent as |
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
26 % extra parameters to all doHand: doHand(..., doParam{:}) |
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
27 default_arg('doParam', []) |
498
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
28 |
186
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
29 [getHand, getParam] = parseInput(doHand, grid, doParam); |
498
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
30 |
186
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
31 nBlocks = grid.nBlocks(); |
498
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
32 |
186
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
33 obj.order = order; |
498
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
34 |
186
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
35 % Create the diffOps for each block |
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
36 obj.diffOps = cell(1, nBlocks); |
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
37 for i = 1:nBlocks |
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
38 h = getHand(i); |
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
39 p = getParam(i); |
343
ac30761d7bdb
Fixed bug in parameter parsing.
Jonatan Werpers <jonatan@werpers.com>
parents:
335
diff
changeset
|
40 if ~iscell(p) |
ac30761d7bdb
Fixed bug in parameter parsing.
Jonatan Werpers <jonatan@werpers.com>
parents:
335
diff
changeset
|
41 p = {p}; |
ac30761d7bdb
Fixed bug in parameter parsing.
Jonatan Werpers <jonatan@werpers.com>
parents:
335
diff
changeset
|
42 end |
201
38f203f00f3a
Exeendend tests of multiblock.DiffOp.
Jonatan Werpers <jonatan@werpers.com>
parents:
186
diff
changeset
|
43 obj.diffOps{i} = h(grid.grids{i}, order, p{:}); |
186
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
44 end |
498
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
45 |
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
46 |
186
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
47 % Build the norm matrix |
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
48 H = cell(nBlocks, nBlocks); |
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
49 for i = 1:nBlocks |
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
50 H{i,i} = obj.diffOps{i}.H; |
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
51 end |
210
39b7dcb2c724
multiblock: Implemented boundary conditions.
Jonatan Werpers <jonatan@werpers.com>
parents:
202
diff
changeset
|
52 obj.H = blockmatrix.toMatrix(H); |
498
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
53 |
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
54 |
186
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
55 % Build the differentiation matrix |
498
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
56 switch timeDep |
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
57 case {'n','no','N','No'} |
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
58 obj.blockmatrixDiv = {grid.Ns, grid.Ns}; |
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
59 D = blockmatrix.zero(obj.blockmatrixDiv); |
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
60 for i = 1:nBlocks |
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
61 D{i,i} = obj.diffOps{i}.D; |
186
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
62 end |
498
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
63 |
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
64 for i = 1:nBlocks |
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
65 for j = 1:nBlocks |
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
66 intf = grid.connections{i,j}; |
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
67 if isempty(intf) |
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
68 continue |
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
69 end |
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
70 |
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
71 |
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
72 [ii, ij] = obj.diffOps{i}.interface(intf{1}, obj.diffOps{j}, intf{2}); |
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
73 D{i,i} = D{i,i} + ii; |
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
74 D{i,j} = D{i,j} + ij; |
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
75 |
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
76 [jj, ji] = obj.diffOps{j}.interface(intf{2}, obj.diffOps{i}, intf{1}); |
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
77 D{j,j} = D{j,j} + jj; |
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
78 D{j,i} = D{j,i} + ji; |
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
79 end |
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
80 end |
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
81 obj.D = blockmatrix.toMatrix(D); |
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
82 case {'y','yes','Y','Yes'} |
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
83 for i = 1:nBlocks |
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
84 D{i,i} = @(t)obj.diffOps{i}.D(t); |
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
85 end |
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
86 |
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
87 for i = 1:nBlocks |
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
88 for j = 1:nBlocks |
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
89 intf = grid.connections{i,j}; |
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
90 if isempty(intf) |
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
91 continue |
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
92 end |
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
93 |
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
94 [ii, ij] = obj.diffOps{i}.interface(intf{1}, obj.diffOps{j}, intf{2}); |
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
95 D{i,i} = @(t)D{i,i}(t) + ii(t); |
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
96 D{i,j} = ij; |
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
97 |
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
98 [jj, ji] = obj.diffOps{j}.interface(intf{2}, obj.diffOps{i}, intf{1}); |
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
99 D{j,j} = @(t)D{j,j}(t) + jj(t); |
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
100 D{j,i} = ji; |
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
101 end |
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
102 end |
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
103 obj.D = D; |
186
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
104 end |
498
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
105 |
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
106 |
186
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
107 function [getHand, getParam] = parseInput(doHand, grid, doParam) |
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
108 if ~isa(grid, 'multiblock.Grid') |
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
109 error('multiblock:DiffOp:DiffOp:InvalidGrid', 'Requires a multiblock grid.'); |
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
110 end |
498
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
111 |
186
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
112 if iscell(doHand) && length(doHand) == grid.nBlocks() |
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
113 getHand = @(i)doHand{i}; |
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
114 elseif isa(doHand, 'function_handle') |
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
115 getHand = @(i)doHand; |
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
116 else |
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
117 error('multiblock:DiffOp:DiffOp:InvalidGridDoHand', 'doHand must be a function handle or a cell array of length grid.nBlocks'); |
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
118 end |
498
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
119 |
186
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
120 if isempty(doParam) |
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
121 getParam = @(i){}; |
392
30ff8879162e
Better input parsing for multiblock DiffOp.
Jonatan Werpers <jonatan@werpers.com>
parents:
346
diff
changeset
|
122 return |
30ff8879162e
Better input parsing for multiblock DiffOp.
Jonatan Werpers <jonatan@werpers.com>
parents:
346
diff
changeset
|
123 end |
498
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
124 |
392
30ff8879162e
Better input parsing for multiblock DiffOp.
Jonatan Werpers <jonatan@werpers.com>
parents:
346
diff
changeset
|
125 if ~iscell(doParam) |
30ff8879162e
Better input parsing for multiblock DiffOp.
Jonatan Werpers <jonatan@werpers.com>
parents:
346
diff
changeset
|
126 getParam = @(i)doParam; |
30ff8879162e
Better input parsing for multiblock DiffOp.
Jonatan Werpers <jonatan@werpers.com>
parents:
346
diff
changeset
|
127 return |
30ff8879162e
Better input parsing for multiblock DiffOp.
Jonatan Werpers <jonatan@werpers.com>
parents:
346
diff
changeset
|
128 end |
498
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
129 |
392
30ff8879162e
Better input parsing for multiblock DiffOp.
Jonatan Werpers <jonatan@werpers.com>
parents:
346
diff
changeset
|
130 % doParam is a non-empty cell-array |
498
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
131 |
392
30ff8879162e
Better input parsing for multiblock DiffOp.
Jonatan Werpers <jonatan@werpers.com>
parents:
346
diff
changeset
|
132 if length(doParam) == grid.nBlocks() && all(cellfun(@iscell, doParam)) |
30ff8879162e
Better input parsing for multiblock DiffOp.
Jonatan Werpers <jonatan@werpers.com>
parents:
346
diff
changeset
|
133 % doParam is a cell-array of cell-arrays |
186
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
134 getParam = @(i)doParam{i}; |
392
30ff8879162e
Better input parsing for multiblock DiffOp.
Jonatan Werpers <jonatan@werpers.com>
parents:
346
diff
changeset
|
135 return |
186
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
136 end |
498
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
137 |
392
30ff8879162e
Better input parsing for multiblock DiffOp.
Jonatan Werpers <jonatan@werpers.com>
parents:
346
diff
changeset
|
138 getParam = @(i)doParam; |
186
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
139 end |
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
140 end |
498
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
141 |
186
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
142 function ops = splitOp(obj, op) |
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
143 % Splits a matrix operator into a cell-matrix of matrix operators for |
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
144 % each grid. |
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
145 ops = sparse2cell(op, obj.NNN); |
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
146 end |
498
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
147 |
344
61b75d6d4899
Added get method for boundary operators on multiblock DiffOp
Jonatan Werpers <jonatan@werpers.com>
parents:
343
diff
changeset
|
148 function op = getBoundaryOperator(obj, op, boundary) |
61b75d6d4899
Added get method for boundary operators on multiblock DiffOp
Jonatan Werpers <jonatan@werpers.com>
parents:
343
diff
changeset
|
149 if iscell(boundary) |
61b75d6d4899
Added get method for boundary operators on multiblock DiffOp
Jonatan Werpers <jonatan@werpers.com>
parents:
343
diff
changeset
|
150 localOpName = [op '_' boundary{2}]; |
61b75d6d4899
Added get method for boundary operators on multiblock DiffOp
Jonatan Werpers <jonatan@werpers.com>
parents:
343
diff
changeset
|
151 blockId = boundary{1}; |
61b75d6d4899
Added get method for boundary operators on multiblock DiffOp
Jonatan Werpers <jonatan@werpers.com>
parents:
343
diff
changeset
|
152 localOp = obj.diffOps{blockId}.(localOpName); |
498
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
153 |
344
61b75d6d4899
Added get method for boundary operators on multiblock DiffOp
Jonatan Werpers <jonatan@werpers.com>
parents:
343
diff
changeset
|
154 div = {obj.blockmatrixDiv{1}, size(localOp,2)}; |
61b75d6d4899
Added get method for boundary operators on multiblock DiffOp
Jonatan Werpers <jonatan@werpers.com>
parents:
343
diff
changeset
|
155 blockOp = blockmatrix.zero(div); |
61b75d6d4899
Added get method for boundary operators on multiblock DiffOp
Jonatan Werpers <jonatan@werpers.com>
parents:
343
diff
changeset
|
156 blockOp{blockId,1} = localOp; |
61b75d6d4899
Added get method for boundary operators on multiblock DiffOp
Jonatan Werpers <jonatan@werpers.com>
parents:
343
diff
changeset
|
157 op = blockmatrix.toMatrix(blockOp); |
61b75d6d4899
Added get method for boundary operators on multiblock DiffOp
Jonatan Werpers <jonatan@werpers.com>
parents:
343
diff
changeset
|
158 return |
61b75d6d4899
Added get method for boundary operators on multiblock DiffOp
Jonatan Werpers <jonatan@werpers.com>
parents:
343
diff
changeset
|
159 else |
61b75d6d4899
Added get method for boundary operators on multiblock DiffOp
Jonatan Werpers <jonatan@werpers.com>
parents:
343
diff
changeset
|
160 % Boundary är en sträng med en boundary group i. |
61b75d6d4899
Added get method for boundary operators on multiblock DiffOp
Jonatan Werpers <jonatan@werpers.com>
parents:
343
diff
changeset
|
161 end |
61b75d6d4899
Added get method for boundary operators on multiblock DiffOp
Jonatan Werpers <jonatan@werpers.com>
parents:
343
diff
changeset
|
162 end |
498
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
163 |
335
2d48db7151cf
Bug fix in boundary condition.
Jonatan Werpers <jonatan@werpers.com>
parents:
237
diff
changeset
|
164 % Creates the closure and penalty matrix for a given boundary condition, |
346
33b2ef863519
Allowed muliple closure BCs in multiblock.DiffOp.
Jonatan Werpers <jonatan@werpers.com>
parents:
344
diff
changeset
|
165 % boundary -- the name of the boundary on the form {id,name} where |
202
e2fefb6f0746
multiblock.DiffOp: Fleshed out boundary_condition() a bit more
Jonatan Werpers <jonatan@werpers.com>
parents:
201
diff
changeset
|
166 % id is the number of a block and name is the name of a |
346
33b2ef863519
Allowed muliple closure BCs in multiblock.DiffOp.
Jonatan Werpers <jonatan@werpers.com>
parents:
344
diff
changeset
|
167 % boundary of that block example: {1,'s'} or {3,'w'} |
335
2d48db7151cf
Bug fix in boundary condition.
Jonatan Werpers <jonatan@werpers.com>
parents:
237
diff
changeset
|
168 function [closure, penalty] = boundary_condition(obj, boundary, type) |
216
8b10476b9bb7
multiblock: Fixed some problems in DiffOp and Grid.
Jonatan Werpers <jonatan@werpers.com>
parents:
210
diff
changeset
|
169 I = boundary{1}; |
8b10476b9bb7
multiblock: Fixed some problems in DiffOp and Grid.
Jonatan Werpers <jonatan@werpers.com>
parents:
210
diff
changeset
|
170 name = boundary{2}; |
498
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
171 |
210
39b7dcb2c724
multiblock: Implemented boundary conditions.
Jonatan Werpers <jonatan@werpers.com>
parents:
202
diff
changeset
|
172 % Get the closure and penaly matrices |
216
8b10476b9bb7
multiblock: Fixed some problems in DiffOp and Grid.
Jonatan Werpers <jonatan@werpers.com>
parents:
210
diff
changeset
|
173 [blockClosure, blockPenalty] = obj.diffOps{I}.boundary_condition(name, type); |
498
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
174 |
210
39b7dcb2c724
multiblock: Implemented boundary conditions.
Jonatan Werpers <jonatan@werpers.com>
parents:
202
diff
changeset
|
175 % Expand to matrix for full domain. |
39b7dcb2c724
multiblock: Implemented boundary conditions.
Jonatan Werpers <jonatan@werpers.com>
parents:
202
diff
changeset
|
176 div = obj.blockmatrixDiv; |
346
33b2ef863519
Allowed muliple closure BCs in multiblock.DiffOp.
Jonatan Werpers <jonatan@werpers.com>
parents:
344
diff
changeset
|
177 if ~iscell(blockClosure) |
33b2ef863519
Allowed muliple closure BCs in multiblock.DiffOp.
Jonatan Werpers <jonatan@werpers.com>
parents:
344
diff
changeset
|
178 temp = blockmatrix.zero(div); |
33b2ef863519
Allowed muliple closure BCs in multiblock.DiffOp.
Jonatan Werpers <jonatan@werpers.com>
parents:
344
diff
changeset
|
179 temp{I,I} = blockClosure; |
33b2ef863519
Allowed muliple closure BCs in multiblock.DiffOp.
Jonatan Werpers <jonatan@werpers.com>
parents:
344
diff
changeset
|
180 closure = blockmatrix.toMatrix(temp); |
33b2ef863519
Allowed muliple closure BCs in multiblock.DiffOp.
Jonatan Werpers <jonatan@werpers.com>
parents:
344
diff
changeset
|
181 else |
33b2ef863519
Allowed muliple closure BCs in multiblock.DiffOp.
Jonatan Werpers <jonatan@werpers.com>
parents:
344
diff
changeset
|
182 for i = 1:length(blockClosure) |
33b2ef863519
Allowed muliple closure BCs in multiblock.DiffOp.
Jonatan Werpers <jonatan@werpers.com>
parents:
344
diff
changeset
|
183 temp = blockmatrix.zero(div); |
33b2ef863519
Allowed muliple closure BCs in multiblock.DiffOp.
Jonatan Werpers <jonatan@werpers.com>
parents:
344
diff
changeset
|
184 temp{I,I} = blockClosure{i}; |
33b2ef863519
Allowed muliple closure BCs in multiblock.DiffOp.
Jonatan Werpers <jonatan@werpers.com>
parents:
344
diff
changeset
|
185 closure{i} = blockmatrix.toMatrix(temp); |
33b2ef863519
Allowed muliple closure BCs in multiblock.DiffOp.
Jonatan Werpers <jonatan@werpers.com>
parents:
344
diff
changeset
|
186 end |
33b2ef863519
Allowed muliple closure BCs in multiblock.DiffOp.
Jonatan Werpers <jonatan@werpers.com>
parents:
344
diff
changeset
|
187 end |
498
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
188 |
335
2d48db7151cf
Bug fix in boundary condition.
Jonatan Werpers <jonatan@werpers.com>
parents:
237
diff
changeset
|
189 div{2} = size(blockPenalty, 2); % Penalty is a column vector |
220
5df8d20281fe
Made scheme boundary_condition return a cell array of penalties if there are several of them.
Jonatan Werpers <jonatan@werpers.com>
parents:
216
diff
changeset
|
190 if ~iscell(blockPenalty) |
5df8d20281fe
Made scheme boundary_condition return a cell array of penalties if there are several of them.
Jonatan Werpers <jonatan@werpers.com>
parents:
216
diff
changeset
|
191 p = blockmatrix.zero(div); |
5df8d20281fe
Made scheme boundary_condition return a cell array of penalties if there are several of them.
Jonatan Werpers <jonatan@werpers.com>
parents:
216
diff
changeset
|
192 p{I} = blockPenalty; |
5df8d20281fe
Made scheme boundary_condition return a cell array of penalties if there are several of them.
Jonatan Werpers <jonatan@werpers.com>
parents:
216
diff
changeset
|
193 penalty = blockmatrix.toMatrix(p); |
5df8d20281fe
Made scheme boundary_condition return a cell array of penalties if there are several of them.
Jonatan Werpers <jonatan@werpers.com>
parents:
216
diff
changeset
|
194 else |
5df8d20281fe
Made scheme boundary_condition return a cell array of penalties if there are several of them.
Jonatan Werpers <jonatan@werpers.com>
parents:
216
diff
changeset
|
195 for i = 1:length(blockPenalty) |
5df8d20281fe
Made scheme boundary_condition return a cell array of penalties if there are several of them.
Jonatan Werpers <jonatan@werpers.com>
parents:
216
diff
changeset
|
196 p = blockmatrix.zero(div); |
5df8d20281fe
Made scheme boundary_condition return a cell array of penalties if there are several of them.
Jonatan Werpers <jonatan@werpers.com>
parents:
216
diff
changeset
|
197 p{I} = blockPenalty{i}; |
5df8d20281fe
Made scheme boundary_condition return a cell array of penalties if there are several of them.
Jonatan Werpers <jonatan@werpers.com>
parents:
216
diff
changeset
|
198 penalty{i} = blockmatrix.toMatrix(p); |
5df8d20281fe
Made scheme boundary_condition return a cell array of penalties if there are several of them.
Jonatan Werpers <jonatan@werpers.com>
parents:
216
diff
changeset
|
199 end |
5df8d20281fe
Made scheme boundary_condition return a cell array of penalties if there are several of them.
Jonatan Werpers <jonatan@werpers.com>
parents:
216
diff
changeset
|
200 end |
186
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
201 end |
498
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
202 |
202
e2fefb6f0746
multiblock.DiffOp: Fleshed out boundary_condition() a bit more
Jonatan Werpers <jonatan@werpers.com>
parents:
201
diff
changeset
|
203 function [closure, penalty] = interface(obj,boundary,neighbour_scheme,neighbour_boundary) |
498
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
204 |
186
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
205 end |
498
324c927d8b1d
chnaged sbp interfacein 1d among many things
Ylva Rydin <ylva.rydin@telia.com>
parents:
392
diff
changeset
|
206 |
201
38f203f00f3a
Exeendend tests of multiblock.DiffOp.
Jonatan Werpers <jonatan@werpers.com>
parents:
186
diff
changeset
|
207 % Size returns the number of degrees of freedom |
186
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
208 function N = size(obj) |
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
209 N = 0; |
201
38f203f00f3a
Exeendend tests of multiblock.DiffOp.
Jonatan Werpers <jonatan@werpers.com>
parents:
186
diff
changeset
|
210 for i = 1:length(obj.diffOps) |
38f203f00f3a
Exeendend tests of multiblock.DiffOp.
Jonatan Werpers <jonatan@werpers.com>
parents:
186
diff
changeset
|
211 N = N + obj.diffOps{i}.size(); |
186
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
212 end |
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
213 end |
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
214 end |
1fc2eeb4f4e6
Moved multiblock grid to the multiblock package. Continued implementation. Added multiblock diffOp and removed some functions no longer needed.
Jonatan Werpers <jonatan@werpers.com>
parents:
diff
changeset
|
215 end |