annotate +multiblock/DiffOp.m @ 343:ac30761d7bdb feature/beams

Fixed bug in parameter parsing.
author Jonatan Werpers <jonatan@werpers.com>
date Fri, 04 Nov 2016 11:14:29 -0700
parents 2d48db7151cf
children 61b75d6d4899
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
210
39b7dcb2c724 multiblock: Implemented boundary conditions.
Jonatan Werpers <jonatan@werpers.com>
parents: 202
diff changeset
8
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
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
11
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
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
13 function obj = DiffOp(doHand, grid, order, 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
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', [])
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
28
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);
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
30
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();
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
32
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;
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
34
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
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
45
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
46
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);
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
53
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
54
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
233
b8ee5212f651 multiblock: Added a function to return number of points in each block for a mbGrid. Fixed a bug in DiffOp.
Jonatan Werpers <jonatan@werpers.com>
parents: 220
diff changeset
56 obj.blockmatrixDiv = {grid.Ns, grid.Ns};
b8ee5212f651 multiblock: Added a function to return number of points in each block for a mbGrid. Fixed a bug in DiffOp.
Jonatan Werpers <jonatan@werpers.com>
parents: 220
diff changeset
57 D = blockmatrix.zero(obj.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
58 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
59 D{i,i} = obj.diffOps{i}.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
60 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
61
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 for i = 1:nBlocks
237
0fc1de5cd85b multigrid.DiffOp: Bug fix.
Jonatan Werpers <jonatan@werpers.com>
parents: 233
diff changeset
63 for j = 1:nBlocks
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
64 intf = grid.connections{i,j};
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
65 if isempty(intf)
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
66 continue
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
67 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
68
237
0fc1de5cd85b multigrid.DiffOp: Bug fix.
Jonatan Werpers <jonatan@werpers.com>
parents: 233
diff changeset
69
201
38f203f00f3a Exeendend tests of multiblock.DiffOp.
Jonatan Werpers <jonatan@werpers.com>
parents: 186
diff changeset
70 [ii, ij] = obj.diffOps{i}.interface(intf{1}, obj.diffOps{j}, intf{2});
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
71 D{i,i} = D{i,i} + ii;
233
b8ee5212f651 multiblock: Added a function to return number of points in each block for a mbGrid. Fixed a bug in DiffOp.
Jonatan Werpers <jonatan@werpers.com>
parents: 220
diff changeset
72 D{i,j} = D{i,j} + ij;
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
73
201
38f203f00f3a Exeendend tests of multiblock.DiffOp.
Jonatan Werpers <jonatan@werpers.com>
parents: 186
diff changeset
74 [jj, ji] = obj.diffOps{j}.interface(intf{2}, obj.diffOps{i}, intf{1});
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
75 D{j,j} = D{j,j} + jj;
233
b8ee5212f651 multiblock: Added a function to return number of points in each block for a mbGrid. Fixed a bug in DiffOp.
Jonatan Werpers <jonatan@werpers.com>
parents: 220
diff changeset
76 D{j,i} = D{j,i} + ji;
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
77 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
78 end
210
39b7dcb2c724 multiblock: Implemented boundary conditions.
Jonatan Werpers <jonatan@werpers.com>
parents: 202
diff changeset
79 obj.D = blockmatrix.toMatrix(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
80
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
81
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
82 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
83 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
84 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
85 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
86
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
87 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
88 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
89 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
90 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
91 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
92 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
93 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
94
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
95 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
96 getParam = @(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
97 elseif iscell(doParam) && length(doParam) == 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
98 getParam = @(i)doParam{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
99 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
100 getParam = @(i)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
101 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
102 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
103 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
104
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
105 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
106 % 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
107 % 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
108 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
109 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
110
335
2d48db7151cf Bug fix in boundary condition.
Jonatan Werpers <jonatan@werpers.com>
parents: 237
diff changeset
111 % Creates the closure and penalty matrix for a given boundary condition,
202
e2fefb6f0746 multiblock.DiffOp: Fleshed out boundary_condition() a bit more
Jonatan Werpers <jonatan@werpers.com>
parents: 201
diff changeset
112 % boundary -- the name of the boundary on the form [id][name] where
e2fefb6f0746 multiblock.DiffOp: Fleshed out boundary_condition() a bit more
Jonatan Werpers <jonatan@werpers.com>
parents: 201
diff changeset
113 % id is the number of a block and name is the name of a
e2fefb6f0746 multiblock.DiffOp: Fleshed out boundary_condition() a bit more
Jonatan Werpers <jonatan@werpers.com>
parents: 201
diff changeset
114 % boundary of that block example: 1s or 3w
335
2d48db7151cf Bug fix in boundary condition.
Jonatan Werpers <jonatan@werpers.com>
parents: 237
diff changeset
115 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
116 I = boundary{1};
8b10476b9bb7 multiblock: Fixed some problems in DiffOp and Grid.
Jonatan Werpers <jonatan@werpers.com>
parents: 210
diff changeset
117 name = boundary{2};
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
118
210
39b7dcb2c724 multiblock: Implemented boundary conditions.
Jonatan Werpers <jonatan@werpers.com>
parents: 202
diff changeset
119 % 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
120 [blockClosure, blockPenalty] = obj.diffOps{I}.boundary_condition(name, type);
210
39b7dcb2c724 multiblock: Implemented boundary conditions.
Jonatan Werpers <jonatan@werpers.com>
parents: 202
diff changeset
121
39b7dcb2c724 multiblock: Implemented boundary conditions.
Jonatan Werpers <jonatan@werpers.com>
parents: 202
diff changeset
122 % Expand to matrix for full domain.
39b7dcb2c724 multiblock: Implemented boundary conditions.
Jonatan Werpers <jonatan@werpers.com>
parents: 202
diff changeset
123 div = obj.blockmatrixDiv;
39b7dcb2c724 multiblock: Implemented boundary conditions.
Jonatan Werpers <jonatan@werpers.com>
parents: 202
diff changeset
124 closure = blockmatrix.zero(div);
39b7dcb2c724 multiblock: Implemented boundary conditions.
Jonatan Werpers <jonatan@werpers.com>
parents: 202
diff changeset
125 closure{I,I} = blockClosure;
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
126 closure = blockmatrix.toMatrix(closure);
210
39b7dcb2c724 multiblock: Implemented boundary conditions.
Jonatan Werpers <jonatan@werpers.com>
parents: 202
diff changeset
127
335
2d48db7151cf Bug fix in boundary condition.
Jonatan Werpers <jonatan@werpers.com>
parents: 237
diff changeset
128 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
129 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
130 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
131 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
132 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
133 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
134 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
135 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
136 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
137 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
138 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
139 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
140 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
141
202
e2fefb6f0746 multiblock.DiffOp: Fleshed out boundary_condition() a bit more
Jonatan Werpers <jonatan@werpers.com>
parents: 201
diff changeset
142 function [closure, penalty] = interface(obj,boundary,neighbour_scheme,neighbour_boundary)
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
143
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 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
145
201
38f203f00f3a Exeendend tests of multiblock.DiffOp.
Jonatan Werpers <jonatan@werpers.com>
parents: 186
diff changeset
146 % 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
147 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
148 N = 0;
201
38f203f00f3a Exeendend tests of multiblock.DiffOp.
Jonatan Werpers <jonatan@werpers.com>
parents: 186
diff changeset
149 for i = 1:length(obj.diffOps)
38f203f00f3a Exeendend tests of multiblock.DiffOp.
Jonatan Werpers <jonatan@werpers.com>
parents: 186
diff changeset
150 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
151 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
152 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
153 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
154 end