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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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